mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-12 01:17:42 +00:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2cea196860 | ||
|
|
13fc8b34f0 | ||
|
|
29742c8f74 | ||
|
|
7cae0b6bb3 | ||
|
|
10381deee4 | ||
|
|
625d209fa8 |
@@ -16,9 +16,13 @@ jobs:
|
|||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Chromium and CJK fonts
|
- name: Install Chromium and CJK fonts
|
||||||
|
uses: browser-actions/setup-chrome@v2
|
||||||
|
with:
|
||||||
|
chrome-version: stable
|
||||||
|
- name: Install CJK fonts
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y chromium-browser fonts-noto-cjk fonts-noto-cjk-extra
|
sudo apt-get install -y fonts-noto-cjk fonts-noto-cjk-extra
|
||||||
|
|
||||||
- name: Install mdpress (latest)
|
- name: Install mdpress (latest)
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -17,9 +17,13 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
- name: Install Chromium and CJK fonts
|
- name: Install Chromium and CJK fonts
|
||||||
|
uses: browser-actions/setup-chrome@v2
|
||||||
|
with:
|
||||||
|
chrome-version: stable
|
||||||
|
- name: Install CJK fonts
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y chromium-browser fonts-noto-cjk fonts-noto-cjk-extra
|
sudo apt-get install -y fonts-noto-cjk fonts-noto-cjk-extra
|
||||||
- name: Install mdpress (latest)
|
- name: Install mdpress (latest)
|
||||||
run: |
|
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)
|
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)
|
||||||
|
|||||||
@@ -23,9 +23,13 @@ jobs:
|
|||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v6
|
||||||
|
|
||||||
- name: Install Chromium and CJK fonts
|
- name: Install Chromium and CJK fonts
|
||||||
|
uses: browser-actions/setup-chrome@v2
|
||||||
|
with:
|
||||||
|
chrome-version: stable
|
||||||
|
- name: Install CJK fonts
|
||||||
run: |
|
run: |
|
||||||
sudo apt-get update
|
sudo apt-get update
|
||||||
sudo apt-get install -y chromium-browser fonts-noto-cjk fonts-noto-cjk-extra
|
sudo apt-get install -y fonts-noto-cjk fonts-noto-cjk-extra
|
||||||
|
|
||||||
- name: Install mdpress (latest)
|
- name: Install mdpress (latest)
|
||||||
run: |
|
run: |
|
||||||
|
|||||||
@@ -60,7 +60,7 @@ Docker 镜像的每一层都有一个唯一的 ID,这个 ID 是根据该层的
|
|||||||
|
|
||||||
Docker 使用联合文件系统 (Union FS) 与写时复制思路来实现这种分层挂载。传统的实现方式常见于 `overlay2`、`aufs`、`btrfs`、`zfs` 等存储驱动;而在 Docker Engine 29.0 及之后的全新安装中,默认镜像后端已经变为 containerd image store,它使用 snapshotter 来管理这些层。
|
Docker 使用联合文件系统 (Union FS) 与写时复制思路来实现这种分层挂载。传统的实现方式常见于 `overlay2`、`aufs`、`btrfs`、`zfs` 等存储驱动;而在 Docker Engine 29.0 及之后的全新安装中,默认镜像后端已经变为 containerd image store,它使用 snapshotter 来管理这些层。
|
||||||
|
|
||||||
> **版本背景**:Docker Engine 29.0(发布于 2026 年 1 月)是一个重要版本分界点,在全新安装场景下默认启用 containerd image store 作为镜像存储后端。这对镜像管理、OCI 合规性和供应链安全都有深远影响。如果你的 Docker 版本低于 29.0,镜像存储仍使用传统的 classic store 路径。
|
> **版本背景**:Docker Engine 29.0(发布于 2025 年 11 月)是一个重要版本分界点,在全新安装场景下默认启用 containerd image store 作为镜像存储后端。这对镜像管理、OCI 合规性和供应链安全都有深远影响。如果你的 Docker 版本低于 29.0,镜像存储仍使用传统的 classic store 路径。
|
||||||
|
|
||||||
虽然底层实现细节不同,但它们都遵循上述的 **分层 + CoW** 模型;因此,无论你看到的是 `overlay2` 还是 containerd snapshotter,理解镜像层、容器层和写时复制的方式都是一样重要的。
|
虽然底层实现细节不同,但它们都遵循上述的 **分层 + CoW** 模型;因此,无论你看到的是 `overlay2` 还是 containerd snapshotter,理解镜像层、容器层和写时复制的方式都是一样重要的。
|
||||||
|
|
||||||
|
|||||||
@@ -196,9 +196,9 @@ $ docker logs -t myapp
|
|||||||
|
|
||||||
3. **以交互模式调试**:
|
3. **以交互模式调试**:
|
||||||
```bash
|
```bash
|
||||||
|
# /bin/sh 覆盖镜像原本的启动命令,避免容器再次崩溃退出
|
||||||
|
# 进入 shell 后可手动执行原启动命令,定位具体报错原因
|
||||||
$ docker run -it myimage:v1.0.0 /bin/sh
|
$ docker run -it myimage:v1.0.0 /bin/sh
|
||||||
# 进入容器手动执行命令,查找问题
|
|
||||||
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Q:容器在后台运行但无法访问服务
|
#### Q:容器在后台运行但无法访问服务
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ server {
|
|||||||
ssl_certificate_key key/example.key;
|
ssl_certificate_key key/example.key;
|
||||||
|
|
||||||
ssl_session_timeout 5m;
|
ssl_session_timeout 5m;
|
||||||
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
|
ssl_protocols TLSv1.2 TLSv1.3;
|
||||||
ssl_ciphers HIGH:!aNULL:!MD5;
|
ssl_ciphers HIGH:!aNULL:!MD5;
|
||||||
ssl_prefer_server_ciphers on;
|
ssl_prefer_server_ciphers on;
|
||||||
large_client_header_buffers 4 32k;
|
large_client_header_buffers 4 32k;
|
||||||
|
|||||||
@@ -106,6 +106,11 @@ services:
|
|||||||
POSTGRES_PASSWORD: password
|
POSTGRES_PASSWORD: password
|
||||||
volumes:
|
volumes:
|
||||||
- postgres_data:/var/lib/postgresql/data
|
- postgres_data:/var/lib/postgresql/data
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
||||||
|
interval: 5s
|
||||||
|
timeout: 5s
|
||||||
|
retries: 5
|
||||||
|
|
||||||
web:
|
web:
|
||||||
build: .
|
build: .
|
||||||
@@ -115,7 +120,8 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- "3000:3000"
|
- "3000:3000"
|
||||||
depends_on:
|
depends_on:
|
||||||
- db
|
db:
|
||||||
|
condition: service_healthy
|
||||||
environment:
|
environment:
|
||||||
DATABASE_URL: postgres://postgres:password@db:5432/myapp_development
|
DATABASE_URL: postgres://postgres:password@db:5432/myapp_development
|
||||||
|
|
||||||
@@ -128,7 +134,7 @@ volumes:
|
|||||||
|--------|------|
|
|--------|------|
|
||||||
| `rm -f tmp/pids/server.pid` | 清理上次异常退出留下的 PID 文件 |
|
| `rm -f tmp/pids/server.pid` | 清理上次异常退出留下的 PID 文件 |
|
||||||
| `volumes: .:/myapp` | 挂载代码目录,支持热更新 |
|
| `volumes: .:/myapp` | 挂载代码目录,支持热更新 |
|
||||||
| `depends_on: db` | 确保数据库先启动 |
|
| `depends_on` + `condition` | 等待数据库健康检查通过后再启动 |
|
||||||
| `DATABASE_URL` | Rails 12-factor 风格的数据库配置 |
|
| `DATABASE_URL` | Rails 12-factor 风格的数据库配置 |
|
||||||
|
|
||||||
### 11.7.6 步骤 4:生成 Rails 项目
|
### 11.7.6 步骤 4:生成 Rails 项目
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ dockerd \
|
|||||||
|
|
||||||
### 18.3.3 Rootless 模式:非特权运行
|
### 18.3.3 Rootless 模式:非特权运行
|
||||||
|
|
||||||
为了从根本上解决“拥有 Docker socket 就是 root”的问题,Docker 在近年推出了 **Rootless 模式**。
|
为了从根本上解决“拥有 Docker socket 就是 root”的问题,Docker 自 19.03 版本(2019 年)起提供了 **Rootless 模式**。
|
||||||
|
|
||||||
Rootless 模式允许在完全局限于非 `root` 用户的环境中运行 Docker 守护进程(`dockerd`)和容器。该模式利用了现代 Linux 内核的 User Namespace 技术和非特权网络命名空间实现。
|
Rootless 模式允许在完全局限于非 `root` 用户的环境中运行 Docker 守护进程(`dockerd`)和容器。该模式利用了现代 Linux 内核的 User Namespace 技术和非特权网络命名空间实现。
|
||||||
|
|
||||||
|
|||||||
@@ -25,13 +25,13 @@ $ docker run --name some-mongo -d --network my-mongo-net mongo
|
|||||||
```bash
|
```bash
|
||||||
$ docker run --name some-app -d --network my-mongo-net application-that-uses-mongo
|
$ docker run --name some-app -d --network my-mongo-net application-that-uses-mongo
|
||||||
```
|
```
|
||||||
或者通过 `mongo`
|
或者通过 `mongosh`(MongoDB 6.0+ 已移除旧版 `mongo` 命令行工具)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ docker run -it --rm \
|
$ docker run -it --rm \
|
||||||
--network my-mongo-net \
|
--network my-mongo-net \
|
||||||
mongo \
|
mongo \
|
||||||
sh -c 'exec mongo "some-mongo:27017/test"'
|
mongosh "some-mongo:27017/test"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Dockerfile
|
### Dockerfile
|
||||||
|
|||||||
Reference in New Issue
Block a user