Compose 是一个用于定义以及运行多个 Docker 容器的工具。
通过 YAML 文件配置应用服务,随后通过单个命令即可从这个配置创建并开启所有服务
容器编排可以应用于所有环境
作用
查看帮助
docker-compose -h
启动所有 compose 服务
docker-compose up
后台启动所有 compose 服务
docker-compose up -d
停止并删除容器、网络、卷、镜像
docker-compose down
进入容器内部
docker-compose exec dockerf-compose.yml中服务名 /bin/bash
查看经过 docker-compose 的所有运行中容器
docker-compose ps
查看经过 docker-compose 的所有容器进程
docker-compose top
开启经过 docker-compose 的所有服务
docker-compose start
重启经过 docker-compose 的所有服务
docker-compose restart
停止经过 docker-compose 的所有服务
docker-compose stop
查看容器输出日志
docker-compose logs dockerf-compose.yml中服务名
查看配置
docker-compose config
查看配置,只输出有问题的部分
docker-compose config -q
无输出说明 dockerf-compose.yml 中没有语法问题
安装
官网安装指南
下面示例使用手动安装
查看 docker 安装位置
whereis docker
下面示例将 docker compose
与 docker 安装在同路径
curl -SL https://github.com/docker/compose/releases/download/v2.7.0/docker-compose-linux-x86_64 -o /usr/bin/docker-compose
增加权限
chmod +x /usr/bin/docker-compose
验证安装
docker compose version
基本流程
docker compose up
指令开始并运行整个应用
dockerf-compose.yml 版本对照
dockerf-compose.yml 拥有多种版本,需要考虑 Docker Engine 版本
点击查看 Docker 官网版本对照
docker-compose.yml 示例
version: "3.9" # optional since v1.27.0
services:
web:
build: .
ports:
- "8000:5000"
volumes:
- .:/code
- logvolume01:/var/log
depends_on:
- redis
redis:
image: redis
volumes:
logvolume01: {}
编写 docker-compose.yml 文件
docker run
指令docker-compose up
启动的容器 就叫那个名字docker network create
指令version: "3"
# 整个 services 段,相当于一条一条的 docker run 指令的集合
services:
seataSoService:
image: seata-so-service
container_name: so1
ports:
- "8001:8000"
volumes:
- /app/seataSoService:/data
networks:
- net_tomcat_01
depends_on:
- redis
- mysql
redis_01:
image: redis:6.0.8
ports:
- "6379:6379"
volumes:
- /app/reids:redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- net_tomcat_01
command:
- redis-server /etc/redis/redis.conf
mysql_01:
image: mysql:5.7
environment:
mysql_root_password: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'learning'
MYSQL_USER: 'user1'
MYSQL_PASSWORD: '111111'
ports:
- "3306:3306"
volumes:
- /app/mysql/db:/var/lib/mysql
- /app/mysql/conf/my.cnf:/etc/my.cnf
- app/mysql/init:/docker-[entrypoint-initdb.d
networks:
- net_tomcat_01
# 解决外部无法访问问题
command:
- --default-authentication-plugin=mysql_native_password
networks:
net_tomcat_01:
调整微服务配置
基于上面的 docker-compose.yml 文件,各个微服务配置需要做出调整
微服务 对 其他微服务或中间件的配置中,基于 IP 或 服务名 的部分,改为基于 docker-compose.yml 中配置的服务名(此服务名 约等于容器名),这是因为
以 seataSoService 服务下 mysql 配置为例
spring:
application:
name: seata-so-service
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: org.gjt.mm.mysql.Driver # 注意
url: jdbc:mysql://mysql_01:3306/SO?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
username: root
password: root
服务打包
整个 docker-compose 涉及的所有服务的bao
以及其他组件传输至服务器
上例中,包含
启动
docker-compose up -d