Docker-Compose容器编排

Docker Compose可以轻松,高效的管理容器,他是一个用于定义和运行多个容器的docker的应用程序工具。在生产环境中一个应用肯定有很多个docker容器构成,而就单纯的docker一次性只能实现单个容器的部署,为了这个问题,docker compose 应运而生。

安装

官方下载文档 :https://docs.docker.com/compose/install/

docker默认不自带docker-compose工具,需要自己手动去下载

1
2
3
4
5
curl -SL https://github.com/docker/compose/releases/download/v2.4.1/docker-compose-linux-x86_64 -o /usr/bin/docker-compose

[root@docker ~]# chmod +x /usr/bin/docker-compose
[root@docker ~]# docker-compose -v
Docker Compose version v2.4.1

使用和管理

使用docker-compose需要在目录里定义一个名称为”docker-compose.yml”的yml文件,这个文件就是用来定义服务配置的之后可以使用docker-compose来管理这个文件里定义的资源。

1
2
3
4
5
docker-compose up #启动
docker-compose restart #重新启动
docker-compose stop # 停止,不会删除容器和镜像
docker-compose down # 停止,并删除关联的容器
docker-compose ps # 正在运行的容器

YML配置参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#全局配置层
version: "3" #版本
services:
##定义层
app1:
##配置层
image: nginx:1.26 #镜像
ports:80:80 #端口映射
environment: aa=bb #系统环境
volumes: #挂载卷定义
networks: #网络定义
app2:
app3:
...

version

这个版本需要和docker的版本相对应具体对应信息可去官网查看版本对照

build

在配置层定义,如果自己定义了dockerfile想让docker-compose来运行可以直接使用build来构建。

1
2
3
4
5
# build 填写的是dockerfile处于的路径 .表示当前路径
version: "3"
services:
myapp:
build: .

image

用来指定镜像

1
2
3
services:
myapp:
image: nginx

command

在配置层定义,修改容器启动时执行的命令

1
2
3
4
5
version: "3"
services:
myapp:
image: centos
command: ["bash"]

container_name

在配置层定义,默认docker-compose启动容器的名称格式为<项目名称><服务名称><序号>

这个参数可以直接修改容器的名字

1
2
3
4
5
6
version: "3"
services:
myapp:
container_name: myapp
image: centos
command: ["bash"]

environment

定义容器的环境变量

1
2
3
4
5
6
7
version: "3"
services:
myapp:
container_name: mySQL
image: mariadb
environment:
MYSQL_ROOT_PASSWORD: aaaaaa

depends_on

在配置层定义,用来配置启动关系,配置了之后里面写其他服务容器的名称,只有里面定义容器启动后,自己才会启动,可以理解为服务容器启动的前提条件。

1
2
3
4
5
6
7
8
9
10
11
version: "3"
services:
web:
build: .
depends_on:
- db
- redis
redis:
image: redis
db:
image: mysql

restart

在配置层定义,用来配置重启策略,模式如下
no: 是默认的重启策略,在任何情况下都不会重启容器
always: 容器总是重新启动
on-failure: 在容器非正常退出时(退出状态非0),才会重启容器
unless-stopped: 在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器

volumes

在配置层定义,用来把主机的数据卷或着文件挂载到容器里。

1
2
3
4
5
6
7
version: "3"
services:
myapp:
image: nginx:latest
volumes:
- "/usr/nginx/html:/usr/share/nginx/html"
- "/var/log/nginx:/var/log/nginx"

WordPress

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
34
[root@localhost]# cat > docker-compose.yml <<EOF
version: '3.1'

services:

wordpress:
image: wordpress
restart: always
ports:
- 8080:80
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: exampleuser
WORDPRESS_DB_PASSWORD: examplepass
WORDPRESS_DB_NAME: exampledb
volumes:
- wordpress:/var/www/html

db:
image: mysql:5.7
restart: always
environment:
MYSQL_DATABASE: exampledb
MYSQL_USER: exampleuser
MYSQL_PASSWORD: examplepass
MYSQL_RANDOM_ROOT_PASSWORD: '1'
volumes:
- db:/var/lib/mysql

volumes:
wordpress:
db:
EOF
[root@boychai wp]# docker-compose up -d