From 0648f6397914895c156710b25693e61fbb103e9f Mon Sep 17 00:00:00 2001 From: Baohua Yang Date: Thu, 19 Mar 2026 20:21:06 -0700 Subject: [PATCH] fix: update docker-compose V1 syntax to V2 and add release PDF workflow Replace remaining docker-compose command references with docker compose (V2). Add GitHub Actions workflow to auto-generate PDF via mdpress on release. --- .github/workflows/release-pdf.yml | 48 +++++++++++++++++++++++ 01_introduction/summary.md | 1 + 09_network/9.3_custom_network.md | 2 +- 09_network/9.7_advanced_networking.md | 2 +- 21_case_devops/21.7_practical_examples.md | 2 +- appendix/learning_roadmap.md | 14 +++---- 6 files changed, 59 insertions(+), 10 deletions(-) create mode 100644 .github/workflows/release-pdf.yml diff --git a/.github/workflows/release-pdf.yml b/.github/workflows/release-pdf.yml new file mode 100644 index 0000000..9f6c638 --- /dev/null +++ b/.github/workflows/release-pdf.yml @@ -0,0 +1,48 @@ +name: Build PDF on Release + +on: + release: + types: [published] + workflow_dispatch: + +permissions: + contents: write + +jobs: + build-pdf: + name: Generate PDF + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install Chromium + run: | + sudo apt-get update + sudo apt-get install -y chromium-browser + + - name: Install mdpress (latest) + run: | + LATEST_TAG=$(curl -fsSL https://api.github.com/repos/yeasy/mdpress/releases/latest | jq -r .tag_name) + VERSION="${LATEST_TAG#v}" + echo "Installing mdpress $VERSION" + curl -fsSL "https://github.com/yeasy/mdPress/releases/download/$LATEST_TAG/mdpress_${VERSION}_linux_amd64.tar.gz" -o mdpress.tar.gz + tar xzf mdpress.tar.gz + sudo mv mdpress /usr/local/bin/ + mdpress --version + + - name: Build PDF + run: mdpress build --format pdf --output docker_practice.pdf + + - name: Upload PDF to Release + if: github.event_name == 'release' + uses: softprops/action-gh-release@v2 + with: + files: docker_practice.pdf + + - name: Upload PDF as artifact + if: github.event_name == 'workflow_dispatch' + uses: actions/upload-artifact@v4 + with: + name: docker_practice-pdf + path: docker_practice.pdf diff --git a/01_introduction/summary.md b/01_introduction/summary.md index 74c761f..d8e74b0 100644 --- a/01_introduction/summary.md +++ b/01_introduction/summary.md @@ -6,6 +6,7 @@ - Docker 推动了容器技术的标准化 (OCI) 和生态发展 Docker 的核心价值可以用一句话概括:**让应用的开发、测试、部署保持一致,同时极大提高资源利用效率。** 笔者认为,对于现代软件开发者来说,Docker 已经不是 “要不要学” 的问题,而是 **必备技能**。无论你是前端、后端、运维还是全栈开发者,掌握 Docker 都能让你的工作更高效。 + --- > 📝 **发现错误或有改进建议?** 欢迎提交 [Issue](https://github.com/yeasy/docker_practice/issues) 或 [PR](https://github.com/yeasy/docker_practice/pulls)。 diff --git a/09_network/9.3_custom_network.md b/09_network/9.3_custom_network.md index 8bf2ec8..33a0f4b 100644 --- a/09_network/9.3_custom_network.md +++ b/09_network/9.3_custom_network.md @@ -96,4 +96,4 @@ $ docker network prune > **🔥 踩坑实录** > -> 一个新手开发者通过 `docker-compose` 部署了两个容器化服务:服务 A 和服务 B。他在服务 A 的代码中尝试用 `localhost:3000` 访问服务 B,结果始终连接超时。这个错误非常隐蔽——在本地单机开发时看不出问题,因为他可能在同一个进程中测试。排查时他错误地认为是防火墙或网络配置问题。实际原因是:每个容器都有独立的网络命名空间,`localhost` 在容器内部只指向容器自己,不是宿主机也不是其他容器。正确的做法是使用 docker-compose 自动创建的服务名作为主机名:`http://service-b:3000`。`docker-compose` 会自动在网络中注册服务名的 DNS,这样容器间通信才能正确解析。改动仅需一行代码,问题随之消失。 +> 一个新手开发者通过 `docker compose` 部署了两个容器化服务:服务 A 和服务 B。他在服务 A 的代码中尝试用 `localhost:3000` 访问服务 B,结果始终连接超时。这个错误非常隐蔽——在本地单机开发时看不出问题,因为他可能在同一个进程中测试。排查时他错误地认为是防火墙或网络配置问题。实际原因是:每个容器都有独立的网络命名空间,`localhost` 在容器内部只指向容器自己,不是宿主机也不是其他容器。正确的做法是使用 Compose 自动创建的服务名作为主机名:`http://service-b:3000`。Compose 会自动在网络中注册服务名的 DNS,这样容器间通信才能正确解析。改动仅需一行代码,问题随之消失。 diff --git a/09_network/9.7_advanced_networking.md b/09_network/9.7_advanced_networking.md index 30aa740..96e76b6 100644 --- a/09_network/9.7_advanced_networking.md +++ b/09_network/9.7_advanced_networking.md @@ -662,7 +662,7 @@ spec: ```bash # 1. 开发环境:使用 Bridge 网络 docker network create my-app -docker-compose up # 默认使用 bridge +docker compose up # 默认使用 bridge # 2. 小规模生产(< 50 节点):使用 Flannel kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml diff --git a/21_case_devops/21.7_practical_examples.md b/21_case_devops/21.7_practical_examples.md index fbb98d3..a302c39 100644 --- a/21_case_devops/21.7_practical_examples.md +++ b/21_case_devops/21.7_practical_examples.md @@ -838,7 +838,7 @@ ENV PATH="/opt/venv/bin:$PATH" WORKDIR /workspace ``` -**docker-compose 用于 Dev Containers:** +**Docker Compose 用于 Dev Containers:** ```yaml # .devcontainer/docker-compose.yml diff --git a/appendix/learning_roadmap.md b/appendix/learning_roadmap.md index 0d53d41..5dff672 100644 --- a/appendix/learning_roadmap.md +++ b/appendix/learning_roadmap.md @@ -481,7 +481,7 @@ curl https://docker.training.kodekloud.com/dca-guide docker build / push / pull / tag docker run / exec / logs / inspect / ps docker volume / network / service -docker-compose up / down / logs / ps +docker compose up / down / logs / ps docker stats / events / inspect ``` @@ -864,10 +864,10 @@ docker volume rm name # 删除卷 docker volume inspect name # 查看卷详情 # Docker Compose -docker-compose up [-d] # 启动服务 -docker-compose down # 停止服务 -docker-compose ps # 列出服务 -docker-compose logs [-f] [service] # 查看日志 -docker-compose exec service cmd # 在服务中执行命令 -docker-compose build # 构建服务镜像 +docker compose up [-d] # 启动服务 +docker compose down # 停止服务 +docker compose ps # 列出服务 +docker compose logs [-f] [service] # 查看日志 +docker compose exec service cmd # 在服务中执行命令 +docker compose build # 构建服务镜像 ```