Compose容器编排
如果我需要同时部署好多个服务,难道要每个服务单独写Dockerfile然后在构建镜像,构建容器,这样累都累死了,所以docker官方给我们提供了docker-compose多服务部署的工具
1. Compose容器编排简介
Docker-Compose是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。可以管理多个Docker容器组成一个应用。你需要定义一个YAML格式的配置文件docker-compose.yml,写好多个容器之间的调用关系。然后,只要一个命令,就能同时启动/关闭这些容器
可以很容易地用一个配置文件定义一个多容器的应用,然后使用一条指令安装这个应用的所有依赖完成构建。Docker-Compose解决了容器与容器之间如何管理编排的问题。
2. 安装Compose
访问https://github.com/docker/compose/releases,下载docker-compose: 上传到/opt/software目录下,然后拷贝到/usr/local/bin/:
sh
[root@hadoop102 ~]# cp /opt/software/docker-compose-linux-x86_64 /usr/local/bin/docker-compose
增加可执行权限:
sh
[root@hadoop102 ~]# chmod +x /usr/local/bin/docker-compose
[root@hadoop102 ~]# sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
测试安装:
sh
[root@hadoop102 ~]# docker-compose --version
Docker Compose version v2.29.7
3. Compose核心概念
3.1 服务(service)
一个个应用容器实例,比如订单微服务、库存微服务、mysql容器、nginx容器或者redis容器。
3.2 工程(project)
由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
4. Compose使用步骤
- 编写Dockerfile定义各个微服务应用并构建出对应的镜像文件。
- 使用docker-compose.yml定义一个完整业务单元,安排好整体应用中的各个容器服务。
- 执行
docker-compose up
命令 来启动并运行整个应用程序,完成一键部署上线
5. Compose常用命令
docker-compose -h
# 查看帮助docker-compose up
# 启动所有docker-compose服务docker-compose up -d
# 启动所有docker-compose服务并后台运行docker-compose down
# 停止并删除容器、网络、卷、镜像。docker-compose exec yml里面的服务id
# 进入容器实例内部docker-compose ps
# 展示当前docker-compose编排过的运行的所有容器docker-compose top
# 展示当前docker-compose编排过的容器进程docker-compose logs yml里面的服务id
# 查看容器输出日志docker-compose config
# 检查配置docker-compose config -q
# 检查配置,有问题才有输出docker-compose restart
# 重启服务docker-compose start
# 启动服务docker-compose stop
# 停止服务
6. 编写docker-compose.yml文件
yml
version: "3"
services:
microService:
image: zzyy_docker:1.6
container_name: ms01
ports:
- "6001:6001"
volumes:
- /app/microService:/data
networks:
- rocket_net
depends_on:
- redis
- mysql
redis:
image: redis:6.0.8
ports:
- "6379:6379"
volumes:
- /app/redis/redis.conf:/etc/redis/redis.conf
- /app/redis/data:/data
networks:
- rocket_net
command: redis-server /etc/redis/redis.conf
mysql:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: '123456'
MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
MYSQL_DATABASE: 'db2021'
MYSQL_USER: 'zzyy'
MYSQL_PASSWORD: 'zzyy123'
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:
- dev_net
command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
networks:
dev_net:
7. 执行compose
sh
docker-compose up -d