不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

Docker Compose的使用

什么是 docker-compose

在 Docker 把容器技术大众化之后,Docker 周边涌现出了数不胜数的扩展、增强产品,其中有一个名字叫“Fig”的小项目格外令人瞩目。
Fig 为 Docker 引入了“容器编排”的概念,使用 YAML 来定义容器的启动参数、先后顺序和依赖关系,让用户不再有 Docker 冗长命令行的烦恼,第一次见识到了“声明式”的威力。
Docker 公司也很快意识到了 Fig 这个小工具的价值,于是就在 2014 年 7 月把它买了下来,集成进 Docker 内部,然后改名成了docker-compose

如何使用 docker-compose

安装

1
2
3
4
5
6
7
8
9
10
# intel x86_64
sudo curl -SL https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-x86_64 \
-o /usr/local/bin/docker-compose

# apple m1
sudo curl -SL https://github.com/docker/compose/releases/download/v2.6.1/docker-compose-linux-aarch64 \
-o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

编写 YAML 文件

docker-compose 里管理容器的核心概念是service
docker-compose 里的service就是一个容器化的应用程序,通常是一个后台服务,用 YAML 定义这些容器的参数和相互之间的关系。
下面来编写一个简单的dc-nginx.yml文件,用于启动一个nginx容器

1
2
3
4
5
6
7
services:
registry:
image: nginx # 镜像名
container_name: nginx # 容器名
restart: always # 容器的重启策略,no:容器退出时不重启,always:容器退出时总是重启,on-failure:只有当容器的退出状态码不为0时才重启,unless-stopped:除非手动停止容器,否则总是重启容器
ports: # 端口号暴露
- 80:80

执行

1
2
3
4
5
6
7
# 不加-f,默认是目录下的docker-compose.yml
$ docker-compose -f dc-nginx.yml up -d
[+] Running 8/8
# 查看容器
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
61584a254a15 nginx "/docker-entrypoint.…" 8 seconds ago Up 5 seconds 0.0.0.0:80->80/tcp, :::80->80/tcp nginx

使用 docker-compose 搭建 WordPress 网站

在空目录下新建dc-wp.yml

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
35
36
37
38
39
40
41
42
43
44
volumes:
maria_data: {}

services:
mariadb: # 定义数据库 MariaDB
image: mariadb:10
container_name: mariadb
restart: always
# 设置环境变量
environment:
MARIADB_DATABASE: db
MARIADB_USER: wp
MARIADB_PASSWORD: 123
MARIADB_ROOT_PASSWORD: 123
#
volumes:
- maria_data:/var/lib/mysql

wordpress:
image: wordpress:5
container_name: wordpress
restart: always

environment:
WORDPRESS_DB_HOST: mariadb # 因为 docker-compose 会自动把 MariaDB 的名字用做网络标识,所以在连接数据库的时候(字段 WORDPRESS_DB_HOST)就不需要手动指定 IP 地址了,直接用“service”的名字 mariadb 就行了
WORDPRESS_DB_USER: wp
WORDPRESS_DB_PASSWORD: 123
WORDPRESS_DB_NAME: db

depends_on: # 设置容器的依赖关系,指定容器启动的先后顺序
- mariadb # mariadb启动后

nginx:
image: nginx:alpine
container_name: nginx
hostname: nginx
restart: always
ports:
- 80:80
volumes:
- ./wp.conf:/etc/nginx/conf.d/default.conf

depends_on:
- wordpress # wordpress启动后

配置文件wp.conf

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 80;
default_type text/html;

location / {
proxy_http_version 1.1;
proxy_set_header Host $host;

#proxy_pass http://172.20.0.110;
proxy_pass http://wordpress;
}
}

执行

1
$ docker-compose -f dc-wp.yml up -d

查看容器状态

至此完成了WordPress的搭建。

链接

------ 本文结束------
如果本篇文章对你有帮助,可以给作者加个鸡腿~(*^__^*),感谢鼓励与支持!