前言

我们都知道,docker是一个运行容器的软件。同时它也配置了一个运行一组容器的软件,叫做docker-compose。当我们使用非常小规模容器化应用的时候,我们可以使用此docker-compose去做。

docker-compose的介绍

根据官网的描述,docker-compose是一个能够管理多容器的工具,可以使用yaml文件来编写所需资源,并一键管理。

docker-compose支持的功能有:

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
[root@master wordpress]# docker-compose
Commands:
build Build or rebuild services
bundle Generate a Docker bundle from the Compose file
config Validate and view the Compose file
create Create services
down Stop and remove containers, networks, images, and volumes
events Receive real time events from containers
exec Execute a command in a running container
help Get help on a command
images List images
kill Kill containers
logs View output from containers
pause Pause services
port Print the public port for a port binding
ps List containers
pull Pull service images
push Push service images
restart Restart services
rm Remove stopped containers
run Run a one-off command
scale Set number of containers for a service
start Start services
stop Stop services
top Display the running processes
unpause Unpause services
up Create and start containers
version Show the Docker-Compose version information

安装docker-compose(以Linux为例)

1
2
3
sudo yum install -y docker && systemctl start docker
sudo curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/bin/docker-compose
sudo chmod +x /usr/bin/docker-compose #需要root权限

测试docker-compose是否安装成功:

1
sudo docker-compose version

docker-compose配置文件编写并启动

1
2
mkdir -p /usr/local/wordpress && cd /usr/local/wordpress
nano docker-compose.yml #编辑docker-compose.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
version: "3"
services:

db:
image: mysql:8.0
command:
- --default_authentication_plugin=mysql_native_password
- --character-set-server=utf8mb4
- --collation-server=utf8mb4_unicode_ci
volumes:
- db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: somewordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress

wordpress:
depends_on:
- db
image: wordpress:latest
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
volumes:
db_data:

编辑完毕之后,使用以下命令来启动:

1
sudo docker-compose up -d

但是,

1
Getting the final child's pid from pipe caused: EOF: unknown

如果遇到这个问题的话,原因是内存碎片过多,需要释放cache以消除问题。

1
2
3
echo 3 > /proc/sys/vm/drop_caches  #临时解决
echo 1 > /proc/sys/vm/compact_memory #永久解决
sysctl -w vm.compact_memory=1 #永久解决

详情可以参考此文,特此感谢。

Getting the final child’s pid from pipe caused: EOF: unknown

然后就会看到以下的结果:

1
2
3
4
[root@master wordpress]# docker-compose up -d
wordpress_db_1 is up-to-date
Starting wordpress_wordpress_1 ...
Starting wordpress_wordpress_1 ... done

然后输入http://ip:80,查看是否已经正常启动即可。

参考

Docker Compose overview | Docker Documentation

解决docker-compose: command not found问题的两种常用方法-云社区-华为云

实战 WordPress - Docker — 从入门到实践

Getting the final child’s pid from pipe caused: EOF: unknown