Skip to content

Commit 7eaa578

Browse files
committed
doc: update docs/docker-compose.md (#645)
1 parent 2dbcac3 commit 7eaa578

File tree

1 file changed

+192
-90
lines changed

1 file changed

+192
-90
lines changed

docs/docker-compose.md

Lines changed: 192 additions & 90 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,132 @@
1-
docker-compose 备忘清单
1+
Docker Compose 备忘清单
22
===
3-
这是 [docker-compose](https://docs.docker.com/compose/) 的官方文档。 你可以在这里找到最常见的 docker-compose 使用方式。
43

5-
---
4+
这是 [docker-compose](https://docs.docker.com/compose/) 的快速参考备忘单。你可以在这里找到最常见的 Docker Compose 使用方式。
65

76
入门
87
---
9-
<!--rehype:body-class=cols-2-->
108

11-
#### 安装 docker-compose 需要安装(docker desktop)
9+
### Docker Compose 是什么?
1210

13-
- windows 安装
11+
- `Docker-compsoe` 是一个开源项目,用于定义和运行多容器 `Docker` 应用程序的工具。由 `Docker` 社区维护。
12+
- 通过一个 `YAML` 文件来配置应用程序的服务,以便可以使用一个命令启动、停止和重启整个应用程序。
13+
- [Docker Compose 开源地址](https://github.com/docker/compose)
14+
- [Docker Compose 发行地址](https://github.com/docker/compose/releases) _github.com_
1415

15-
- 官网地址:[https://docs.docker.com/desktop/install/windows-install/](https://docs.docker.com/desktop/install/windows-install/)
16+
### 基本概念
1617

17-
- linux 版本安装
18+
- **服务 (services):** 一个服务指的是一个容器,即一个应用程序的一个实例。
19+
- **容器 (container):** `Docker` 容器,其中运行着应用程序的一个实例。
20+
- **镜像 (image):** `Docker` 镜像,用于创建容器的模板。
21+
- **Docker-Compose 文件:** 一个 `YAML` 文件,描述了应用程序的各个服务以及它们之间的关系、配置等信息。
1822

19-
- 官网地址:[https://docs.docker.com/desktop/install/linux-install/](https://docs.docker.com/desktop/install/linux-install/)
23+
### Docker-Compose 文件结构
2024

21-
- mac 版本安装
25+
- `version`: _Docker-Compose_ 文件的版本。
26+
- `services`: 定义了各个服务,每个服务都有自己的配置项,如镜像、端口映射、依赖等。
27+
- `networks`: 定义了应用程序使用的网络,可以自定义网络以控制服务之间的通信。
28+
- `volumes`: 定义了应用程序使用的卷,用于持久化数据或与主机共享文件。
2229

23-
- 官网地址:[https://docs.docker.com/desktop/install/mac-install/](https://docs.docker.com/desktop/install/mac-install/)
30+
### 安装
31+
<!--rehype:wrap-class=row-span-2-->
2432

25-
- 可以通过 releases 下载安装 releases 地址:[https://github.com/docker/compose/releases](https://github.com/docker/compose/releases)
33+
对于 Ubuntu 和 Debian,运行:
2634

27-
- 安装成功
28-
29-
```sh
30-
docker compose version
31-
Docker Compose version v2.17.3
35+
```bash
36+
sudo apt-get update
37+
sudo apt-get install docker-compose-plugin
38+
```
3239

33-
docker --version
34-
Docker version 23.0.5, build bc4487a
40+
对于基于 RPM 的发行版,运行:
3541

36-
docker version
37-
Client: Docker Engine - Community
38-
Cloud integration: v1.0.31
39-
Version: 23.0.5
40-
API version: 1.42
41-
<...>
42-
```
42+
```bash
43+
sudo yum update
44+
sudo yum install docker-compose-plugin
45+
```
4346

44-
介绍
45-
---
47+
通过检查版本来验证 Docker Compose 是否正确安装
4648

47-
**Docker-Compose 是什么?**
48-
49-
- `Docker-compsoe` 是一个开源项目,用于定义和运行多容器 `Docker` 应用程序的工具。由 `Docker` 社区维护。
50-
51-
- 通过一个 `YAML` 文件来配置应用程序的服务,以便可以使用一个命令启动、停止和重启整个应用程序。
52-
53-
- 开源地址:[https://github.com/docker/compose](https://github.com/docker/compose)
54-
55-
- releases 地址:[https://github.com/docker/compose/releases](https://github.com/docker/compose/releases)
56-
57-
**基本概念:**
58-
59-
- **服务 (services):** 一个服务指的是一个容器,即一个应用程序的一个实例。
60-
61-
- **容器 (container):** `Docker` 容器,其中运行着应用程序的一个实例。
62-
63-
- **镜像 (image):** `Docker` 镜像,用于创建容器的模板。
64-
65-
- **Docker-Compose 文件:** 一个 `YAML` 文件,描述了应用程序的各个服务以及它们之间的关系、配置等信息。
66-
67-
**Docker-Compose 文件结构:**
68-
69-
- `version`: `Docker-Compose` 文件的版本。
70-
71-
- `services`: 定义了各个服务,每个服务都有自己的配置项,如镜像、端口映射、依赖等。
72-
73-
- `networks`: 定义了应用程序使用的网络,可以自定义网络以控制服务之间的通信。
74-
75-
- `volumes`: 定义了应用程序使用的卷,用于持久化数据或与主机共享文件。
76-
77-
命令
78-
---
79-
**常用命令:**
49+
```sh
50+
docker compose version
51+
# Docker Compose version v2.17.3
52+
53+
docker --version
54+
# Docker version 23.0.5, build bc4487a
55+
56+
docker version
57+
# Client: Docker Engine - Community
58+
# Cloud integration: v1.0.31
59+
# Version: 23.0.5
60+
# API version: 1.42
61+
# <...>
62+
```
63+
64+
### 独立安装 Compose
65+
66+
```sh
67+
curl -SL https://github.com/docker/compose/releases/download/v2.27.0/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
68+
```
69+
<!--rehype:className=wrap-text-->
70+
71+
如果命令 `docker-compose` 安装失败,请检查你的路径。你也可以创建一个符号链接,指向 `/usr/bin` 或路径中的任何其他目录。例如
72+
73+
```sh
74+
$ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
75+
```
76+
<!--rehype:className=wrap-text-->
77+
78+
### 更新 Compose
79+
80+
对于 Ubuntu 和 Debian,运行:
81+
82+
```sh
83+
sudo apt-get update
84+
sudo apt-get install docker-compose-plugin
85+
```
86+
87+
对于基于 RPM 的发行版,运行:
88+
89+
```sh
90+
sudo yum update
91+
sudo yum install docker-compose-plugin
92+
```
93+
94+
### 卸载 Docker Compose
95+
<!--rehype:wrap-class=col-span-2-->
96+
97+
Ubuntu, Debian:
98+
99+
```sh
100+
sudo apt-get remove docker-compose-plugin
101+
```
102+
103+
基于 RPM 的发行版
104+
105+
```sh
106+
sudo yum remove docker-compose-plugin
107+
```
108+
109+
如果您使用curl安装Compose CLI插件,要卸载它,请运行:
110+
111+
```sh
112+
rm $DOCKER_CONFIG/cli-plugins/docker-compose
113+
```
114+
115+
为所有用户删除,或者,如果您已为所有用户安装 Compose,请运行:
116+
117+
```sh
118+
rm /usr/local/lib/docker/cli-plugins/docker-compose
119+
```
120+
121+
### 检查 Compose 的安装位置
122+
<!--rehype:wrap-class=col-span-3-->
123+
124+
```sh
125+
docker info --format '{{range .ClientInfo.Plugins}}{{if eq .Name "compose"}}{{.Path}}{{end}}{{end}}'
126+
```
127+
128+
### 常用命令
129+
<!--rehype:wrap-class=col-span-2-->
80130

81131
| docker compose命令 | 说明 | 常见参数说明 |
82132
| ------------------------ | ---------------- | -------------------- |
@@ -96,65 +146,117 @@ docker-compose 备忘清单
96146
| `docker compose images` | 列出镜像 | |
97147
| `docker compose push` | 推送镜像 | |
98148
| `docker compose version` | 查看版本信息 | |
149+
<!--rehype:className=left-align-->
99150

100-
配置模板
151+
Docker Compose 配置
101152
---
102153

103-
**示例 Docker-Compose 文件:**
104-
105-
`docker-compsoe` 的配置文件是一个 `YAML` 文件,用于定义和运行多容器 Docker 应用程序。它使用 一个单一的 YAML 文件(通常命名为 `docker-compose.yml`)来定义多个容器的集合,以及它们之间的依赖关系和服务。
154+
### 示例配置文件
155+
<!--rehype:wrap-class=col-span-2-->
106156

107-
以下是一份 `docker-compose.yml` 文件的配置模板,包含了常用配置项和解释:
157+
`docker-compose` 的配置文件是一个 `YAML` 文件,用于定义和运行多容器 Docker 应用程序。通常命名为 `docker-compose.yml`,它使用单一的 YAML 文件来定义多个容器的集合,以及它们之间的依赖关系和服务。以下是一份 `docker-compose.yml` 文件的配置模板,包含了常用配置项和解释:
108158

109-
```yaml
110-
version: '3' # 指定使用的Docker Compose文件格式版本,目前推荐使用3.x或更高
159+
```yml
160+
version: '3' # 指定使用的 Docker Compose 文件格式版本,目前推荐使用 3.x 或更高
111161

112162
services: # 定义一个或多个服务
113163
service1: # 服务名称
114-
image: nginx:latest # 使用的Docker镜像,这里是Nginx的最新版本
115-
# 或者使用构建指令来从Dockerfile构建镜像
164+
image: nginx:latest # 使用的 Docker 镜像,这里是 Nginx 的最新版本
165+
166+
# 或者使用构建指令来从 Dockerfile 构建镜像
116167
build:
117-
context: ./path/to/Dockerfile # Dockerfile所在的目录
118-
dockerfile: Dockerfile-alternative # 可选的Dockerfile名称,默认是Dockerfile
168+
context: ./path/to/Dockerfile # Dockerfile 所在的目录
169+
dockerfile: Dockerfile-alternative # 可选的 Dockerfile 名称,默认是 Dockerfile
119170

120171
# 容器启动时执行的命令,覆盖默认的命令
121-
command: ["nginx", "-g", "daemon off;"] # 以数组形式指定,防止shell解析
172+
command:
173+
- "nginx"
174+
- "-g"
175+
- "daemon off;" # 以数组形式指定,防止 shell 解析
122176

123177
ports: # 容器端口与主机端口映射
124-
- "80:80" # 主机80端口映射到容器的80端口
178+
- "80:80" # 主机 80 端口映射到容器的 80 端口
125179

126180
volumes: # 数据卷挂载
127-
- ./nginx.conf:/etc/nginx/nginx.conf:ro # 将主机上的nginx.conf挂载到容器的/etc/nginx/nginx.conf,只读
128-
- ./logs:/var/log/nginx # 将logs目录挂载到容器的/var/log/nginx
181+
- ./nginx.conf:/etc/nginx/nginx.conf:ro # 将主机上的 nginx.conf 挂载到容器的 /etc/nginx/nginx.conf,只读
182+
- ./logs:/var/log/nginx # 将 logs 目录挂载到容器的 /var/log/nginx
129183

130184
environment: # 设置环境变量
131-
- MYSQL_HOST=database # 可以引用其他服务,这里假设有一个名为database的服务
185+
- MYSQL_HOST=database # 可以引用其他服务,这里假设有一个名为 database 的服务
132186
- MYSQL_PORT=3306
133187

134-
depends_on: # 服务启动顺序,这里表明service1依赖于database服务
188+
depends_on: # 服务启动顺序,这里表明 service1 依赖于 database 服务
135189
- database
136190

137191
networks: # 定义网络
138-
- my_network # 参与名为my_network的网络
192+
- my_network # 参与名为 my_network 的网络
139193

140194
service2: # 另一个服务示例
141195
# ... 类似地定义其他服务
142196

143-
networks: # 定义网络
197+
networks: # 定义网络
144198
my_network: # 网络名称
145-
driver: bridge # 网络驱动,通常是bridge模式
199+
driver: bridge # 网络驱动,通常是 bridge 模式
146200

147201
volumes: # 定义数据卷
148202
nginx_logs: # 卷名称
203+
149204
```
150205

151-
152-
**备忘录事项**
206+
备忘录事项
207+
208+
- 使用 Docker-Compose 可以简化多容器应用程序的部署和管理,但需要注意容器之间的依赖关系和通信。
209+
- 配置文件中的缩进必须使用空格,不能使用制表符。
210+
- 可以使用环境变量来动态设置配置项,如数据库密码。
211+
- 当你修改了 `docker-compose.yml` 文件后,需要重新运行 `docker-compose up` 来使改动生效。
212+
- 使用 `docker-compose build` 仅重建镜像,而不启动容器。
213+
- 使用 `docker-compose restart` 重启容器。
214+
- 记得清理不再需要的容器和镜像,以避免磁盘空间不足。
215+
216+
### 使用环境变量
217+
218+
`docker run -e VARIABLE=VALUE ...` 相同
219+
220+
```yml
221+
web:
222+
environment:
223+
- DEBUG=1
224+
```
225+
226+
您可以选择不设置值并将环境变量从 shell 直接传递到容器。它的工作方式与 `docker run -e VARIABLE ...` 相同:
227+
228+
```yml
229+
web:
230+
environment:
231+
- DEBUG
232+
web:
233+
environment:
234+
- DEBUG=${DEBUG}
235+
```
236+
237+
`env_file` 属性允许您在 Compose 应用程序中使用多个 `.env` 文件。
238+
它的工作方式与 `docker run --env-file=FILE ...` 相同。
239+
240+
```yml
241+
web:
242+
env_file:
243+
- web-variables.env
244+
```
245+
246+
#### 额外的信息
247+
248+
```yml
249+
env_file:
250+
- path: ./default.env
251+
required: true # default
252+
- path: ./override.env
253+
required: false
254+
```
153255

154-
- 配置文件中的缩进必须使用空格,不能使用制表符
155-
- 可以使用环境变量来动态设置配置项,如数据库密码
156-
- 使用 `Docker-Compose` 可以简化多容器应用程序的部署和管理,但需要注意容器之间的依赖关系和通信
157-
- 当你修改了 `docker-compose.yml` 文件后,需要重新运行 `docker-compose up` 来使改动生效
158-
- 使用 `docker-compose build` 仅重建镜像,而不启动容器
159-
- 使用 `docker-compose restart` 重启容器
160-
- 记得清理不再需要的容器和镜像,以避免磁盘空间不足。
256+
- 如果指定了多个文件,则它们将按顺序进行评估,可以覆盖先前文件中设置的值
257+
- 在 `.env` 文件中声明的环境变量不能在 Compose 文件中单独再次引用
258+
- 如果同时使用 `env_file` 和 `environment` 属性,则由 `environment` 设置的环境变量优先级更高
259+
- 在 `env_file` 属性中指定的 `.env` 文件的路径是相对于 compose.yml 文件的位置的
260+
- `.env` 文件中的值可以通过使用 `docker compose run -e` 命令行来从命令行覆盖
261+
- 如果使用 `--env-file` 替换了另一个 `.env`,则您的 `.env` 文件可以被另一个 `.env` 文件覆盖
262+
- 从 Docker Compose 版本 2.24.0 开始,您可以通过使用 `required` 字段将 `.env` 文件设置为可选项。当 `required` 设置为 `false` 且 `.env` 文件丢失时,Compose 将静默忽略该条目

0 commit comments

Comments
 (0)