[toc]

Docker-compose介绍

Docker Compose是一个用来定义和运行复杂应用的Docker工具。一个使用Docker容器的应用,通常由多个容器组成。使用Docker Compose不再需要使用shell脚本来启动容器。

Compose 通过一个配置文件来管理多个Docker容器,在配置文件中,所有的容器通过services来定义,然后使用docker-compose脚本来启动,停止和重启应用,和应用中的服务以及所有依赖服务的容器,非常适合组合使用多个容器进行开发的场景

Docker-compose使用步骤

  • 需要有一个镜像
    • dockerhub 拉镜像
    • dockerfile 自己制作镜像
  • docker-compose定义构成应用程序的服务
    • 写一个yaml文件,来启动多个组件(容器)
  • 启动docker-compose

Compose版本和Docker兼容性

Docker-compose版本说明

Reference file What changed in this version
Version 3 Version 3 updates
Version 2 Version 2 updates
Version 1 (Deprecated) Version 1 updates 弃用

版本兼容

Compose file format Docker Engine release
Compose specification 19.03.0+
3.8 19.03.0+
3.7 18.06.0+
3.6 18.02.0+
3.5 17.12.0+
3.4 17.09.0+
3.3 17.06.0+
3.2 17.04.0+
3.1 1.13.1+
3.0 1.13.0+
2.4 17.12.0+
2.3 17.06.0+
2.2 1.13.0+
2.1 1.12.0+
2.0 1.10.0+

Docker版本变化说明:

Docker从1.13.x版本开始,版本分为企业版EE和社区版CE,版本号也改为按照时间线来发布,比如17.03就是2017年3月。

Docker的linux发行版的软件仓库从以前的https://apt.dockerproject.org和https://yum.dockerproject.org变更为目前的https://download.docker.com, 软件包名字改为docker-ce和docker-ee。

Docker-compose安装及使用

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
29
30
31
32
# 启动docker-compose 找当前目录下的docker-compose.yml文件
docker-compose up

# 指定文件启动
docker-compose -f zabbix-compose.yml up

# 放在后台启动
docker-compose -f zabbix-compose.yml up -d

# 查看容器中的日志
docker-compose -f zabbix-compose.yml logs

# 时事追踪查看容器日志 tail -f
docker-compose -f zabbix-compose.yml logs -f

# 只查看某一个容器的日志
docker-compose -f zabbix-compose.yml logs zabbix-web

# 启动服务
docker-compose start

# 启动指定服务
docker-compose start mysql

# 停止服务
docker-compose stop

# 停止单个服务
docker-compose start mysql

# 删除docker-compose文件中的所有容器
docker-compose rm

安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 下载docker-compose
wget https://github.com/docker/compose/releases/download/v2.18.1/docker-compose-linux-x86_64 -O /usr/local/bin/docker-compose

# 添加执行权限
chmod +x /usr/local/bin/docker-compose

# 删除老版本的docker-compose
rm -f /usr/bin/docker-compose

# 刷新环境变量
source /etc/profile

# 查看docker-compose版本
docker-compose version
Docker Compose version v2.18.1

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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
version: '版本号'

services:
服务名称1:
image: 容器镜像
container_name: 容器名称
environment:
- 环境变量1=值1
- 环境变量2=值2
volumes:
- 宿主机数据目录:容器内数据目录
ports:
- 宿主机端口:容器内映射端口
networks:
- 自定义网络名称
links:
- namenode
command:
- 数据库使用字符集变量时可以用
restart: always

服务名称2:
image: 容器镜像
container_name: 容器名称
environment:
- 环境变量1=值1
- 环境变量2=值2
user: 宿主机用户:容器用户
volumes:
- 宿主机数据目录:容器内数据目录
ports:
- 宿主机端口:容器内映射端口
networks:
- 自定义网络名称
links:
- namenode
depends_on:
- 依赖服务
restart: always

networks:
default:
externnal: true
name: 自定义网络名称

wordpress:
depends_on:
- db
image: wordpress:latest
volumes:
- /data/web_data:/var/www/html
ports:
- "80:80"
restart: always
environment:
WORDPRESS_DB_HOST: db
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress

docker-compose部署zabbix示例

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
45
46
47
48
49
50
51
52
53
54
55
56
57
vim zabbix-compose.yml
version: '3.8'

services:
mysql:
image: mysql:5.7
container_name: mysql57 # docker run --name
environment: # docker run -e
- MYSQL_ROOT_PASSWORD='123'
- MYSQL_DATABASE='zabbix'
- MYSQL_USER='zabbix'
- MYSQL_PASSWORD='zabbix'
volumes: # docker run -v
/db_data:/var/lib/mysql
- /zabbix_data:/var/lib/mysql
ports: # docker run -p
- 3306:3306
command: # --参数 例如:数据库字符集
- --character-set-server=utf8
- --collation-server=utf8_bin
restart: always # 开机自启动容器,docker服务重启,则容器也会自动启动

zabbix-server:
image: zabbix/zabbix-server-mysql:latest
container_name: zabbix-server
environment:
- MYSQL_DATABASE='zabbix'
- DB_SERVER_HOST='mysql'
- MYSQL_USER='zabbix'
- MYSQL_PASSWORD='zabbix'
ports:
- 10051:10051
links:
- mysql
depends_on:
- mysql
restart: always

zabbix-web:
image: zabbix/zabbix-web-nginx-mysql:latest
container_name: zabbix-web
environment:
- DB_SERVER_HOST='mysql'
- MYSQL_USER='zabbix'
- MYSQL_PASSWORD='zabbix'
- ZBX_SERVER_HOST='zabbix-server'
- PHP_TZ='Asia/Shanghai'
ports:
- 80:8080
- 443:8443
links:
- mysql
- zabbix-server
depends_on:
- mysql
- zabbix-server
restart: always