在macos下使用docker-compose
本文说明docker-compose
在macos
下的使用方法,文章里面的大部分说明也适用于其他操作系统。我们可以用wordpress
和mysql
服务作为例子,撰写docker-compose.yml
如下(docker-compose-playground/docker-compose.yml at master · liweinan/docker-compose-playground · GitHub):
version: '3'
services:
db:
image: mysql:5.7
volumes:
- /backups/mysql:/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:5.1.1-php7.3-apache
ports:
- "8000:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
working_dir: /var/www/html
volumes:
- ./wp-content:/var/www/html/wp-content
- ./uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
上面的mysql
数据库使用了host
的本地目录,位于/backups/mysql
。我们要创建这个目录:
$ sudo mkdir -p /backups/mysql
使用root
权限创建完目录,要把目录的owner改为当前用户:
$ sudo chown -R `whoami` /backups/mysql
修改完成后查看目录权限设置正确了:
$ ls -ld /backups
drwxr-xr-x 3 weli wheel 96 May 7 12:14 /backups
$ ls -dl /backups/mysql/
drwxr-xr-x 2 weli wheel 64 May 7 12:14 /backups/mysql/
上面的目录创建过程完整记录如下:
可以看到目录的owner设置为当前用户了。接下来是配置macos的docker app,添加/backups
为共享目录。点击docker app的menu icon,然后在弹出菜单选择Preferences...
:
进入配置菜单,选择File Sharing
,添加/backups
,然后点击Apply & Restart
:
等待docker app重启完成。此时在docker-compose.yml
所在目录执行启动命令:
$ docker-compose up
可以看到docker-compose
启动两个容器的过程:
启动过程如上所示,启动后,我们可以查看下两个容器的运行状态。命令如下:
$ docker ps
查询结果如下:
可以看到两个运行起来的容器。其中,wordpress_1
这个容器的端口映射是8000->80
。我们可以访问host
映射出来的8000
端口试试看:
可以看到,wordpress
已经工作。此时查看docker-compose
服务的输出:
可以看到wordpress_1
容器输出的日志。此外,在上面的容器启动过程中,mysql
这个容器会创建和初始化数据库,然后wordpress
会试图连接mysql
这个容器。mysql
这个容器在启动过程中,wordpress
这个容器会去尝试连接mysql
这个容器的数据库,但是因为mysql
这边还没启动完,所以wordpress
会尝试多次连接。有关于容器的启动顺序的具体配置,可以查看docker
的文档:
配置完成后,我们看看host的目录内容:
我们也可以像使用普通容器一样,登录docker-compose
启动起来的容器:
当我们想停掉这两个容器的服务的时候,不要直接使用docker
命令来关掉,而是要用docker-compose
来关掉。还是回到docker-compose.yml
所在的目录,执行关停命令:
$ docker-compose down
关停过程如下:
需要注意的一点是,在关停容器以后,docker-compose
还会销毁掉它创建的容器。因此,不要在容器内部保存业务数据,,因为每次docker-compose
的关停服务都会销毁它创建的容器,再次启动的时候会重新创建容器。
所以在设计docker-compose
所使用的容器的时候,要注意把业务数据映射到host
目录上进行保存。我们可以看看wordpress
和mysql
两个容器所生成的数据。首先是wordpress
容器在host
上生成的数据:
可以看到uploads.ini
和wp-content
两个数据目录,这个是wordpress
容器所生成的。然后是mysql
的数据库所生成的数据:
可以看到mysql
的数据,按我们的设置,保存在host
的/backups/mysql/
目录里面。上面的目录映射,是在docker-compose.yml
里面配置的:
如上所示,我们对host
目录和容器内目录做了映射。当我们再次启动这两个容器的时候,就不会再次创建这些业务数据了,下面是两个容器的再次启动过程:
可以看到,再次启动的时候,两个容器的启动速度快多了,因为没有了初始化数据的过程。所以说,docker-compose
的容器设计也是要考虑到业务数据放在容器外的问题,要注意到容器是无状态的这个特性。
我们可以在docker-compose.yml
这个文件里面看到两个容器所使用的images:
分别是mysql:5.7
和wordpress:5.1.1-php7.3-apache
。所以这两个images,它们的Dockerfile
,是要拿来学习的,看看他们的入口脚本和设置,就可以更好理解上面这些参数是怎么样被使用,并协同工作的。
以上就是关于docker-compose
的一些使用说明,具体还是要在实战中多积累经验。
- 上一篇 搭建一个汇编开发学习用的容器
- 下一篇 汇编的bt指令