mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-03-11 04:14:38 +00:00
style: apply global formatting fixes (struct, spacing, zhlint)
This commit is contained in:
@@ -4,11 +4,15 @@
|
||||
|
||||
其代码目前在 [https://github.com/docker/compose](https://github.com/docker/compose) 上开源。
|
||||
|
||||
`Compose` 定位是 「定义和运行多个 Docker 容器的应用(Defining and running multi-container Docker applications)」,其前身是开源项目 Fig。
|
||||
`Compose` 定位是 “定义和运行多个 Docker 容器的应用 (Defining and running multi-container Docker applications)”,其前身是开源项目 Fig。
|
||||
|
||||
通过第一部分中的介绍,我们知道使用一个 `Dockerfile` 模板文件,可以让用户很方便的定义一个单独的应用容器。然而,在日常工作中,经常会碰到需要多个容器相互配合来完成某项任务的情况。例如要实现一个 Web 项目,除了 Web 服务容器本身,往往还需要再加上后端的数据库服务容器,甚至还包括负载均衡容器等。
|
||||
|
||||
`Compose` 恰好满足了这样的需求。它允许用户通过一个单独的 `compose.yaml`(历史默认名也常见为 `docker-compose.yml`)模板文件(YAML 格式)来定义一组相关联的应用容器为一个项目(project)。
|
||||
`Compose` 恰好满足了这样的需求。它允许用户通过一个单独的 `compose.yaml` (历史默认名也常见为 `docker-compose.yml`) 模板文件 (YAML 格式) 来定义一组相关联的应用容器为一个项目 (project)。
|
||||
|
||||
### 概述
|
||||
|
||||
总体概述了以下内容。
|
||||
|
||||
### 模板文件规范
|
||||
|
||||
|
||||
@@ -12,13 +12,13 @@ Linux 系统请使用以下介绍的方法安装。
|
||||
|
||||
### Linux
|
||||
|
||||
在 Linux 上,你可以通过下载 Docker Compose CLI 插件(二进制文件名为 `docker-compose`)来安装。
|
||||
在 Linux 上,你可以通过下载 Docker Compose CLI 插件 (二进制文件名为 `docker-compose`) 来安装。
|
||||
|
||||
从 [官方 GitHub Release](https://github.com/docker/compose/releases) 处直接下载编译好的二进制文件即可。
|
||||
从[官方 GitHub Release](https://github.com/docker/compose/releases) 处直接下载编译好的二进制文件即可。
|
||||
|
||||
> **提示**:版本更新较快,请访问上述链接获取最新版本号,替换下方命令中的版本号。
|
||||
|
||||
例如,在 Linux 64 位系统上直接下载对应的二进制包(以 v5.0.2 为例)。
|
||||
例如,在 Linux 64 位系统上直接下载对应的二进制包 (以 v5.0.2 为例)。
|
||||
|
||||
```bash
|
||||
$ DOCKER_CONFIG=${DOCKER_CONFIG:-$HOME/.docker}
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
* 项目 (`project`):由一组关联的应用容器组成的一个完整业务单元。
|
||||
|
||||
可见,一个项目可以由多个服务(容器)关联而成,`Compose` 面向项目进行管理。
|
||||
可见,一个项目可以由多个服务 (容器) 关联而成,`Compose` 面向项目进行管理。
|
||||
|
||||
### 场景
|
||||
|
||||
@@ -52,7 +52,7 @@ CMD ["python", "app.py"]
|
||||
|
||||
#### compose.yaml
|
||||
|
||||
编写 `compose.yaml` 文件,这是 Compose 推荐使用的主模板文件(也兼容 `docker-compose.yml` 等历史文件名)。
|
||||
编写 `compose.yaml` 文件,这是 Compose 推荐使用的主模板文件 (也兼容 `docker-compose.yml` 等历史文件名)。
|
||||
|
||||
```yaml
|
||||
services:
|
||||
|
||||
@@ -16,7 +16,7 @@ docker compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
|
||||
|
||||
### 命令选项
|
||||
|
||||
* `-f, --file FILE` 指定使用的 Compose 模板文件。默认会自动识别 `compose.yaml`(也兼容 `docker-compose.yml` 等),并且可以多次指定。
|
||||
* `-f, --file FILE` 指定使用的 Compose 模板文件。默认会自动识别 `compose.yaml` (也兼容 `docker-compose.yml` 等),并且可以多次指定。
|
||||
|
||||
* `-p, --project-name NAME` 指定项目名称,默认将使用所在目录名称作为项目名。
|
||||
|
||||
@@ -26,11 +26,13 @@ docker compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
|
||||
|
||||
### 命令使用说明
|
||||
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### `build`
|
||||
|
||||
格式为 `docker compose build [options] [SERVICE...]`。
|
||||
|
||||
构建(重新构建)项目中的服务容器。
|
||||
构建 (重新构建) 项目中的服务容器。
|
||||
|
||||
服务容器一旦构建后,将会带上一个标记名,例如对于 web 项目中的一个 db 容器,可能是 web_db。
|
||||
|
||||
@@ -40,7 +42,7 @@ docker compose [-f=<arg>...] [options] [COMMAND] [ARGS...]
|
||||
|
||||
* `--force-rm` 删除构建过程中的临时容器。
|
||||
|
||||
* `--no-cache` 构建镜像过程中不使用 cache(这将加长构建过程)。
|
||||
* `--no-cache` 构建镜像过程中不使用 cache (这将加长构建过程)。
|
||||
|
||||
* `--pull` 始终尝试通过 pull 来获取更新版本的镜像。
|
||||
|
||||
@@ -98,9 +100,9 @@ $ docker compose kill -s SIGINT
|
||||
|
||||
选项:
|
||||
|
||||
* `--protocol=proto` 指定端口协议,tcp(默认值)或者 udp。
|
||||
* `--protocol=proto` 指定端口协议,tcp (默认值) 或者 udp。
|
||||
|
||||
* `--index=index` 如果同一服务存在多个容器,指定命令对象容器的序号(默认为 1)。
|
||||
* `--index=index` 如果同一服务存在多个容器,指定命令对象容器的序号 (默认为 1)。
|
||||
|
||||
#### `ps`
|
||||
|
||||
@@ -134,13 +136,13 @@ $ docker compose kill -s SIGINT
|
||||
|
||||
选项:
|
||||
|
||||
* `-t, --timeout TIMEOUT` 指定重启前停止容器的超时(默认为 10 秒)。
|
||||
* `-t, --timeout TIMEOUT` 指定重启前停止容器的超时 (默认为 10 秒)。
|
||||
|
||||
#### `rm`
|
||||
|
||||
格式为 `docker compose rm [options] [SERVICE...]`。
|
||||
|
||||
删除所有(停止状态的)服务容器。推荐先执行 `docker compose stop` 命令来停止容器。
|
||||
删除所有 (停止状态的) 服务容器。推荐先执行 `docker compose stop` 命令来停止容器。
|
||||
|
||||
选项:
|
||||
|
||||
@@ -216,7 +218,7 @@ $ docker compose scale web=3 db=2
|
||||
|
||||
将启动 3 个容器运行 web 服务,2 个容器运行 db 服务。
|
||||
|
||||
> **提示**:部分版本的 Compose 可能不再提供独立的 `scale` 子命令(或不推荐使用)。此时可使用 `docker compose up` 的 `--scale` 选项达到同样效果:
|
||||
> **提示**:部分版本的 Compose 可能不再提供独立的 `scale` 子命令 (或不推荐使用)。此时可使用 `docker compose up` 的 `--scale` 选项达到同样效果:
|
||||
>
|
||||
> ```bash
|
||||
> $ docker compose up -d --scale web=3 --scale db=2
|
||||
@@ -226,7 +228,7 @@ $ docker compose scale web=3 db=2
|
||||
|
||||
选项:
|
||||
|
||||
* `-t, --timeout TIMEOUT` 停止容器时候的超时(默认为 10 秒)。
|
||||
* `-t, --timeout TIMEOUT` 停止容器时候的超时 (默认为 10 秒)。
|
||||
|
||||
#### `start`
|
||||
|
||||
@@ -242,7 +244,7 @@ $ docker compose scale web=3 db=2
|
||||
|
||||
选项:
|
||||
|
||||
* `-t, --timeout TIMEOUT` 停止容器时候的超时(默认为 10 秒)。
|
||||
* `-t, --timeout TIMEOUT` 停止容器时候的超时 (默认为 10 秒)。
|
||||
|
||||
#### `top`
|
||||
|
||||
@@ -258,7 +260,7 @@ $ docker compose scale web=3 db=2
|
||||
|
||||
格式为 `docker compose up [options] [SERVICE...]`。
|
||||
|
||||
该命令十分强大,它将尝试自动完成包括构建镜像,(重新)创建服务,启动服务,并关联服务相关容器的一系列操作。
|
||||
该命令十分强大,它将尝试自动完成包括构建镜像,(重新) 创建服务,启动服务,并关联服务相关容器的一系列操作。
|
||||
|
||||
链接的服务都将会被自动启动,除非已经处于运行状态。
|
||||
|
||||
@@ -270,7 +272,7 @@ $ docker compose scale web=3 db=2
|
||||
|
||||
如果使用 `docker compose up -d`,将会在后台启动并运行所有的容器。一般推荐生产环境下使用该选项。
|
||||
|
||||
默认情况,如果服务容器已经存在,`docker compose up` 将会尝试停止容器,然后重新创建(保持使用 `volumes-from` 挂载的卷),以保证新启动的服务匹配 Compose 文件的最新内容。如果用户不希望容器被停止并重新创建,可以使用 `docker compose up --no-recreate`。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。如果用户只想重新部署某个服务,可以使用 `docker compose up --no-deps -d <SERVICE_NAME>` 来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。
|
||||
默认情况,如果服务容器已经存在,`docker compose up` 将会尝试停止容器,然后重新创建 (保持使用 `volumes-from` 挂载的卷),以保证新启动的服务匹配 Compose 文件的最新内容。如果用户不希望容器被停止并重新创建,可以使用 `docker compose up --no-recreate`。这样将只会启动处于停止状态的容器,而忽略已经运行的服务。如果用户只想重新部署某个服务,可以使用 `docker compose up --no-deps -d <SERVICE_NAME>` 来重新创建服务并后台停止旧服务,启动新服务,并不会影响到其所依赖的服务。
|
||||
|
||||
选项:
|
||||
|
||||
@@ -286,7 +288,7 @@ $ docker compose scale web=3 db=2
|
||||
|
||||
* `--no-build` 不自动构建缺失的服务镜像。
|
||||
|
||||
* `-t, --timeout TIMEOUT` 停止容器时候的超时(默认为 10 秒)。
|
||||
* `-t, --timeout TIMEOUT` 停止容器时候的超时 (默认为 10 秒)。
|
||||
|
||||
#### `version`
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
模板文件是使用 `Compose` 的核心,涉及到的指令关键字也比较多。但大家不用担心,这里面大部分指令跟 `docker run` 相关参数的含义都是类似的。
|
||||
|
||||
默认的模板文件名称为 `compose.yaml`(也兼容 `docker-compose.yml` 等历史文件名),格式为 YAML。
|
||||
默认的模板文件名称为 `compose.yaml` (也兼容 `docker-compose.yml` 等历史文件名),格式为 YAML。
|
||||
|
||||
```yaml
|
||||
services:
|
||||
@@ -14,15 +14,15 @@ services:
|
||||
- "/data"
|
||||
```
|
||||
|
||||
注意每个服务都必须通过 `image` 指令指定镜像或 `build` 指令(需要 Dockerfile)等来自动构建生成镜像。
|
||||
注意每个服务都必须通过 `image` 指令指定镜像或 `build` 指令 (需要 Dockerfile) 等来自动构建生成镜像。
|
||||
|
||||
如果使用 `build` 指令,在 `Dockerfile` 中设置的选项(例如:`CMD`、`EXPOSE`、`VOLUME`、`ENV` 等)将会自动被获取,无需在 Compose 文件中重复设置。
|
||||
如果使用 `build` 指令,在 `Dockerfile` 中设置的选项 (例如:`CMD`、`EXPOSE`、`VOLUME`、`ENV` 等) 将会自动被获取,无需在 Compose 文件中重复设置。
|
||||
|
||||
下面分别介绍各个指令的用法。
|
||||
|
||||
### `build`
|
||||
|
||||
指定 `Dockerfile` 所在文件夹的路径(可以是绝对路径,或者相对 Compose 文件的路径)。`Compose` 将会利用它自动构建这个镜像,然后使用这个镜像。
|
||||
指定 `Dockerfile` 所在文件夹的路径 (可以是绝对路径,或者相对 Compose 文件的路径)。`Compose` 将会利用它自动构建这个镜像,然后使用这个镜像。
|
||||
|
||||
```yaml
|
||||
services:
|
||||
@@ -58,7 +58,7 @@ build:
|
||||
|
||||
### `cap_add, cap_drop`
|
||||
|
||||
指定容器的内核能力(capacity)分配。
|
||||
指定容器的内核能力 (capacity) 分配。
|
||||
|
||||
例如,让容器拥有所有能力可以指定为:
|
||||
|
||||
@@ -104,7 +104,7 @@ cgroup_parent: cgroups_1
|
||||
container_name: docker-web-container
|
||||
```
|
||||
|
||||
>注意: 指定容器名称后,该服务将无法进行扩展(scale),因为 Docker 不允许多个容器具有相同的名称。
|
||||
>注意:指定容器名称后,该服务将无法进行扩展 (scale),因为 Docker 不允许多个容器具有相同的名称。
|
||||
|
||||
### `deploy`
|
||||
|
||||
@@ -138,7 +138,7 @@ services:
|
||||
image: postgres
|
||||
```
|
||||
|
||||
>注意:`web` 服务不会等待 `redis` `db` 「完全启动」之后才启动。
|
||||
>注意:`web` 服务不会等待 `redis` `db` “完全启动” 之后才启动。
|
||||
|
||||
### `dns`
|
||||
|
||||
@@ -216,7 +216,7 @@ environment:
|
||||
- SESSION_SECRET
|
||||
```
|
||||
|
||||
如果变量名称或者值中用到 `true|false,yes|no` 等表达 [布尔](https://yaml.org/type/bool.html) 含义的词汇,最好放到引号里,避免 YAML 自动解析某些内容为对应的布尔语义。这些特定词汇,包括
|
||||
如果变量名称或者值中用到 `true|false,yes|no` 等表达[布尔](https://yaml.org/type/bool.html)含义的词汇,最好放到引号里,避免 YAML 自动解析某些内容为对应的布尔语义。这些特定词汇,包括
|
||||
|
||||
```bash
|
||||
y|Y|yes|Yes|YES|n|N|no|No|NO|true|True|TRUE|false|False|FALSE|on|On|ON|off|Off|OFF
|
||||
@@ -288,7 +288,7 @@ image: a4bc65fd
|
||||
|
||||
### `labels`
|
||||
|
||||
为容器添加 Docker 元数据(metadata)信息。例如可以为容器添加辅助说明信息。
|
||||
为容器添加 Docker 元数据 (metadata) 信息。例如可以为容器添加辅助说明信息。
|
||||
|
||||
```yaml
|
||||
labels:
|
||||
@@ -299,7 +299,7 @@ labels:
|
||||
|
||||
### `links`
|
||||
|
||||
>注意:不推荐使用该指令。容器之间应通过 Docker 网络(networks)进行互联。
|
||||
>注意:不推荐使用该指令。容器之间应通过 Docker 网络 (networks) 进行互联。
|
||||
|
||||
### `logging`
|
||||
|
||||
@@ -370,7 +370,7 @@ pid: "host"
|
||||
|
||||
暴露端口信息。
|
||||
|
||||
使用宿主端口:容器端口 `(HOST:CONTAINER)` 格式,或者仅仅指定容器的端口(宿主将会随机选择端口)都可以。
|
||||
使用宿主端口:容器端口 `(HOST:CONTAINER)` 格式,或者仅仅指定容器的端口 (宿主将会随机选择端口) 都可以。
|
||||
|
||||
```yaml
|
||||
ports:
|
||||
@@ -407,7 +407,7 @@ secrets:
|
||||
|
||||
### `security_opt`
|
||||
|
||||
指定容器模板标签(label)机制的默认属性(用户、角色、类型、级别等)。例如配置标签的用户名和角色名。
|
||||
指定容器模板标签 (label) 机制的默认属性 (用户、角色、类型、级别等)。例如配置标签的用户名和角色名。
|
||||
|
||||
```yaml
|
||||
security_opt:
|
||||
@@ -441,7 +441,7 @@ sysctls:
|
||||
|
||||
指定容器的 ulimits 限制值。
|
||||
|
||||
例如,指定最大进程数为 65535,指定文件句柄数为 20000(软限制,应用可以随时修改,不能超过硬限制) 和 40000(系统硬限制,只能 root 用户提高)。
|
||||
例如,指定最大进程数为 65535,指定文件句柄数为 20000 (软限制,应用可以随时修改,不能超过硬限制) 和 40000 (系统硬限制,只能 root 用户提高)。
|
||||
|
||||
```yaml
|
||||
ulimits:
|
||||
@@ -453,7 +453,7 @@ sysctls:
|
||||
|
||||
### `volumes`
|
||||
|
||||
数据卷所挂载路径设置。可以设置为宿主机路径(`HOST:CONTAINER`)或者数据卷名称(`VOLUME:CONTAINER`),并且可以设置访问模式 (`HOST:CONTAINER:ro`)。
|
||||
数据卷所挂载路径设置。可以设置为宿主机路径 (`HOST:CONTAINER`) 或者数据卷名称 (`VOLUME:CONTAINER`),并且可以设置访问模式 (`HOST:CONTAINER:ro`)。
|
||||
|
||||
该指令中路径支持相对路径。
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
|
||||
### 架构概览
|
||||
|
||||
在开始之前,先看整体架构(如图 10-1 所示):
|
||||
在开始之前,先看整体架构 (如图 10-1 所示):
|
||||
|
||||
```mermaid
|
||||
flowchart TD
|
||||
@@ -37,7 +37,7 @@ flowchart TD
|
||||
- `web` 服务运行 Django 应用,对外暴露 8000 端口
|
||||
- `db` 服务运行 PostgreSQL 数据库,只在内部网络可访问
|
||||
- 两个服务通过 Docker Compose 自动创建的网络相互通信
|
||||
- `web` 服务可以通过服务名 `db` 访问数据库(Docker 内置 DNS)
|
||||
- `web` 服务可以通过服务名 `db` 访问数据库 (Docker 内置 DNS)
|
||||
|
||||
### 准备工作
|
||||
|
||||
@@ -51,6 +51,8 @@ $ mkdir django-docker && cd django-docker
|
||||
|
||||
### 步骤 1:创建 Dockerfile
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
```docker
|
||||
FROM python:3.12-slim
|
||||
|
||||
@@ -89,6 +91,8 @@ COPY . /code/
|
||||
|
||||
### 步骤 2:创建 requirements.txt
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
```txt
|
||||
Django>=5.0,<6.0
|
||||
psycopg[binary]>=3.1,<4.0
|
||||
@@ -144,7 +148,7 @@ volumes:
|
||||
|
||||
#### db 服务
|
||||
|
||||
db 服务 配置如下:
|
||||
db 服务配置如下:
|
||||
|
||||
```yaml
|
||||
db:
|
||||
@@ -164,7 +168,7 @@ db:
|
||||
|
||||
#### web 服务
|
||||
|
||||
web 服务 配置如下:
|
||||
web 服务配置如下:
|
||||
|
||||
```yaml
|
||||
web:
|
||||
@@ -255,7 +259,7 @@ $ docker compose up
|
||||
```
|
||||
|
||||
你会看到:
|
||||
1. 首先构建 web 镜像(第一次运行)
|
||||
1. 首先构建 web 镜像 (第一次运行)
|
||||
2. 启动 db 服务,等待健康检查通过
|
||||
3. 启动 web 服务
|
||||
|
||||
@@ -294,9 +298,11 @@ $ docker compose exec db psql -U django_user -d django_db
|
||||
|
||||
### 常见问题排查
|
||||
|
||||
#### Q1: 数据库连接失败
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
**错误信息**:`django.db.utils.OperationalError: could not connect to server`**可能原因与解决方案**:
|
||||
#### Q1:数据库连接失败
|
||||
|
||||
**错误信息**:`django.db.utils.OperationalError: could not connect to server` **可能原因与解决方案**:
|
||||
|
||||
| 原因 | 解决方案 |
|
||||
|------|---------|
|
||||
@@ -311,7 +317,7 @@ $ docker compose ps
|
||||
$ docker compose logs db
|
||||
```
|
||||
|
||||
#### Q2: 代码修改没有生效
|
||||
#### Q2:代码修改没有生效
|
||||
|
||||
**可能原因**:
|
||||
|
||||
@@ -319,7 +325,7 @@ $ docker compose logs db
|
||||
2. **Volume 挂载问题**:检查 `compose.yaml` 中的 volumes 配置
|
||||
3. **缓存问题**:尝试 `docker compose restart web`
|
||||
|
||||
#### Q3: 权限问题(Linux)
|
||||
#### Q3:权限问题
|
||||
|
||||
运行以下命令:
|
||||
|
||||
|
||||
@@ -45,6 +45,8 @@ $ mkdir rails-docker && cd rails-docker
|
||||
|
||||
### 步骤 1:创建 Dockerfile
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
```docker
|
||||
FROM ruby:3.2
|
||||
|
||||
@@ -143,7 +145,7 @@ $ docker compose run --rm web rails new . --force --database=postgresql --skip-b
|
||||
- `--rm`:执行后删除临时容器
|
||||
- `--force`:覆盖已存在的文件
|
||||
- `--database=postgresql`:配置使用 PostgreSQL
|
||||
- `--skip-bundle`:暂不安装依赖(稍后统一安装)
|
||||
- `--skip-bundle`:暂不安装依赖 (稍后统一安装)
|
||||
|
||||
生成的目录结构:
|
||||
|
||||
@@ -249,7 +251,9 @@ $ docker compose exec web bash
|
||||
|
||||
### 常见问题
|
||||
|
||||
#### Q: 数据库连接失败
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### Q:数据库连接失败
|
||||
|
||||
检查 `DATABASE_URL` 环境变量格式是否正确,确保 db 服务已启动:
|
||||
|
||||
@@ -258,7 +262,7 @@ $ docker compose ps
|
||||
$ docker compose logs db
|
||||
```
|
||||
|
||||
#### Q: server.pid 文件导致启动失败
|
||||
#### Q:server.pid 文件导致启动失败
|
||||
|
||||
错误信息:`A server is already running`
|
||||
|
||||
@@ -268,7 +272,7 @@ $ docker compose logs db
|
||||
$ docker compose exec web rm -f tmp/pids/server.pid
|
||||
```
|
||||
|
||||
#### Q: Gem 安装失败
|
||||
#### Q:Gem 安装失败
|
||||
|
||||
可能需要更新 bundler 或清理缓存:
|
||||
|
||||
|
||||
@@ -1,11 +1,13 @@
|
||||
## 10.8 实战 WordPress
|
||||
|
||||
WordPress 是全球最流行的内容管理系统(CMS)。使用 Docker Compose 可以在几分钟内搭建一个包含数据库、Web 服务和持久化存储的生产级 WordPress 环境。
|
||||
WordPress 是全球最流行的内容管理系统 (CMS)。使用 Docker Compose 可以在几分钟内搭建一个包含数据库、Web 服务和持久化存储的生产级 WordPress 环境。
|
||||
|
||||
---
|
||||
|
||||
### 项目结构
|
||||
|
||||
如下代码块所示,展示了相关示例:
|
||||
|
||||
```
|
||||
wordpress/
|
||||
├── compose.yaml
|
||||
@@ -79,7 +81,9 @@ networks:
|
||||
|
||||
### 配置文件详解
|
||||
|
||||
#### 1. 环境变量(.env)
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。环境变量 (。env)
|
||||
|
||||
为了安全,不要在 `compose.yaml` 中直接写密码。创建 `.env` 文件:
|
||||
|
||||
@@ -90,15 +94,15 @@ DB_PASSWORD=somestronguserpassword
|
||||
|
||||
Compose 会自动读取此同级目录下的文件。
|
||||
|
||||
#### 2. 数据持久化
|
||||
#### 2。数据持久化
|
||||
|
||||
我们定义了两个命名卷:
|
||||
- `db_data`: 确保 MySQL 容器重建后数据不丢失
|
||||
- `wp_data`: 保存 WordPress 的核心文件、插件、主题和上传的媒体文件
|
||||
- `db_data`:确保 MySQL 容器重建后数据不丢失
|
||||
- `wp_data`:保存 WordPress 的核心文件、插件、主题和上传的媒体文件
|
||||
|
||||
#### 3. PHP 配置优化
|
||||
#### 3。PHP 配置优化
|
||||
|
||||
默认的 WordPress 镜像上传文件限制较小(通常 2MB)。创建 `uploads.ini`:
|
||||
默认的 WordPress 镜像上传文件限制较小 (通常 2MB)。创建 `uploads.ini`:
|
||||
|
||||
```ini
|
||||
file_uploads = On
|
||||
@@ -131,7 +135,9 @@ $ docker compose logs -f
|
||||
|
||||
### 生产环境最佳实践
|
||||
|
||||
#### 1. 数据库备份
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
#### 1。数据库备份
|
||||
|
||||
不要只依赖 Volume。建议定期备份数据库:
|
||||
|
||||
@@ -161,11 +167,11 @@ $ docker exec wordpress_db mysqldump -u wordpress -pwordpress wordpress > backup
|
||||
- wp_net
|
||||
```
|
||||
|
||||
#### 2. 使用 Nginx 反向代理
|
||||
#### 2。使用 Nginx 反向代理
|
||||
|
||||
在生产环境中,不要直接暴露 WordPress 端口,而是通过 Nginx 进行反向代理并配置 SSL。
|
||||
|
||||
#### 3. 使用 Redis 缓存
|
||||
#### 3。使用 Redis 缓存
|
||||
|
||||
WordPress 支持 Redis 缓存以提高性能。
|
||||
|
||||
@@ -187,15 +193,17 @@ WordPress 支持 Redis 缓存以提高性能。
|
||||
|
||||
### 常见问题
|
||||
|
||||
#### Q: 数据库连接错误
|
||||
本节涵盖了相关内容与详细描述,主要探讨以下几个方面:
|
||||
|
||||
**现象**:访问页面显示 "Error establishing a database connection"。**排查**:
|
||||
#### Q:数据库连接错误
|
||||
|
||||
**现象**:访问页面显示 “Error establishing a database connection”。**排查**:
|
||||
1. 检查 `docker compose logs wordpress`
|
||||
2. 确认 `.env` 中的密码与 YAML 文件引用一致
|
||||
3. 确认 `WORDPRESS_DB_HOST` 也是 `db`(服务名)
|
||||
3. 确认 `WORDPRESS_DB_HOST` 也是 `db` (服务名)
|
||||
4. MySQL 8.0 可能需要几秒钟启动,WordPress 会自动重试,稍等片刻即可。
|
||||
|
||||
#### Q: 无法上传大文件
|
||||
#### Q:无法上传大文件
|
||||
|
||||
**解决**:确保挂载了 `uploads.ini` 配置,并且重启了容器:
|
||||
```bash
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
# 第十章 Docker Compose
|
||||
|
||||
`Docker Compose` 是 Docker 官方编排(Orchestration)项目之一,负责快速的部署分布式应用。
|
||||
`Docker Compose` 是 Docker 官方编排 (Orchestration) 项目之一,负责快速的部署分布式应用。
|
||||
|
||||
本章将介绍 `Compose` 项目情况以及安装和使用。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user