mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-12 01:17:42 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1c4e0538d8 | ||
|
|
0b8f6e9b60 | ||
|
|
5650315cb4 | ||
|
|
e21794ebde |
@@ -24,13 +24,16 @@ jobs:
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y fonts-noto-cjk fonts-noto-cjk-extra
|
||||
|
||||
- name: Install mdpress (latest)
|
||||
- name: Install mdpress 0.7.10
|
||||
env:
|
||||
MDPRESS_VERSION: "0.7.10"
|
||||
MDPRESS_SHA256: "17e53e455996940bbbce64c69c43b3fb543f1501e03b74cf0434074efebd2db4"
|
||||
run: |
|
||||
LATEST_TAG=$(curl -fsSL -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ github.token }}" 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 /tmp/mdpress.tar.gz
|
||||
tar xzf /tmp/mdpress.tar.gz -C /tmp mdpress
|
||||
archive="/tmp/mdpress_${MDPRESS_VERSION}_linux_amd64.tar.gz"
|
||||
echo "Installing mdpress ${MDPRESS_VERSION}"
|
||||
curl -fsSL "https://github.com/yeasy/mdPress/releases/download/v${MDPRESS_VERSION}/mdpress_${MDPRESS_VERSION}_linux_amd64.tar.gz" -o "$archive"
|
||||
echo "${MDPRESS_SHA256} $archive" | sha256sum -c -
|
||||
tar xzf "$archive" -C /tmp mdpress
|
||||
sudo mv /tmp/mdpress /usr/local/bin/
|
||||
mdpress --version
|
||||
|
||||
|
||||
@@ -24,19 +24,22 @@ jobs:
|
||||
run: |
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y fonts-noto-cjk fonts-noto-cjk-extra
|
||||
- name: Install mdpress (latest)
|
||||
- name: Install mdpress 0.7.10
|
||||
env:
|
||||
MDPRESS_VERSION: "0.7.10"
|
||||
MDPRESS_SHA256: "17e53e455996940bbbce64c69c43b3fb543f1501e03b74cf0434074efebd2db4"
|
||||
run: |
|
||||
LATEST_TAG=$(curl -fsSL -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ github.token }}" 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
|
||||
archive="/tmp/mdpress_${MDPRESS_VERSION}_linux_amd64.tar.gz"
|
||||
echo "Installing mdpress ${MDPRESS_VERSION}"
|
||||
curl -fsSL "https://github.com/yeasy/mdPress/releases/download/v${MDPRESS_VERSION}/mdpress_${MDPRESS_VERSION}_linux_amd64.tar.gz" -o "$archive"
|
||||
echo "${MDPRESS_SHA256} $archive" | sha256sum -c -
|
||||
tar xzf "$archive"
|
||||
sudo mv mdpress /usr/local/bin/
|
||||
mdpress --version
|
||||
- name: Build site
|
||||
run: mdpress build --format site
|
||||
- name: Build PDF
|
||||
run: mdpress build --format pdf --output docker_practice.pdf
|
||||
- name: Build site
|
||||
run: npm run build
|
||||
- name: Upload PDF as artifact
|
||||
uses: actions/upload-artifact@v7
|
||||
with:
|
||||
|
||||
@@ -4,6 +4,7 @@ on: pull_request
|
||||
permissions:
|
||||
contents: write
|
||||
pull-requests: write
|
||||
checks: read
|
||||
|
||||
jobs:
|
||||
dependabot:
|
||||
@@ -12,15 +13,36 @@ jobs:
|
||||
steps:
|
||||
- name: Dependabot metadata
|
||||
id: metadata
|
||||
uses: dependabot/fetch-metadata@v3
|
||||
uses: dependabot/fetch-metadata@25dd0e34f4fe68f24cc83900b1fe3fe149efef98 # v3
|
||||
with:
|
||||
github-token: "${{ secrets.GITHUB_TOKEN }}"
|
||||
- name: Approve a PR
|
||||
|
||||
- name: Confirm required checks are configured
|
||||
if: >
|
||||
steps.metadata.outputs.package-ecosystem == 'github_actions' &&
|
||||
contains(fromJSON('["version-update:semver-patch","version-update:semver-minor"]'), steps.metadata.outputs.update-type)
|
||||
run: |
|
||||
REQUIRED=$(gh api "repos/${GITHUB_REPOSITORY}/branches/${{ github.event.pull_request.base.ref }}/protection/required_status_checks" --jq '((.contexts // []) | length) + ((.checks // []) | length)' 2>/dev/null || echo 0)
|
||||
if [ "$REQUIRED" -eq 0 ]; then
|
||||
echo "No required status checks configured on the base branch; refusing Dependabot auto-merge."
|
||||
exit 1
|
||||
fi
|
||||
env:
|
||||
GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||||
|
||||
- name: Approve low-risk Dependabot PR
|
||||
if: >
|
||||
steps.metadata.outputs.package-ecosystem == 'github_actions' &&
|
||||
contains(fromJSON('["version-update:semver-patch","version-update:semver-minor"]'), steps.metadata.outputs.update-type)
|
||||
run: gh pr review --approve "$PR_URL"
|
||||
env:
|
||||
PR_URL: ${{github.event.pull_request.html_url}}
|
||||
GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||||
- name: Enable auto-merge for Dependabot PRs
|
||||
|
||||
- name: Enable auto-merge for low-risk Dependabot PRs
|
||||
if: >
|
||||
steps.metadata.outputs.package-ecosystem == 'github_actions' &&
|
||||
contains(fromJSON('["version-update:semver-patch","version-update:semver-minor"]'), steps.metadata.outputs.update-type)
|
||||
run: gh pr merge --auto --merge "$PR_URL"
|
||||
env:
|
||||
PR_URL: ${{github.event.pull_request.html_url}}
|
||||
|
||||
@@ -31,13 +31,16 @@ jobs:
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y fonts-noto-cjk fonts-noto-cjk-extra
|
||||
|
||||
- name: Install mdpress (latest)
|
||||
- name: Install mdpress 0.7.10
|
||||
env:
|
||||
MDPRESS_VERSION: "0.7.10"
|
||||
MDPRESS_SHA256: "17e53e455996940bbbce64c69c43b3fb543f1501e03b74cf0434074efebd2db4"
|
||||
run: |
|
||||
LATEST_TAG=$(curl -fsSL -H "Accept: application/vnd.github+json" -H "Authorization: Bearer ${{ github.token }}" 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 /tmp/mdpress.tar.gz
|
||||
tar xzf /tmp/mdpress.tar.gz -C /tmp mdpress
|
||||
archive="/tmp/mdpress_${MDPRESS_VERSION}_linux_amd64.tar.gz"
|
||||
echo "Installing mdpress ${MDPRESS_VERSION}"
|
||||
curl -fsSL "https://github.com/yeasy/mdPress/releases/download/v${MDPRESS_VERSION}/mdpress_${MDPRESS_VERSION}_linux_amd64.tar.gz" -o "$archive"
|
||||
echo "${MDPRESS_SHA256} $archive" | sha256sum -c -
|
||||
tar xzf "$archive" -C /tmp mdpress
|
||||
sudo mv /tmp/mdpress /usr/local/bin/
|
||||
mdpress --version
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
比如我们想要创建一个 [OpenVZ](https://openvz.org) 的 Ubuntu 16.04 [模板](https://wiki.openvz.org/Download/template/precreated)的镜像:
|
||||
|
||||
> **版本提示**:示例中的 Ubuntu 16.04 (Xenial) 已于 2021 年 4 月停止支持。如果用于生产环境,建议更新至 Ubuntu 22.04 LTS 或更新版本。
|
||||
> **版本提示**:`noble` 对应 Ubuntu 24.04 LTS。实际用于生产环境时,应选择仍在安全维护期内的发行版,并按团队的基础镜像更新策略定期重建。
|
||||
|
||||
```bash
|
||||
$ docker import \
|
||||
|
||||
@@ -60,7 +60,7 @@ Docker 镜像的每一层都有一个唯一的 ID,这个 ID 是根据该层的
|
||||
|
||||
Docker 使用联合文件系统 (Union FS) 与写时复制思路来实现这种分层挂载。传统的实现方式常见于 `overlay2`、`aufs`、`btrfs`、`zfs` 等存储驱动;而在 Docker Engine 29.0 及之后的全新安装中,默认镜像后端已经变为 containerd image store,它使用 snapshotter 来管理这些层。
|
||||
|
||||
> **版本背景**:Docker Engine 29.0(发布于 2025 年 11 月)是一个重要版本分界点,在全新安装场景下默认启用 containerd image store 作为镜像存储后端。这对镜像管理、OCI 合规性和供应链安全都有深远影响。如果你的 Docker 版本低于 29.0,镜像存储仍使用传统的 classic store 路径。
|
||||
> **版本背景**:Docker Engine 29.0.0 发布于 2025 年 11 月 10 日,是一个重要版本分界点。Docker Engine 29.0 及之后的全新安装默认使用 containerd image store;从更早版本升级的 daemon 会继续使用 legacy graph driver,直到显式启用 containerd image store。Docker Desktop 4.34 及之后也默认启用 containerd image store,实际环境仍应以当前配置为准。
|
||||
|
||||
虽然底层实现细节不同,但它们都遵循上述的 **分层 + CoW** 模型;因此,无论你看到的是 `overlay2` 还是 containerd snapshotter,理解镜像层、容器层和写时复制的方式都是一样重要的。
|
||||
|
||||
|
||||
@@ -74,6 +74,8 @@ $ openssl x509 -req -days 750 -in "site.csr" -sha256 \
|
||||
|
||||
新建 `ssl` 文件夹并将 `docker.domain.com.key` `docker.domain.com.crt` `root-ca.crt` 这三个文件移入,删除其他文件。
|
||||
|
||||
> **安全提示**:这些私钥和证书应在本地或受控部署环境中生成,不要提交进 Git 仓库。示例目录只保留占位说明,运行前请按上面的步骤重新生成。
|
||||
|
||||
### 6.3.2 配置私有仓库
|
||||
|
||||
私有仓库默认的配置文件位于 `/etc/docker/registry/config.yml`,我们先在本地编辑 `config.yml`,之后挂载到容器中。
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
*
|
||||
!.gitignore
|
||||
!README.md
|
||||
@@ -0,0 +1,5 @@
|
||||
# Generated TLS Files
|
||||
|
||||
Run the certificate steps in section 6.3.1 to generate `docker.domain.com.key`, `docker.domain.com.crt`, and `root-ca.crt` locally before starting the demo registry.
|
||||
|
||||
Do not commit generated private keys or certificates.
|
||||
@@ -1,35 +0,0 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
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
|
||||
7zJA
|
||||
-----END CERTIFICATE-----
|
||||
@@ -1,51 +0,0 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
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
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -140,7 +140,7 @@ $ sysctl --system
|
||||
|
||||
#### 修改 `kubelet.service`(可选:IPVS 模式)
|
||||
|
||||
> **注意**:kube-proxy 的 IPVS 模式已在 Kubernetes 1.35 中被标记为弃用,并在 **Kubernetes 1.36 中正式移除**。新部署应使用默认的 iptables 模式或 nftables 模式(Kubernetes 1.31+ 可用)。以下 IPVS 配置仅供 1.35 及更早版本的旧环境参考。
|
||||
> **注意**:kube-proxy 的 IPVS 模式已在 Kubernetes 1.35 中被标记为弃用;Kubernetes 1.36 文档仍将其列为已弃用模式,并推荐迁移到 nftables。新部署应使用默认的 iptables 模式或 nftables 模式(Kubernetes 1.33+ 稳定)。以下 IPVS 配置仅供旧环境参考。
|
||||
|
||||
`/etc/systemd/system/kubelet.service.d/10-proxy-ipvs.conf` 写入以下内容
|
||||
|
||||
|
||||
@@ -171,7 +171,7 @@ $ sysctl --system
|
||||
|
||||
#### 修改 `kubelet.service`(可选:IPVS 模式)
|
||||
|
||||
> **注意**:kube-proxy 的 IPVS 模式已在 Kubernetes 1.35 中被标记为弃用,并在 **Kubernetes 1.36 中正式移除**。新部署应使用默认的 iptables 模式或 nftables 模式(Kubernetes 1.31+ 可用)。以下 IPVS 配置仅供 1.35 及更早版本的旧环境参考。
|
||||
> **注意**:kube-proxy 的 IPVS 模式已在 Kubernetes 1.35 中被标记为弃用;Kubernetes 1.36 文档仍将其列为已弃用模式,并推荐迁移到 nftables。新部署应使用默认的 iptables 模式或 nftables 模式(Kubernetes 1.33+ 稳定)。以下 IPVS 配置仅供旧环境参考。
|
||||
|
||||
`/etc/systemd/system/kubelet.service.d/10-proxy-ipvs.conf` 写入以下内容
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ Snyk 提供了商业级的安全扫描服务,特别适合企业环境。
|
||||
|
||||
**特点:**
|
||||
|
||||
- 支持开源漏洞和许可证扫描
|
||||
- 支持开源漏洞、许可证扫描和修复建议
|
||||
- 与多个 Git 平台深度集成(GitHub、GitLab、Bitbucket)
|
||||
- 提供修复建议和自动化修复 PR
|
||||
- 支持 Kubernetes 部署后安全监控
|
||||
@@ -114,7 +114,7 @@ $ docker scout quickview myapp:latest
|
||||
| Docker 集成 | ✓(原生) | 需安装 | 需安装 | 需安装 |
|
||||
| 零依赖 | ✗ | ✓ | ✗ | ✗ |
|
||||
| 离线模式 | ✗ | ✓ | ✓ | ✗ |
|
||||
| 许可证扫描 | ✓ | ✗ | ✓ | ✓ |
|
||||
| 许可证扫描 | ✓ | ✓ | ✓ | ✓ |
|
||||
| 自动修复建议 | ✓ | ✗ | ✗ | ✓ |
|
||||
| 开源免费 | 部分 | ✓ | ✓ | 部分 |
|
||||
| IDE 集成 | ✓ | ✓ | ✓ | ✓ |
|
||||
|
||||
@@ -1,5 +1,31 @@
|
||||
# 修订记录
|
||||
|
||||
* 1.9.2 2026-05-16
|
||||
* 刷新 Docker 生态说明,更新 Fedora CoreOS、Podman、containerd 等章节中的维护状态
|
||||
* 修复镜像事实、演示 TLS 密钥等后续审阅发现的问题
|
||||
|
||||
* 1.9.1 2026-05-08
|
||||
* 使用 `browser-actions/setup-chrome` 替代 Ubuntu runner 上不稳定的 Chromium snap 安装
|
||||
* 修正 Docker Engine 29 日期、TLS 协议、healthcheck 与交互式调试示例
|
||||
|
||||
* 1.9.0 2026-05-02
|
||||
* 更新 Docker Engine 29、nginx、MySQL 8.4 LTS、Node.js 22 LTS 与 Kubernetes 相关版本说明
|
||||
* 补充 ipvlan、nftables、Gateway API、Docker Scout、镜像安全与供应链安全内容
|
||||
* 修复 Docker Hub 限流、etcdctl API、Compose healthcheck、Docker Debug 等时效性内容
|
||||
|
||||
* 1.8.0 2026-04-27
|
||||
* 补全 Dockerfile 指令参考与多处章节编号、标题层级、代码块和表格格式
|
||||
* 增加预览 PDF 自动发布流程,修复 mdpress 端口和导出相关配置
|
||||
|
||||
* 1.7.5 2026-04-05
|
||||
* 将失效的 AtomHub 镜像替换为可用镜像源
|
||||
|
||||
* 1.7.4 2026-03-31
|
||||
* 修复标题层级格式
|
||||
|
||||
* 1.7.3 2026-03-29
|
||||
* 修复 Wikipedia URL 编码
|
||||
|
||||
* 1.7.2 2026-03-28
|
||||
* 修正 macOS、Windows、Compose 与 Kubernetes 章节中的时效性内容和错误前提
|
||||
* 收缩越界网络内容,补充 bind mount、tmpfs 与端口映射的关键限制说明
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
## 目录
|
||||
|
||||
* [前言](README.md)
|
||||
* [Docker 从入门到实践](README.md)
|
||||
* [修订记录](CHANGELOG.md)
|
||||
* [如何贡献](CONTRIBUTING.md)
|
||||
|
||||
|
||||
+3
-3
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "docker_practice",
|
||||
"version": "1.7.2",
|
||||
"version": "1.9.2",
|
||||
"description": "docker_practice",
|
||||
"main": "index.js",
|
||||
"devDependencies": {
|
||||
@@ -9,7 +9,7 @@
|
||||
"vuepress-theme-hope": "^1.0.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1",
|
||||
"test": "node scripts/check_metadata.js",
|
||||
"mdpress:help": "mdpress --help",
|
||||
"build": "rm -rf _site _site_site && mdpress build --format site --output _site && rm -rf _site && mv _site_site _site",
|
||||
"serve": "mdpress serve",
|
||||
@@ -23,7 +23,7 @@
|
||||
"url": "git+https://github.com/yeasy/docker_practice.git"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC",
|
||||
"license": "CC-BY-NC-SA-4.0",
|
||||
"bugs": {
|
||||
"url": "https://github.com/yeasy/docker_practice/issues"
|
||||
},
|
||||
|
||||
@@ -0,0 +1,15 @@
|
||||
const fs = require('fs');
|
||||
|
||||
const pkg = JSON.parse(fs.readFileSync('package.json', 'utf8'));
|
||||
const changelog = fs.readFileSync('CHANGELOG.md', 'utf8');
|
||||
const readme = fs.readFileSync('README.md', 'utf8');
|
||||
|
||||
const topVersion = changelog.match(/^\* ([0-9]+\.[0-9]+\.[0-9]+)\b/m)?.[1];
|
||||
|
||||
if (pkg.version !== topVersion) {
|
||||
throw new Error(`package.json version ${pkg.version} does not match CHANGELOG ${topVersion}`);
|
||||
}
|
||||
|
||||
if (pkg.license !== 'CC-BY-NC-SA-4.0' || !readme.includes('CC BY-NC-SA 4.0')) {
|
||||
throw new Error('package.json license must match README license');
|
||||
}
|
||||
Reference in New Issue
Block a user