Docker Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。
定义一个YAML格式的配置文件docker-compose.yml,写好对个容器之间的调用关系。然后,只要一个命令就能同时启动/关闭这些容器。
Docker建议我们每个容器中只运行一个服务,因此需要docker compose多服务部署的工具。
安装Compose Reference地址:Reference | Docker Documentation 
Install地址: Manuals | Docker Documentation 
CentOS 安装举例:手动安装
DOCKER_CONFIG=${DOCKER_CONFIG:-/usr/local/lib/docker}
第一行代码详见${}的详细用法
下载慢的话可以使用国内镜像源
curl -SL https://get.daocloud.io/docker/compose/releases/download/v2.16.0/docker-compose-`uname  -s`-`uname  -m` -o $DOCKER_CONFIG /cli-plugins/docker-compose
如果还是慢,可在本地下载完成后,上传到/usr/local/lib/docker/cli-plugins/,并改名
mv docker-compose-linux-x86_64 docker-compose
添加可执行权限
sudo chmod  +x /usr/local/lib/docker/cli-plugins/docker-compose
查看是否安装成功
# docker compose version
Compose核心概念 一文件 
两要素 
Compose命令 
命令 
描述 
 
 
docker compose -h 
查看帮助 
 
docker compose up 
启动所有docker compose服务 
 
docker compose up -d 
启动所有docker compose服务并后台运行 
 
docker compose down 
停止并删除容器、网络、卷、镜像 
 
docker compose exec id /bin/bash 
进入容器实例内部,docker-compose.yml中的id 
 
docker compose ps 
展示当前docker compose编排过的运行的容器 
 
docker compose top 
展示当前docker compose编排过的容器进程 
 
docker compose logs id 
查看容器输出日志 
 
docker compose config 
检查配置 
 
docker compose config -q 
检查配置,有问题才输出 
 
docker compose restart 
重启服务 
 
docker compose start 
启动服务 
 
docker compose stop 
停止服务 
 
Compose实战 准备项目 项目下载地址:
数据库脚本 使用user表作为案例,其脚本如下:
CREATE  TABLE  `tb2023`.`t_user`  (int  UNSIGNED NOT  NULL  AUTO_INCREMENT,varchar (50 ) NULL  COMMENT '用户名' ,varchar (50 ) NULL  COMMENT '密码' ,NULL  COMMENT '性别 0=女 1=男' ,int  DEFAULT  '1'  COMMENT '乐观锁' ,DEFAULT  '1'  COMMENT '删除标志,默认0不删除 1删除' ,timestamp  NULL  ON  UPDATE  CURRENT_TIMESTAMP  COMMENT '创建时间' ,timestamp  NULL  ON  UPDATE  CURRENT_TIMESTAMP  COMMENT '更新时间' ,PRIMARY  KEY (`id`)
项目配置文件 application.yml server: port:  8080 spring: datasource: driver-class-name:  com.mysql.cj.jdbc.Driver url:  jdbc:mysql://172.31.193.36:3306/tb2023?useSSL=true&characterEncoding=UTF-8&serverTimezone=UTC username:  root password:  123456 redis: host:  172.31 .193 .36 port:  6379 password:  123456 lettuce: pool: max-active:  10 max-idle:  10 min-idle:  1 time-between-eviction-runs:  10s 
从配置文件中可以看到项目包含了:
注意:这里mysql和redis的IP地址固定了,使用的是Linux系统的IP地址,使用ip addr可查看eth0的IP。
构建镜像 编写Dockerfile文件
Dockerfile FROM  openjdk:8 COPY  *.jar /app.jar CMD  ["--server.port=8080" ] EXPOSE  8080 ENTRYPOINT  ["java" , "-jar" , "/app.jar" ] 
使用maven打包项目,将Dockerfile和jar一块上传到服务器
打包镜像
docker build -t docker-spring-boot .
查看镜像
[root@swcode compose]# docker images
不使用Compose 单独启动MySQL容器 启动MySQL容器
docker run -d -p 3306:3306 --name mysql8 --privileged=true -v /compose/mysql/conf:/etc/mysql/conf.d -v /compose/mysql/logs:/logs -v /compose/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8
进入容器
docker exec  -it mysql8 bash
登陆mysql,密码是123456
创建数据库tb2023
创建t_user表
CREATE  TABLE  `tb2023`.`t_user`  (int  UNSIGNED NOT  NULL  AUTO_INCREMENT,varchar (50 ) NULL  COMMENT '用户名' ,varchar (50 ) NULL  COMMENT '密码' ,NULL  COMMENT '性别 0=女 1=男' ,int  DEFAULT  '1'  COMMENT '乐观锁' ,DEFAULT  '1'  COMMENT '删除标志,默认0不删除 1删除' ,timestamp  NULL  ON  UPDATE  CURRENT_TIMESTAMP  COMMENT '创建时间' ,timestamp  NULL  ON  UPDATE  CURRENT_TIMESTAMP  COMMENT '更新时间' ,PRIMARY  KEY (`id`)
单独启动Redis容器 下载配置文件:https://redis.io/docs/management/config/ 
修改以下几项
appendonly yes#  bind  127.0.0.1
启动Redis容器
docker run -p 6379:6379 --name redis708 --privileged=true -v /compose/redis/redis.conf:/etc/redis/redis.conf -v /compose/redis/data:/data -d redis:7.0.8 redis-server /etc/redis/redis.conf
查看是否启动成功
单独启动项目容器 启动项目
docker run -d -p 8080:8080 docker-spring-boot
查看是否启动成功
[root@swcode compose]# docker ps
测试项目 访问Swagger接口:http://ip:8080/swagger-ui/index.html 
使用Compose编排 docker-compose文件 docker-compose.yml version:  "3" services: microService: image:  docker-spring-boot container_name:  ms01 ports: -  "8080:8080" volumes: -  /compose/microService:/data networks: -  ms01_net depends_on: -  redis -  mysql redis: image:  redis:7.0.8 ports: -  "6379:6379" volumes: -  /compose/redis/redis.conf:/etc/redis/redis.conf -  /compose/redis/data:/data networks: -  ms01_net command:  /usr/local/bin/redis-server  /etc/redis/redis.conf mysql: image:  mysql:8 environment: MYSQL_ROOT_PASSWORD:  '123456' MYSQL_ALLOW_EMPTY_PASSWORD:  'no' MYSQL_DATABASE:  'tb2023' MYSQL_USER:  'swcode' MYSQL_PASSWORD:  '123456' ports: -  "3306:3306" volumes: -  /compose/mysql/data:/var/lib/mysql  -  /compose/mysql/conf:/etc/mysql/conf.d  -  /compose/mysql/db:/docker-entrypoint-initdb.d  -  /compose/mysql/logs:/logs  networks: -  ms01_net command:  --default-authentication-plugin=mysql_native_password  networks: ms01_net: 
修改项目配置 
通过服务名访问,IP无关
 
更改IP为服务名
application.yml spring: datasource: driver-class-name:  com.mysql.cj.jdbc.Driver url:  jdbc:mysql://mysql:3306/tb2023?useSSL=true&characterEncoding=UTF-8&serverTimezone=UTC username:  root password:  123456 redis: host:  redis port:  6379 password:  123456 lettuce: pool: max-active:  10 max-idle:  10 min-idle:  1 time-between-eviction-runs:  10s 
重新打包上传到服务器,重新构建
docker rmi -f docker-spring-boot
启动所有容器项目 清空所有容器
docker rm -f $(docker ps -aq)
创建配置文件/compose/redis/redis/redis.conf
Redis配置文件,下载地址:https://redis.io/docs/management/config/。 
修改以下几项
appendonly yes
执行启动命令
docker-compose.yml所在目录 查看运行的服务
[root@swcode compose]# docker ps
测试项目 访问Swagger接口:http://ip:8080/swagger-ui/index.html 
停止项目