喵の窝

我可能遇上了假主机 - docker使用小记 (肆)

docker-compose

在上一节中我们创建了两个容器,并且把两个容器关联了起来。随着创建的容器越来越多,容器之间的依赖关系也变得越来越复杂。因此手动管理容器就变得麻烦了起来。而通过docker-compose,我们可以创建一个配置文件,这个配置文件中包含了多个容器,以及容器之间的依赖关系。再通过docker-compose来启动配置文件中的容器。

配置文件

由于docker的发展很快,docker-compose的配置文件也分为多个版本,不同版本的docker-compose只能读取对应版本的配置文件。具体的对应关系可以到官网查看。这里我们以第一版为例讲解一下配置文件如何编写。

再上一篇中,我们创建了两个容器,下面我们为这两个容器编写docker-compose的配置文件。docker-compose默认会读取当前目录下名为docker-compose.yml的配置文件。如果没有特殊需求,可以直接用这个名字作为配置文件的文件名。
注:yml文件只能用空格缩进,用tab缩进在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
$ cat docker-compose.yml
-----------------------------
nginx:
image: nginx
container_name: nginx
restart: always
ports:
- "80:80"
- "443:443"
volumes:
- /data/docker/nginxconf/nginx.conf:/etc/nginx/nginx.conf
- /data/docker/nginxconf/site:/etc/nginx/conf.d
- /data/docker/nginxconf/log:/var/log/nginx/
- /data/www:/usr/share/nginx/html
- /data/private:/etc/ssl/private
links:
- phpfpm
phpfpm:
image: php:fpm
container_name: phpfpm
restart: always
volumes:
- /data/www:/usr/share/nginx/html

配置文件定义了两个容器,nginx和phpfpm。在nginx容器中,我们选择nginx镜像,并且将nginx定义为容器的名字。restart字段表示系统重启时,是否自动启动这个容器。ports,volumes和links分别对应docker命令中的-p,-v和–link选项。

启动

写好了配置文件,我们就可以通过docker-compose来启动容器了。进入到配置文件所在的目录,执行

1
$ docker-compose up

则可以启动配置文件中定义的所有容器,而docker-compose也会自动处理容器之间的依赖关系。比如配置文件中,nginx容器需要连接phpfpm容器。虽然我们在配置文件中先定义了nginx容器,再定义phpfpm容器,但是docker-compose仍然会先启动phpfpm容器,再启动nginx容器。
有关于docker-compose的全部命令可以到官网查看。

至此,docker的启蒙就介绍完毕了。想更加深入的了解docker可以去docker官网查阅相关资料。

> FIN.