Docker 容器编排工具 Docker Compose

Posted by 彭楷淳 on 2020-07-21
Estimated Reading Time 3 Minutes
Words 777 In Total
Viewed Times

Docker Compose 简介


Docker Compose 是 Docker 官方的编排项目之一,负责实现对 Docker 容器集群的快速编排。

Compose 的定位:定义和运行多个 Docker 个容器的应用。

在日常工作中,经常会碰到多个容器相互配合来完成某项任务的情况,例如,要实现一个 Web 项目时,除了 Web 服务容器本身以外,往往还需要加上后端的数据库、负载均衡服务容器等多个服务容器。而 Docker Compose 恰好可以满足这样的需求,它允许用户通过一个单独的 docker-compose.yml 模板文件来定义一组相关联的容器为一项目。

Compose 中有两个重要的概念:

  • 服务(service):一个应用中,实际上包括若干个运行的容器实例
  • 项目(Project):由一组关联的应用容器组成的一个完整业务单位

安装 Docker Compose


二进制包安装

1
2
3
4
5
6
7
8
# 移动到安装目录
$ cd /usr/local/bin

# 下载对应的二进制包
$ wget https://raw.githubusercontent.com/topsale/resources/master/docker/docker-compose

# 授予操作权限
$ sudo chmod +x /usr/local/bin/docker-compose

PIP 安装

如果计算机架构是 ARM(如:草莓派),应该从 PIP 源中下载:

1
$ sudo pip install -U docker-compose

看到以下输出信息,说明安装成功

1
2
3
4
Collecting docker-compose
Downloading docker-compose-1.17.1.tar.gz (149kB): 149kB downloaded

Successfully installed docker-compose cached-property requests texttable websocket-client docker-py dockerpty six enum34 backports.ssl-match-hostname ipaddress

bash 补全命令补丁

1
$ curl -L https://raw.githubusercontent.com/docker/compose/1.8.0/contrib/completion/bash/docker-compose > /etc/bash_completion.d/docker-compose

卸载 Docker Compose


二进制包方式卸载

1
$ sudo rm /usr/local/bin/docker-compose

PIP 方式卸载

1
$ sudo pip uninstall docker-compose

Docker Compose 常用命令


1
2
3
4
5
6
7
8
9
10
11
12
13
14
# 前台运行容器
$ docker-compose up

# 后台运行容器
$ docker-compose up -d

# 启动容器
$ docker-compose start

# 停止容器
$ docker-compose stop

# 停止并移除容器
$ docker-compose down

编排 MySQL & Tomcat 容器实例


容器编排文件

服务器地址:192.168.100.1

创建指定名称的容器编排文件 docker-compose.yml

1
$ sudo mkdir 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
version: '3.1'
services:
tomcat:
restart: always
image: tomcat
container_name: tomcat
ports:
- 8080:8080
volumes:
- /usr/local/docker/tomcat/webapps:/usr/local/tomcat/webapps
environment:
TZ: Asia/Shanghai
mysql:
restart: always
image: mysql:5.7.22
container_name: mysql
ports:
- 3306:3306
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123456
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
--max_allowed_packet=128M
--sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
volumes:
- /usr/local/docker/mysql:/var/lib/mysql

编排文件节点详解

文件节点 说明
version 指定 Docker Compose 版本
services 所有容器服务的父节点
tomcat / mysql 容器服务名
restart 开机是否自动启动
image 指定镜像名
container_name 声明容器名
ports 端口开放映射
volumes 数据卷(宿主机路径 : 容器内路径)
environment 环境变量
command 其它配置

docker-compose.yml 文件所在目录下启动容器服务:

1
$ docker-compose up -d

列出正在运行的容器:

1
$ docker container ps

启动容器以后验证是否能正常访问 MySQL 地址:192.168.100.1:3306 和 Tomcat 地址:http://192.168.100.1:8080

更多干货请移步:https://antoniopeng.com


If you like this blog or find it useful for you, you are welcome to comment on it. You are also welcome to share this blog, so that more people can participate in it. If the images used in the blog infringe your copyright, please contact the author to delete them. Thank you !