mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 16:37:34 +00:00
fix(content): harden Docker practice guide
This commit is contained in:
@@ -1,17 +1,32 @@
|
||||
## 11.2 安装与卸载
|
||||
|
||||
`Compose` 是 Docker 官方的开源项目,负责实现对 Docker 容器集群的快速编排。
|
||||
`Compose` 是 Docker 官方的开源项目,负责实现本地或单机多容器应用的快速编排。跨主机集群编排应使用 Swarm、Kubernetes 或云厂商托管服务。
|
||||
|
||||
当前的 Compose 以 `docker compose` 子命令的形式提供。Docker Desktop 在 macOS、Windows 和 Linux 上默认包含它;如果你已经在 Linux 上单独安装了 Docker Engine 和 Docker CLI,也可以再安装 Compose CLI 插件。
|
||||
|
||||
### 11.2.1 Linux
|
||||
|
||||
在 Linux 上,你可以通过 Docker 官方发布页安装 Compose CLI 插件。把二进制文件保存到 `$DOCKER_CONFIG/cli-plugins/docker-compose`,并赋予执行权限即可。
|
||||
在 Linux 上,默认建议通过 Docker 官方软件仓库安装 Compose CLI 插件,这样可以随系统包管理器更新。
|
||||
|
||||
Ubuntu / Debian:
|
||||
|
||||
```bash
|
||||
$ sudo apt-get update
|
||||
$ sudo apt-get install docker-compose-plugin
|
||||
```
|
||||
|
||||
Fedora / CentOS / RHEL 兼容发行版:
|
||||
|
||||
```bash
|
||||
$ sudo dnf install docker-compose-plugin
|
||||
```
|
||||
|
||||
如果是离线环境、需要锁定特定版本,或包管理器暂不覆盖你的架构,可以从 Docker 官方发布页手工安装。手工安装不会自动更新;下载 URL 中的版本号和架构(如 `x86_64`、`aarch64`)需要按目标机器替换。
|
||||
|
||||
```bash
|
||||
$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
|
||||
$ mkdir -p $DOCKER_CONFIG/cli-plugins
|
||||
$ curl -SL https://github.com/docker/compose/releases/latest/download/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
|
||||
$ curl -SL https://github.com/docker/compose/releases/download/v5.1.2/docker-compose-linux-x86_64 -o $DOCKER_CONFIG/cli-plugins/docker-compose
|
||||
$ chmod +x $DOCKER_CONFIG/cli-plugins/docker-compose
|
||||
```
|
||||
|
||||
@@ -24,8 +39,12 @@ Docker Compose version v5.x.x
|
||||
|
||||
### 11.2.3 卸载
|
||||
|
||||
如果是二进制包方式安装的,删除二进制文件即可。
|
||||
如果是仓库方式安装,使用包管理器卸载;如果是二进制包方式安装,删除二进制文件即可。
|
||||
|
||||
```bash
|
||||
$ sudo apt-get remove docker-compose-plugin
|
||||
# 或
|
||||
$ sudo dnf remove docker-compose-plugin
|
||||
|
||||
$ rm $DOCKER_CONFIG/cli-plugins/docker-compose
|
||||
```
|
||||
|
||||
@@ -228,7 +228,7 @@ $ docker compose run --no-deps web python manage.py shell
|
||||
|
||||
#### `scale`
|
||||
|
||||
在当前 Compose CLI 中,更稳妥的扩缩容写法是通过 `docker compose up --scale` 完成。
|
||||
当前 Compose CLI 仍支持 `docker compose scale`。实际使用中,更常见也更便于和创建/重建流程放在一起的写法是通过 `docker compose up --scale` 完成。
|
||||
|
||||
例如:
|
||||
|
||||
@@ -238,7 +238,7 @@ $ docker compose up -d --scale web=3 --scale db=2
|
||||
|
||||
将启动 3 个容器运行 `web` 服务,2 个容器运行 `db` 服务。
|
||||
|
||||
> **说明**:有些旧环境或实验性入口中仍可能出现 `docker compose scale`,但它不应再被视为当前 Compose 的通用稳定默认命令。
|
||||
> **说明**:如果 Compose 文件为服务指定了 `container_name`,该服务无法扩展到多个容器。需要扩缩容的服务应使用 Compose 自动生成的容器名,并通过服务名做 DNS 访问。
|
||||
|
||||
一般的,当指定数目多于该服务当前实际运行容器,将新创建并启动容器;反之,将停止容器。
|
||||
|
||||
|
||||
@@ -582,6 +582,14 @@ $ docker compose --profile debug up # 启动 web + debug
|
||||
$ docker compose up # 仅启动 web
|
||||
```
|
||||
|
||||
也可以通过环境变量激活:
|
||||
|
||||
```bash
|
||||
$ COMPOSE_PROFILES=debug,test docker compose up
|
||||
```
|
||||
|
||||
如果在命令行里显式指定某个带 profile 的服务,Compose 会自动启动这个目标服务及其声明的依赖;但不会自动启动同一 profile 下的其它服务,除非也显式指定或通过 `--profile` / `COMPOSE_PROFILES` 启用。
|
||||
|
||||
### 11.5.35 读取变量
|
||||
|
||||
Compose 模板文件支持动态读取主机的系统环境变量和当前目录下的 `.env` 文件中的变量。
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
> - MySQL:8.4(可替换为其他 8.x 版本,或使用 MariaDB 替代)
|
||||
> - WordPress:latest(建议在生产环境指定具体版本,如 6.x)
|
||||
|
||||
WordPress 是全球最流行的内容管理系统 (CMS)。使用 Docker Compose 可以在几分钟内搭建一个包含数据库、Web 服务和持久化存储的生产级 WordPress 环境。
|
||||
WordPress 是全球最流行的内容管理系统 (CMS)。使用 Docker Compose 可以在几分钟内搭建一个包含数据库、Web 服务和持久化存储的本地练习/单机演示环境。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 第十一章 Docker Compose
|
||||
|
||||
`Docker Compose` 是 Docker 官方编排 (Orchestration) 项目之一,负责快速的部署分布式应用。
|
||||
`Docker Compose` 是 Docker 官方编排 (Orchestration) 项目之一,负责快速定义和启动本地或单机多容器应用。跨主机集群编排应交给 Swarm、Kubernetes 或云厂商托管服务。
|
||||
|
||||
> ⚠️ **重要提示:Compose V1 已停止支持**
|
||||
>
|
||||
|
||||
@@ -2,9 +2,18 @@
|
||||
services:
|
||||
|
||||
db:
|
||||
image: postgres
|
||||
image: postgres:16
|
||||
environment:
|
||||
POSTGRES_DB: django_db
|
||||
POSTGRES_USER: django_user
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD}
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U django_user -d django_db"]
|
||||
interval: 5s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
web:
|
||||
build: .
|
||||
@@ -13,6 +22,13 @@ services:
|
||||
- .:/code
|
||||
ports:
|
||||
- "8000:8000"
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
# 与书中 11.6 节一致:settings.py 从环境变量读取数据库密码
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD}
|
||||
DATABASE_URL: postgres://django_user:${POSTGRES_PASSWORD:?set POSTGRES_PASSWORD}@db:5432/django_db
|
||||
|
||||
volumes:
|
||||
postgres_data:
|
||||
|
||||
@@ -24,7 +24,7 @@ services:
|
||||
- db
|
||||
image: wordpress:latest
|
||||
ports:
|
||||
- "8000:80"
|
||||
- "127.0.0.1:8000:80"
|
||||
restart: always
|
||||
environment:
|
||||
WORDPRESS_DB_HOST: db:3306
|
||||
|
||||
Reference in New Issue
Block a user