我是目录
- 1. Docker Compose介绍
- 2. Compose 安装
- 3. yaml配置文件
- 4 常用命令
- 5 微服务一键部署栗子🌰
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