yulu

使用compose创建docker容器

随着Docker越来越流行,使用Docker部署环境被越来越多的应用到实际工作中了。Dockerfile可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况;那么我们就可以使用docker-compose来满足这种需求。
废话不多说,首先给出
官方文档地址

docker-compose github开源项目

中文文档

Compose 项目由 Python 编写,实现上调用了 Docker 服务提供的 API 来对容器进行管理。因此,只要所操作的平台支持 Docker API,就可以在其上利用 Compose 来进行编排管理。官方和中文文档都是为python创建容器,在此给出的是一个php+nginx的示例:

创建一个目录:
mkdir docker-php
cd docker-php
在docker-php目录下创建docker-compose.yml文件
vim 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
version: '2'
services:
php:
image: php:7.1.5
container_name: php
restart: always
command: "/usr/local/bin/docker-entrypoint.sh"
volumes:
#TODO 在此还应该挂载项目的路径,项目的路径要在nginx和php中都挂载
- ./php/docker-entrypoint.sh:/usr/local/bin/docker-entrypoint.sh:ro
nginx:
image: nginx:1.12.1-alpine
container_name: nginx
restart: always
volumes:
- ./nginx/docker-entrypoint.sh:/usr/local/bin/docker-entrypoint.sh:ro
links:
#此处在nginx配置php时,fastcgi_pass 127.0.0.1:9000 要修改为 fastcgi_pass php:9000
- php
ports:
#此处是将本机端口映射到容器里面的端口
- 12345:80

在存放docker-compose.yml目录下创建nginx,php两个目录,然后每个目录下创建docker-entrypoint.sh文件,这两个文件作用是启动容器中的服务,因为Docker容器中如果没有服务在运行,整个容器是不会运行起来的。当然你也可以在里面加其他需要的内容
nginx目录下如下:

1
2
3
4
5
#!/bin/sh
set -ex
exec nginx -g "daemon off;"

php目录下:

1
2
3
4
5
#!/bin/sh
set -ex
exec php-fpm

做完这几个操作后,在docker-compose.yml所在目录下执行
docker-compose up -d 启动容器
docker-compose down -v 停止并移除容器
docker-compose restart 重启容器
docker-compose ps 查看容器运行状态
docker-compose logs 查看容器服务日志(排错很管用)

以上命令差不多够日常使用啦。