1. Docker Compose介绍
Docker Compose官方文档:https://docs.docker.com/compose/
Docker Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。借助 Compose,可以使用 YAML
文件来配置应用程序的服务。然后,使用单个命令,从配置中创建并启动所有服务。
Docker Compose 是用来定义和运行一个或多个容器的工具。使用 compose 可以简 化容器镜像的构建以及容器的运行。比如,我们开发一个微服务项目,十几个项目,如果每个项目都执行docker run
,需要执行十几次,是不是很崩溃😫。使用 Compose,用 YAML
文件来配置这十几个项目的容器启动,一条命令搞定,并且你可以把这个YAML
文件放到任何有docker环境的机器上执行。
2. Compose 安装
-
下载
到github上下载对应版本的Compose,下载地址:https://github.com/docker/compose/releases
-
授权
把下载好的
docker-compose-linux-x86_64
上传到服务器移动到
/usr/local/bin
目录,并重命名为docker-compose
mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose
为
docker-compose
添加可执行权限chmod +x /usr/local/bin/docker-compose # 或者直接给个最高权限 chmod 777 /usr/local/bin/docker-compose
-
验证
docker-compose -v # 或者 docker-compose version
-
卸载
到
/usr/local/bin/
目录直接删除docker-compose
文件即可cd /usr/local/bin rm -f docker-compose
3. yaml配置文件
Docker Compose 的 YAML
文件包含 4 个一级 Key:version
、services
、networks
、volumes
version
是必须指定的,位于文件的第一行。它定义了 Compose 文件格式,Compose 文件格式有多个版本 2、2.x 和 3.x,与各个Docker版本的兼容性可以查看官网的文档:https://docs.docker.com/compose/compose-file/services
用于定义应用服务。networks
用于指引 Docker 创建新的网络。默认情况下,Docker Compose 会创建 bridge 网络。volumes
指定数据卷。
下面的例子,定义了两个服务器mysql-test
和tomcat-test
。YAML
文件的定义和使用docker run
命令指定的参数一样。直接看代码吧,注释写的很清楚😊
version: "3.9"
services:
mysql-test: # 定义一个Mysql服务
restart: always # 重启模式
container_name: mysql5.7 #定义容器名称
environment: # 指定环境变量,定义mysql root用户密码
MYSQL_ROOT_PASSWORD: 123456
privileged: true # 使用该参数,容器内的root拥有真正的root权限。否则,容器内的root只是外部的一个普通用户权限
volumes:
- /usr/data/mysql:/var/lib/mysql #宿主机数据卷
image: mysql:5.7.36 #指定启动的镜像
ports:
- 3306:3306 # 指定端口映射
tomcat-test: # 定义一个tomcat服务
restart: always # 重启模式
container_name: tomcat-test #容器名称
volumes:
- /usr/data/tomcat1:/usr/local/tomcat/webapps #宿主机数据卷
image: tomcat:8.5.45-jdk8-corretto #指定启动的镜像
ports:
- 8080:8080 # 指定端口映射
depends_on: # 定义容器启动顺序,只有mysql-test服务启动成功后,才启动tomcat
- mysql-test
YAML
配置文件的参数很多,详细的可以查看官网文档,上面使用的到参数,都是比较简单常用的。
4 常用命令
Docker Compose 默认使用的文件名 docker-compose.yml
,如果不是这个默认名称,需要使用docker-compose -f
参数指定。
命令语法格式为:
docker-compose -f [YAML配置文件名称] [执行参数]
以下命令的演示,默认的YAML
配置文件名都是docker-compose.yml
-
启动服务
命令格式:
docker-compose -f [YAML文件名称] up [-d]
参数
-d
后台启动# 前台启动 docker-compose up # 后台启动 docker-compose up -d
如果默认名称不是
docker-compose.yml
,则使用-f
参数指定# 如果默认名称不是docker-compose.yml,则使用-f参数指定 docker-compose -f docker-compose-test.yml up -d
-
停止服务
docker-compose down
如果默认名称不是docker-compose.yml,则使用
-f
参数指定# 如果默认名称不是docker-compose.yml,则使用-f参数指定 docker-compose -f docker-compose-test.yml down
-
列出所有运行容器
docker-compose ps
# 如果默认名称不是docker-compose.yml,则使用-f参数指定 docker-compose -f docker-compose-test.yml ps
-
重启
docker-compose restart
-
停止已运行的服务
docker-compose stop
-
查看日志
docker-compose logs docker-compose logs tomcat-test
5 微服务一键部署栗子🌰
结合Dockerfile
,使用Compose,一键部署微服务
-
Compose YAML配置文件
docker-compose.yml
version: '3' services: test-mysql: # mysql容器 build: context: /usr/test/db # 指定 Mysql Dockerfile 文件所在的路径 environment: MYSQL_ROOT_PASSWORD: root restart: always container_name: test-mysql image: test-mysql ports: - 3306:3306 test-redis: # redis 容器 image: redis:5.0.14 ports: - 6379:6379 restart: always container_name: redis test-register: # 注册中心 build: context: /usr/test/register # 指定 注册中心 Dockerfile 文件所在的路径 restart: always ports: - 8081:8080 container_name: test-register image: test-register test-admin: # 后台管理接口 build: context: /usr/test/register # 指定 后台管理接口 Dockerfile 文件所在的路径 restart: always ports: - 8081:8080 container_name: test-admin image: test-admin # 有其他服务可以继续添加
-
Mysql Dockerfile
FROM mysql:5.7.36 MAINTAINER warybee warybee@gmail.com # 修改mysql时区 ENV TZ=Asia/Shanghai RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone # 自动执行初始化sql脚本。 COPY init.sql /docker-entrypoint-initdb.d
-
后台管理接口、注册中心 Dockerfile
使用基于Spring boot开发,把项目打包成jar,定义运行jar包的
Dockerfile
# 指定基础镜像 FROM openjdk:8-alpine3.9 # `RUN` 构建镜像时执行的命令,这里创建一个目录 RUN mkdir -p /docker-demo # WORKDIR 工作目录,类似于cd命令 WORKDIR /docker-demo # 用于指定传递给构建运行时的变量 ARG JAR_FILE=target/docker-demo.jar # 把传过来的jar名称,重命名为app.jar COPY ${JAR_FILE} app.jar # 向外界暴露8080端口 EXPOSE 8080 # 设置两个环境变量,TZ=Asia/Shangha 修改时区。JAVA_OPTS="..." java运行时JVM参数 ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom" #容器启动命令,在容器启动时才进行调用 CMD java -jar app.jar $JAVA_OPTS
-
启动服务
把
docker-compose.yml
上传到服务器,启动服务docker-compose up -d
查看运行的服务
docker-compose ps