Docker Compose使用总结
Compose是一个定义和管理多容器的工具(非容器编排),使用Python语言编写。使用Compose配置文件描述多个容器应用的架构,比如使用什么镜像、数据卷、网络、映射端口等;然后一条命令管理所有服务,比如启动、停止、重启
Compose 中有两个重要的概念:
- 服务 (service) :一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
- 项目 (project) :由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
一个项目可以由多个服务(容器)关联而成,Compose 面向项目进行管理,通过子命令对项目中的一组容器进行便捷地生命周期管理。
# 示例
version: '2'
services:
php:
container_name: pay_php
restart: always
image: registry.cn-shenzhen.aliyuncs.com/jingyou/currency:base
# image: registry.cn-shenzhen.aliyuncs.com/jingyou/php:swoole-45
volumes:
- ./code/currency-api2:/var/www/html
- ./config/certificate:/var/www/html/certificate
- ./config/openssl.cnf:/etc/ssl/openssl.cnf
- /var/www/html/.git
- /var/www/html/vendor
ports:
- "9502:9501"
db:
container_name: pay_db
restart: always
command: --default-authentication-plugin=mysql_native_password
image: mysql:8
ports:
- 26021:3306
environment:
MYSQL_DATABASE: hyperf
MYSQL_ALLOW_EMPTY_PASSWORD: 1
redis:
container_name: pay_redis
restart: always
image: redis:5
network:
default:
external: payapi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
version: '3'
services:
consumer:
restart: always
container_name: sentry-go-log-consumer
build:
context: ./code
dockerfile: Dockerfile
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 常用命令
- ps:列出所有运行容器
docker-compose ps
1
- logs:查看服务日志输出
docker-compose logs
1
- port:打印绑定的公共端口,下面命令可以输出 eureka 服务 8761 端口所绑定的公共端口
docker-compose port eureka 8761
1
- build:构建或者重新构建服务
docker-compose build
1
- start:启动指定服务已存在的容器
docker-compose start eureka
1
- stop:停止已运行的服务的容器
docker-compose stop eureka
1
- rm:删除指定服务的容器
docker-compose rm eureka
1
- up:构建、启动容器
docker-compose up
1
- kill:通过发送 SIGKILL 信号来停止指定服务的容器
docker-compose kill eureka
1
- pull:下载服务镜像
- scale:设置指定服务运气容器的个数,以 service=num 形式指定
docker-compose scale user=3 movie=3
1
- run:在一个服务上执行一个命令
docker-compose run web bash
1
# 常见问题
# 1. ports和expose的区别
docker-compose中有两种方式可以暴露容器的端口:ports和expose。
# ports
ports暴露容器端口到主机的任意端口或指定端口,用法:
ports:
- "80:80" # 绑定容器的80端口到主机的80端口
- "9000:8080" # 绑定容器的8080端口到主机的9000端口
- "443" # 绑定容器的443端口到主机的任意端口,容器启动时随机分配绑定的主机端口号
1
2
3
4
2
3
4
不管是否指定主机端口,使用ports都会将端口暴露给主机。
# expose
expose暴露容器给link到当前容器的容器,用法:
expose:
- "3000"
- "8000"
1
2
3
2
3
以上指令将当前容器的端口3000和8000暴露给link到本容器的容器。
和ports的区别是,expose不会将端口暴露给主机。
上次更新: 2022/12/01, 11:09:34