mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-25 19:25:27 +00:00
Add blank lines around headers
This commit is contained in:
@@ -30,17 +30,20 @@ $ curl -SL https://github.com/docker/compose/releases/download/v5.1.0/docker-com
|
||||
```bash
|
||||
$ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
|
||||
```
|
||||
|
||||
### 11.2.2 测试安装
|
||||
|
||||
```bash
|
||||
$ docker compose version
|
||||
Docker Compose version v5.1.0
|
||||
```
|
||||
|
||||
### 11.2.3 bash 补全命令
|
||||
|
||||
```bash
|
||||
$ curl -L https://raw.githubusercontent.com/docker/compose/v5.1.0/contrib/completion/bash/docker-compose | sudo tee /etc/bash_completion.d/docker-compose > /dev/null
|
||||
```
|
||||
|
||||
### 11.2.4 卸载
|
||||
|
||||
如果是二进制包方式安装的,删除二进制文件即可。
|
||||
|
||||
@@ -37,6 +37,7 @@ def hello():
|
||||
if __name__ == "__main__":
|
||||
app.run(host="0.0.0.0", debug=True)
|
||||
```
|
||||
|
||||
#### Dockerfile
|
||||
|
||||
编写 `Dockerfile` 文件,内容为
|
||||
@@ -48,6 +49,7 @@ WORKDIR /code
|
||||
RUN pip install redis flask
|
||||
CMD ["python", "app.py"]
|
||||
```
|
||||
|
||||
#### compose.yaml
|
||||
|
||||
编写 `compose.yaml` 文件,这是 Compose 推荐使用的主模板文件 (也兼容 `docker-compose.yml` 等历史文件名)。
|
||||
@@ -62,6 +64,7 @@ services:
|
||||
redis:
|
||||
image: "redis:alpine"
|
||||
```
|
||||
|
||||
#### 运行 compose 项目
|
||||
|
||||
```bash
|
||||
@@ -77,11 +80,13 @@ $ docker compose up
|
||||
```bash
|
||||
$ docker compose up -d
|
||||
```
|
||||
|
||||
#### 停止
|
||||
|
||||
```bash
|
||||
$ docker compose stop
|
||||
```
|
||||
|
||||
#### 进入服务
|
||||
|
||||
```bash
|
||||
@@ -90,31 +95,37 @@ $ docker compose exec redis sh
|
||||
127.0.0.1:6379> get hits
|
||||
"9"
|
||||
```
|
||||
|
||||
#### 查看日志
|
||||
|
||||
```bash
|
||||
$ docker compose logs -f
|
||||
```
|
||||
|
||||
#### 构建镜像
|
||||
|
||||
```bash
|
||||
$ docker compose build
|
||||
```
|
||||
|
||||
#### 启动服务
|
||||
|
||||
```bash
|
||||
$ docker compose start
|
||||
```
|
||||
|
||||
#### 运行一次性命令
|
||||
|
||||
```bash
|
||||
$ docker compose run web python app.py
|
||||
```
|
||||
|
||||
#### 验证 Compose 文件
|
||||
|
||||
```bash
|
||||
$ docker compose config
|
||||
```
|
||||
|
||||
#### 删除项目
|
||||
|
||||
```bash
|
||||
|
||||
@@ -13,6 +13,7 @@ Docker Compose 提供了丰富的命令来管理项目和容器。本节将详
|
||||
```bash
|
||||
docker compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
|
||||
```
|
||||
|
||||
### 11.4.2 命令选项
|
||||
|
||||
* `-f, --file FILE` 指定使用的 Compose 模板文件。默认会自动识别 `compose.yaml` (也兼容 `docker-compose.yml` 等),并且可以多次指定。
|
||||
@@ -74,6 +75,7 @@ docker compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
|
||||
```bash
|
||||
$ docker compose kill -s SIGINT
|
||||
```
|
||||
|
||||
#### `logs`
|
||||
|
||||
格式为 `docker compose logs [options] [SERVICE...]`。
|
||||
|
||||
@@ -52,6 +52,7 @@ build:
|
||||
- alpine:latest
|
||||
- corp/web_app:3.14
|
||||
```
|
||||
|
||||
### 11.5.2 `cap_add, cap_drop`
|
||||
|
||||
指定容器的内核能力 (capacity) 分配。
|
||||
@@ -68,6 +69,7 @@ cap_add:
|
||||
cap_drop:
|
||||
- NET_ADMIN
|
||||
```
|
||||
|
||||
### 11.5.3 `command`
|
||||
|
||||
覆盖容器启动后默认执行的命令。
|
||||
@@ -75,6 +77,7 @@ cap_drop:
|
||||
```yaml
|
||||
command: echo "hello world"
|
||||
```
|
||||
|
||||
### 11.5.4 `configs`
|
||||
|
||||
`configs` 来自 Compose Specification。它在 Swarm 中是原生对象;在本地 `docker compose` 模式下通常以文件挂载的形式实现,具体能力取决于 Compose 版本与运行平台。
|
||||
@@ -88,6 +91,7 @@ command: echo "hello world"
|
||||
```yaml
|
||||
cgroup_parent: cgroups_1
|
||||
```
|
||||
|
||||
### 11.5.6 `container_name`
|
||||
|
||||
指定容器名称。默认将会使用 `项目名称_服务名称_序号` 这样的格式。
|
||||
@@ -109,6 +113,7 @@ container_name: docker-web-container
|
||||
devices:
|
||||
- "/dev/ttyUSB1:/dev/ttyUSB0"
|
||||
```
|
||||
|
||||
### 11.5.9 `depends_on`
|
||||
|
||||
解决容器的依赖、启动先后的问题。以下例子中会先启动 `redis` `db` 再启动 `web`
|
||||
@@ -140,6 +145,7 @@ dns:
|
||||
- 8.8.8.8
|
||||
- 114.114.114.114
|
||||
```
|
||||
|
||||
### 11.5.11 `dns_search`
|
||||
|
||||
配置 `DNS` 搜索域。可以是一个值,也可以是一个列表。
|
||||
@@ -151,6 +157,7 @@ dns_search:
|
||||
- domain1.example.com
|
||||
- domain2.example.com
|
||||
```
|
||||
|
||||
### 11.5.12 `tmpfs`
|
||||
|
||||
挂载一个 tmpfs 文件系统到容器。
|
||||
@@ -161,6 +168,7 @@ tmpfs:
|
||||
- /run
|
||||
- /tmp
|
||||
```
|
||||
|
||||
### 11.5.13 `env_file`
|
||||
|
||||
从文件中获取环境变量,可以为单独的文件路径或列表。
|
||||
@@ -184,6 +192,7 @@ env_file:
|
||||
|
||||
PROG_ENV=development
|
||||
```
|
||||
|
||||
### 11.5.14 `environment`
|
||||
|
||||
设置环境变量。你可以使用数组或字典两种格式。
|
||||
@@ -204,6 +213,7 @@ environment:
|
||||
```bash
|
||||
y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
|
||||
```
|
||||
|
||||
### 11.5.15 `expose`
|
||||
|
||||
暴露端口,但不映射到宿主机,只被连接的服务访问。
|
||||
@@ -215,6 +225,7 @@ expose:
|
||||
- "3000"
|
||||
- "8000"
|
||||
```
|
||||
|
||||
### 11.5.16 `external_links`
|
||||
|
||||
> 注意:不建议使用该指令。
|
||||
@@ -227,6 +238,7 @@ external_links:
|
||||
- project_db_1:mysql
|
||||
- project_db_1:postgresql
|
||||
```
|
||||
|
||||
### 11.5.17 `extra_hosts`
|
||||
|
||||
类似 Docker 中的 `--add-host` 参数,指定额外的 host 名称映射信息。
|
||||
@@ -242,6 +254,7 @@ extra_hosts:
|
||||
8.8.8.8 googledns
|
||||
52.1.157.61 dockerhub
|
||||
```
|
||||
|
||||
### 11.5.18 `healthcheck`
|
||||
|
||||
通过命令检查容器是否健康运行。
|
||||
@@ -253,6 +266,7 @@ healthcheck:
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
```
|
||||
|
||||
### 11.5.19 `image`
|
||||
|
||||
指定为镜像名称或镜像 ID。如果镜像在本地不存在,`Compose` 将会尝试拉取这个镜像。
|
||||
@@ -262,6 +276,7 @@ image: ubuntu
|
||||
image: orchardup/postgresql
|
||||
image: a4bc65fd
|
||||
```
|
||||
|
||||
### 11.5.20 `labels`
|
||||
|
||||
为容器添加 Docker 元数据 (metadata) 信息。例如可以为容器添加辅助说明信息。
|
||||
@@ -272,6 +287,7 @@ labels:
|
||||
com.startupteam.department: "devops department"
|
||||
com.startupteam.release: "rc3 for v1.0"
|
||||
```
|
||||
|
||||
### 11.5.21 `links`
|
||||
|
||||
> 注意:不推荐使用该指令。容器之间应通过 Docker 网络 (networks) 进行互联。
|
||||
@@ -300,6 +316,7 @@ options:
|
||||
max-size: "200k"
|
||||
max-file: "10"
|
||||
```
|
||||
|
||||
### 11.5.23 `network_mode`
|
||||
|
||||
设置网络模式。使用和 `docker run` 的 `--network` 参数一样的值。
|
||||
@@ -311,6 +328,7 @@ network_mode: "none"
|
||||
network_mode: "service:[service name]"
|
||||
network_mode: "container:[container name/id]"
|
||||
```
|
||||
|
||||
### 11.5.24 `networks`
|
||||
|
||||
配置容器连接的网络。
|
||||
@@ -327,6 +345,7 @@ networks:
|
||||
some-network:
|
||||
other-network:
|
||||
```
|
||||
|
||||
### 11.5.25 `pid`
|
||||
|
||||
跟主机系统共享进程命名空间。打开该选项的容器之间,以及容器和宿主机系统之间可以通过进程 ID 来相互访问和操作。
|
||||
@@ -334,6 +353,7 @@ networks:
|
||||
```yaml
|
||||
pid: "host"
|
||||
```
|
||||
|
||||
### 11.5.26 `ports`
|
||||
|
||||
暴露端口信息。
|
||||
@@ -370,6 +390,7 @@ secrets:
|
||||
my_other_secret:
|
||||
external: true
|
||||
```
|
||||
|
||||
### 11.5.28 `security_opt`
|
||||
|
||||
指定容器模板标签 (label) 机制的默认属性 (用户、角色、类型、级别等)。例如配置标签的用户名和角色名。
|
||||
@@ -379,6 +400,7 @@ security_opt:
|
||||
- label:user:USER
|
||||
- label:role:ROLE
|
||||
```
|
||||
|
||||
### 11.5.29 `stop_signal`
|
||||
|
||||
设置另一个信号来停止容器。在默认情况下使用的是 SIGTERM 停止容器。
|
||||
@@ -386,6 +408,7 @@ security_opt:
|
||||
```yaml
|
||||
stop_signal: SIGUSR1
|
||||
```
|
||||
|
||||
### 11.5.30 `sysctls`
|
||||
|
||||
配置容器内核参数。
|
||||
@@ -399,6 +422,7 @@ sysctls:
|
||||
- net.core.somaxconn=1024
|
||||
- net.ipv4.tcp_syncookies=0
|
||||
```
|
||||
|
||||
### 11.5.31 `ulimits`
|
||||
|
||||
指定容器的 ulimits 限制值。
|
||||
@@ -412,6 +436,7 @@ sysctls:
|
||||
soft: 20000
|
||||
hard: 40000
|
||||
```
|
||||
|
||||
### 11.5.32 `volumes`
|
||||
|
||||
数据卷所挂载路径设置。可以设置为宿主机路径 (`HOST:CONTAINER`) 或者数据卷名称 (`VOLUME:CONTAINER`),并且可以设置访问模式 (`HOST:CONTAINER:ro`)。
|
||||
@@ -436,6 +461,7 @@ services:
|
||||
volumes:
|
||||
mysql_data:
|
||||
```
|
||||
|
||||
### 11.5.33 其它指令
|
||||
|
||||
此外,还有包括 `domainname, entrypoint, hostname, ipc, mac_address, privileged, read_only, shm_size, restart, stdin_open, tty, user, working_dir` 等指令,基本跟 `docker run` 中对应参数的功能一致。
|
||||
@@ -487,6 +513,7 @@ stdin_open: true
|
||||
```yaml
|
||||
tty: true
|
||||
```
|
||||
|
||||
### 11.5.34 读取变量
|
||||
|
||||
Compose 模板文件支持动态读取主机的系统环境变量和当前目录下的 `.env` 文件中的变量。
|
||||
|
||||
@@ -298,6 +298,7 @@ $ docker compose exec db psql -U django_user -d django_db
|
||||
$ docker compose ps
|
||||
$ docker compose logs db
|
||||
```
|
||||
|
||||
#### Q2:代码修改没有生效
|
||||
|
||||
**可能原因**:
|
||||
@@ -313,6 +314,7 @@ $ docker compose logs db
|
||||
|
||||
$ sudo chown -R $USER:$USER .
|
||||
```
|
||||
|
||||
### 11.6.11 开发 vs 生产:关键差异
|
||||
|
||||
笔者特别提醒,本节的配置是 **开发环境** 配置。生产环境需要以下调整:
|
||||
@@ -340,6 +342,7 @@ services:
|
||||
# ...
|
||||
|
||||
```
|
||||
|
||||
### 11.6.12 延伸阅读
|
||||
|
||||
- [Compose 模板文件详解](11.5_compose_file.md):深入理解 Compose 文件的所有配置项
|
||||
|
||||
@@ -88,6 +88,7 @@ gem 'rails', '~> 7.1'
|
||||
```bash
|
||||
$ touch Gemfile.lock
|
||||
```
|
||||
|
||||
### 11.7.5 步骤 3:创建 compose.yaml
|
||||
|
||||
配置如下:
|
||||
@@ -157,6 +158,7 @@ compose.yaml bin db public
|
||||
```bash
|
||||
$ docker compose build
|
||||
```
|
||||
|
||||
### 11.7.8 步骤 6:配置数据库连接
|
||||
|
||||
修改 `config/database.yml`:
|
||||
@@ -196,6 +198,7 @@ web-1 | => Run `bin/rails server --help` for more startup options
|
||||
web-1 | Puma starting in single mode...
|
||||
web-1 | * Listening on http://0.0.0.0:3000
|
||||
```
|
||||
|
||||
### 11.7.10 步骤 8:创建数据库
|
||||
|
||||
在另一个终端执行:
|
||||
@@ -230,6 +233,7 @@ $ docker compose exec web rails generate scaffold Post title:string body:text
|
||||
|
||||
$ docker compose exec web bash
|
||||
```
|
||||
|
||||
### 11.7.12 常见问题
|
||||
|
||||
#### Q:数据库连接失败
|
||||
@@ -240,6 +244,7 @@ $ docker compose exec web bash
|
||||
$ docker compose ps
|
||||
$ docker compose logs db
|
||||
```
|
||||
|
||||
#### Q:server.pid 文件导致启动失败
|
||||
|
||||
错误信息:`A server is already running`
|
||||
@@ -249,6 +254,7 @@ $ docker compose logs db
|
||||
```bash
|
||||
$ docker compose exec web rm -f tmp/pids/server.pid
|
||||
```
|
||||
|
||||
#### Q:Gem 安装失败
|
||||
|
||||
可能需要更新 bundler 或清理缓存:
|
||||
@@ -256,6 +262,7 @@ $ docker compose exec web rm -f tmp/pids/server.pid
|
||||
```bash
|
||||
$ docker compose run --rm web bundle update
|
||||
```
|
||||
|
||||
### 11.7.13 开发 vs 生产
|
||||
|
||||
| 配置项 | 开发环境 | 生产环境 |
|
||||
|
||||
@@ -154,6 +154,7 @@ $ docker exec wordpress_db mysqldump -u wordpress -pwordpress wordpress > backup
|
||||
networks:
|
||||
- wp_net
|
||||
```
|
||||
|
||||
#### 2. 使用 Nginx 反向代理
|
||||
|
||||
在生产环境中,不要直接暴露 WordPress 端口,而是通过 Nginx 进行反向代理并配置 SSL。
|
||||
|
||||
Reference in New Issue
Block a user