Docker
Docker
1、docker
1)什么是docker?
- Docker是一个容器化平台,它以容器的形式将应用程序及其所有依赖项打包在一起,以确保应用程序在开发,测试或生产的任何环境中无缝运行。
- Docker容器,将一个软件包装在一个完整的文件系统中,该文件系统包含运行所需的一切:代码,运行时,系统工具,系统库等可以安装在服务器上的任何东西。
- 这可以保证软件始终运行相同,无论其环境如何。
2)docker的优势?
- 提供一致的运行环境,容易迁移
- 使用分层和镜像的概念,容易维护、容易扩展
- 虚拟机需要完整的操作系统,资源消耗大,docker只是一个进程
2、镜像
1)什么是docker镜像?
Docker镜像是Docker容器的源代码。换句话说,Docker镜像用于创建容器。使用build命令创建镜像,并且在使用run启动时它们将生成容器。镜像存储在Docker注册表registry.hub.docker.com中,因为它们可能变得非常大,镜像被设计为由其他镜像层组成,允许在通过网络传输镜像时发送最少量的数据。
3、容器
1) 什么是docker容器?
Docker容器包括应用程序及其所有依赖项,但与其他容器共享内核,作为主机操作系统上用户空间中的独立进程运行。Docker容器不依赖于任何特定的基础架构:它们可以在任何计算机,任何基础架构和任何云中运行。
2)容器的状态
- 运行
- 重启
- 已退出
- 已暂停
4、常用命令
1)镜像命令
# 查看所有本地的主机上的镜像
docker images
# 搜索镜像
docker search
# 下拉镜像
docker pull
# 删除镜像
docker rmi
2)容器命令
# 列出可运行的容器
docker ps
# 启动nginx容器,并挂载本地文件目录到容器html的命令是?
docker run -d -P --name nginx2 -v /home/nginx:/usr/share/nginx/html nginx
# 进入容器的方法
docker attach 容器id
docker exec -it 容器id /bin/bash
5、dockerfile
1)常见指令
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 竟像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 保留的端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承 DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY # 类似ADD ,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量
2)使用dockerfile 打包 springboot 项目的流程
- centos 服务器上安装docker
- 将本地项目打成jar包,上传到服务器上的 test 文件夹下
- 在test文件夹下创建dockerfile,并编写dockerfile
- 执行docker构建镜像命令 (docker build)
- 运行刚才构建成的镜像(docker run)
# dockerfile示例
FROM java:8
VOLUME /tmp
ADD thymeleaf-master-1.0-SNAPSHOT.jar /thymeleaf-master.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/thymeleaf-master.jar"]
6、docker-compose
1)compose 简介
Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
2)使用步骤
- 使用 Dockerfile 定义应用程序的环境
- 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行
- 最后,执行 docker-compose up 命令来启动并运行整个应用程序
3)yml指令
version
制定本yml依从的compose哪个版本制定的
build
指定为构建镜像上下文路径
container_name
指定自定义容器名称,而不是生成的默认名称
depends_on
设置依赖关系
ecpose
暴露端口
image
指定容器运行的镜像
restart
重启:
- no
- always
- on-failure
- unless-stopped
volumes
将主机的数据卷或者文件挂载到容器里
command
覆盖容器启动的默认命令
7、项目
采用jeecg框架,是一种前后端分离框架。
打包至少需要4个容器:
- 前端
- jeecg-boot-nginx
- 后端
- jeecg-boot-system
- jeecg-boot-mysql
- jeecg-boot-redis
框架写好的有:
- Dockerfile
- nignx
- 基础镜像nginx
- mysql
- 基础镜像msyql 8.0.19
- 将数据库 copy 到容器中
- system
- 基础镜像 java8_server-jre
- 将jar包添加到容器中
- 执行cmd命令java -jar
- nignx
- docker-compose
- docker-compose.yml
- system
- mysql
- redis
- docker-compose-server.yml
- system
- mysql
- redis
- nginx
- docker-compose.yml
项目打包步骤:
1)修改mysql 的 url 和 redis 的 host 分别用 jeecg-boot-mysql、jeecg-boot-redis 代替localhost
2)采用dev编译项目并使用 maven 打成jar包
3)执行docker-compose.yml (docker-compose up -d)
4)前端项目通过build构建镜像 (docker build -t nginx:jeecgboot . )
5)准备好4个镜像后,登录docker hub ,将镜像上传到docker仓库中
6)修改docker-compose-server.yml 并上传到服务器
7)执行docker-compose-server.yml ( docker-compose -f ./docker-compose-server.yml up )
8)环境部署完成
参考链接:

浙公网安备 33010602011771号