Skip to content

Commit

Permalink
文稿排版
Browse files Browse the repository at this point in the history
  • Loading branch information
ist0ne committed Mar 28, 2019
1 parent 861feeb commit cafd26d
Showing 1 changed file with 47 additions and 50 deletions.
97 changes: 47 additions & 50 deletions 6.Docker-Compose.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
---
title: Docker Compose
date: 2018-09-10 16:24:51
tags: [docker, container, compose]
---
### 简介
# Docker Compose

## 简介

Compose 项目是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。Compose 定位是 「定义和运行多个 Docker 容器化应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。

Expand All @@ -13,9 +10,8 @@ Compose 中有两个重要的概念:

- 服务 (service):一个应用的容器,实际上可以包括若干运行相同镜像的容器实例。
- 项目 (project):由一组关联的应用容器组成的一个完整业务单元,在 docker-compose.yml 文件中定义。
<!-- more -->

### 安装
## 安装

Compose 支持 Linux、macOS、Windows 10 三大平台。参考官方文档:https://docs.docker.com/compose/overview/

Expand All @@ -25,19 +21,19 @@ Compose 可以通过 Python 的包管理工具 pip 进行安装,也可以直

Docker for Mac 、Docker for Windows 自带 docker-compose 二进制文件,安装 Docker 之后可以直接使用。

#### 二进制安装
### 二进制安装

```bash
sudo curl -L "https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
```

### 使用
## 使用

最常见的项目是 web 网站,该项目应该包含 web 应用和缓存。
下面我们用 Python 来建立一个能够记录页面访问次数的 web 网站。

#### web 应用
### web 应用

新建文code件夹,在该目录中编写 app.py 文件

Expand All @@ -57,7 +53,7 @@ if __name__ == "__main__":
app.run(host="0.0.0.0", debug=True)
```

#### Dockerfile
### Dockerfile

编写 Dockerfile 文件,内容为

Expand All @@ -69,7 +65,7 @@ RUN pip install redis flask
CMD ["python", "app.py"]
```

#### docker-compose.yml
### docker-compose.yml

编写 docker-compose.yml 文件,这个是 Compose 使用的主模板文件。

Expand All @@ -89,20 +85,20 @@ services:
运行 compose 项目
```bash
$ docker-compose up
\$ docker-compose up
```

此时访问本地 5000 端口,每次刷新页面,计数就会加 1。

### 命令
## 命令

对于 Compose 来说,大部分命令的对象既可以是项目本身,也可以指定为项目中的服务或者容器。如果没有特别的说明,命令对象将是项目,这意味着项目中所有的服务都会受到命令影响。

执行 docker-compose [COMMAND] --help 或者 docker-compose help [COMMAND] 可以查看具体某个命令的使用格式。

docker-compose 命令的基本的使用格式是

docker-compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
docker-compose [-f=\<arg\>...] [options] [COMMAND] [ARGS...]

常用命令:

Expand All @@ -112,7 +108,7 @@ docker-compose start [SERVICE...] 启动已经存在的服务容器
docker-compose stop [options] [SERVICE...] 停止已经处于运行状态的容器,但不删除它。通过 docker-compose start 可以再次启动这些容器
docker-compose down 此命令将会停止 up 命令所启动的容器,并移除网络

### 模板
## 模板

模板文件是使用 Compose 的核心,涉及到的指令关键字也比较多。这里面大部分指令跟 docker run 相关参数的含义都是类似的。

Expand All @@ -136,7 +132,7 @@ services:
下面分别介绍各个指令的用法。
#### build
### build
指定 Dockerfile 所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml 文件的路径)。 Compose 将会利用它自动构建这个镜像,然后使用这个镜像。
Expand Down Expand Up @@ -176,7 +172,7 @@ build:
- corp/web_app:3.14
```
#### cap_add, cap_drop
### cap_add, cap_drop
指定容器的内核能力(capacity)分配。
Expand All @@ -194,19 +190,19 @@ cap_drop:
- NET_ADMIN
```
#### command
### command
覆盖容器启动后默认执行的命令。
```yaml
command: echo "hello world"
```
#### configs
### configs
仅用于 Swarm mode。
#### cgroup_parent
### cgroup_parent
指定父 cgroup 组,意味着将继承该组的资源限制。
Expand All @@ -216,7 +212,7 @@ command: echo "hello world"
cgroup_parent: cgroups_1
```
#### container_name
### container_name
指定容器名称。默认将会使用 项目名称_服务名称_序号 这样的格式。
Expand All @@ -226,19 +222,20 @@ container_name: docker-web-container
注意: 指定容器名称后,该服务将无法进行扩展(scale),因为 Docker 不允许多个容器具有相同的名称。
#### deploy
### deploy
仅用于 Swarm mode。
#### devices
### devices
指定设备映射关系。
```yaml
devices:
- "/dev/ttyUSB1:/dev/ttyUSB0"
```
#### depends_on
### depends_on
解决容器的依赖、启动先后的问题。以下例子中会先启动 redis db 再启动 web
Expand All @@ -261,7 +258,7 @@ services:
注意:web 服务不会等待 redis db 「完全启动」之后才启动。
#### dns
### dns
自定义 DNS 服务器。可以是一个值,也可以是一个列表。
Expand All @@ -273,7 +270,7 @@ dns:
- 114.114.114.114
```
#### dns_search
### dns_search
配置 DNS 搜索域。可以是一个值,也可以是一个列表。
Expand All @@ -285,7 +282,7 @@ dns_search:
- domain2.example.com
```
#### tmpfs
### tmpfs
挂载一个 tmpfs 文件系统到容器。
Expand All @@ -296,7 +293,7 @@ tmpfs:
- /tmp
```
#### env_file
### env_file
从文件中获取环境变量,可以为单独的文件路径或列表。
Expand All @@ -320,7 +317,7 @@ env_file:
PROG_ENV=development
```

#### environment
### environment

设置环境变量。你可以使用数组或字典两种格式。

Expand All @@ -342,7 +339,7 @@ environment:
y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
```

#### expose
### expose

暴露端口,但不映射到宿主机,只被连接的服务访问。

Expand All @@ -354,7 +351,7 @@ expose:
- "8000"
```
#### external_links
### external_links
注意:不建议使用该指令。
Expand All @@ -367,7 +364,7 @@ external_links:
- project_db_1:postgresql
```
#### extra_hosts
### extra_hosts
类似 Docker 中的 --add-host 参数,指定额外的 host 名称映射信息。
Expand All @@ -384,7 +381,7 @@ extra_hosts:
52.1.157.61 dockerhub
```

#### healthcheck
### healthcheck

通过命令检查容器是否健康运行。

Expand All @@ -396,7 +393,7 @@ healthcheck:
retries: 3
```
#### image
### image
指定为镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。
Expand All @@ -406,7 +403,7 @@ image: orchardup/postgresql
image: a4bc65fd
```
#### labels
### labels
为容器添加 Docker 元数据(metadata)信息。例如可以为容器添加辅助说明信息。
Expand All @@ -417,11 +414,11 @@ labels:
com.startupteam.release: "rc3 for v1.0"
```
#### links
### links
注意:不推荐使用该指令。
#### logging
### logging
配置日志选项。
Expand All @@ -448,7 +445,7 @@ options:
max-file: "10"
```
#### network_mode
### network_mode
设置网络模式。使用和 docker run 的 --network 参数一样的值。
Expand All @@ -460,7 +457,7 @@ network_mode: "service:[service name]"
network_mode: "container:[container name/id]"
```
#### networks
### networks
配置容器连接的网络。
Expand All @@ -478,15 +475,15 @@ networks:
other-network:
```
#### pid
### pid
跟主机系统共享进程命名空间。打开该选项的容器之间,以及容器和宿主机系统之间可以通过进程 ID 来相互访问和操作。
```yaml
pid: "host"
```
#### ports
### ports
暴露端口信息。
Expand All @@ -502,7 +499,7 @@ ports:
注意:当使用 HOST:CONTAINER 格式来映射端口时,如果你使用的容器端口小于 60 并且没放到引号里,可能会得到错误结果,因为 YAML 会自动解析 xx:yy 这种数字格式为 60 进制。为避免出现这种问题,建议数字串都采用引号包括起来的字符串格式。
#### secrets
### secrets
存储敏感数据,例如 mysql 服务密码。
Expand All @@ -525,7 +522,7 @@ secrets:
external: true
```
#### security_opt
### security_opt
指定容器模板标签(label)机制的默认属性(用户、角色、类型、级别等)。例如配置标签的用户名和角色名。
Expand All @@ -535,15 +532,15 @@ security_opt:
- label:role:ROLE
```
#### stop_signal
### stop_signal
设置另一个信号来停止容器。在默认情况下使用的是 SIGTERM 停止容器。
```yaml
stop_signal: SIGUSR1
```
#### sysctls
### sysctls
配置容器内核参数。
Expand All @@ -557,7 +554,7 @@ sysctls:
- net.ipv4.tcp_syncookies=0
```
#### ulimits
### ulimits
指定容器的 ulimits 限制值。
Expand All @@ -571,7 +568,7 @@ ulimits:
hard: 40000
```
#### volumes
### volumes
数据卷所挂载路径设置。可以设置宿主机路径 (HOST:CONTAINER) 或加上访问模式 (HOST:CONTAINER:ro)。
Expand Down Expand Up @@ -643,7 +640,7 @@ stdin_open: true
tty: true
```
#### 读取变量
### 读取变量
Compose 模板文件支持动态读取主机的系统环境变量和当前目录下的 .env 文件中的变量。
Expand Down

0 comments on commit cafd26d

Please sign in to comment.