mirror of
https://github.com/yeasy/docker_practice.git
synced 2026-08-10 08:27:25 +00:00
Fix nginx version, IPVS removal, cgroups v2 and Redis config
This commit is contained in:
@@ -172,7 +172,7 @@ registry.example.com/myproject/myapp:v1.2.3
|
||||
|
||||
## 简写(使用 Docker Hub)
|
||||
|
||||
nginx:1.30
|
||||
nginx:1.28
|
||||
ubuntu:24.04
|
||||
|
||||
## 省略标签(默认使用 latest)
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
## 2.3 仓库
|
||||
|
||||
> **版本说明**:本节示例基于 Docker v29.x 和常见镜像版本编写。示例中的版本号(如 `nginx:1.30`、`mysql:8.4`、`mysql:5.7` 等)为演示用途。实际使用时请访问 [Docker Hub 官方页面](https://hub.docker.com) 或相应镜像的发布页确认最新可用版本和标签。
|
||||
> **版本说明**:本节示例基于 Docker v29.x 和常见镜像版本编写。示例中的版本号(如 `nginx:1.28`、`mysql:8.4`、`mysql:5.7` 等)为演示用途。实际使用时请访问 [Docker Hub 官方页面](https://hub.docker.com) 或相应镜像的发布页确认最新可用版本和标签。
|
||||
|
||||
Docker Registry 是镜像分发和管理的核心组件。本节将介绍 Registry 的基本概念、公共和私有服务的选择,以及镜像的安全管理。
|
||||
|
||||
@@ -25,8 +25,8 @@ flowchart TB
|
||||
subgraph RepoNginx ["Repository(仓库): nginx"]
|
||||
direction LR
|
||||
N1(":latest (tag)")
|
||||
N2(":1.25 (tag)")
|
||||
N3(":1.24 (tag)")
|
||||
N2(":1.28 (tag)")
|
||||
N3(":1.26 (tag)")
|
||||
N4(":alpine (tag)")
|
||||
N5("...")
|
||||
N1 ~~~ N2 ~~~ N3 ~~~ N4 ~~~ N5
|
||||
@@ -50,7 +50,7 @@ flowchart TB
|
||||
|------|------|------|
|
||||
| **Registry** | 存储镜像的服务 | Docker Hub、ghcr.io |
|
||||
| **Repository (仓库)** | 同一软件的镜像集合 | `nginx`、`mysql`、`mycompany/myapp` |
|
||||
| **Tag (标签)** | 仓库内的版本标识 | `latest`、`1.25`、`alpine` |
|
||||
| **Tag (标签)** | 仓库内的版本标识 | `latest`、`1.28`、`alpine` |
|
||||
|
||||
#### 镜像的完整名称
|
||||
|
||||
@@ -73,7 +73,7 @@ registry.example.com/mycompany/myapp:v1.2.3
|
||||
|
||||
## Docker Hub 官方镜像(省略 registry 和用户名)
|
||||
|
||||
nginx:1.30
|
||||
nginx:1.28
|
||||
ubuntu:24.04
|
||||
|
||||
## Docker Hub 用户镜像
|
||||
@@ -217,7 +217,7 @@ $ docker login registry.example.com # 登录其他 Registry
|
||||
|
||||
## 拉取镜像
|
||||
|
||||
$ docker pull nginx:1.30
|
||||
$ docker pull nginx:1.28
|
||||
|
||||
## 标记镜像(准备推送)
|
||||
|
||||
@@ -261,9 +261,9 @@ someuser/myapp # ⚠️ 需要评估
|
||||
|
||||
```bash
|
||||
## 准备一个你有写权限的镜像地址
|
||||
$ export IMAGE=<你的仓库名>/nginx:1.30
|
||||
$ docker pull nginx:1.30
|
||||
$ docker tag nginx:1.30 $IMAGE
|
||||
$ export IMAGE=<你的仓库名>/nginx:1.28
|
||||
$ docker pull nginx:1.28
|
||||
$ docker tag nginx:1.28 $IMAGE
|
||||
$ docker push $IMAGE
|
||||
|
||||
## 生成签名密钥(会生成 cosign.key / cosign.pub)
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
> **版本号最佳实践**
|
||||
>
|
||||
> - **永远指定版本号**:避免使用 `latest` 标签,应指定具体的版本(如 `ubuntu:24.04`、`nginx:1.30`),以确保镜像内容稳定一致。
|
||||
> - **永远指定版本号**:避免使用 `latest` 标签,应指定具体的版本(如 `ubuntu:24.04`、`nginx:1.28`),以确保镜像内容稳定一致。
|
||||
> - **在生产环境使用摘要**:优先使用镜像摘要(SHA256)而非标签,如 `nginx@sha256:abc123...`,因为摘要不可变。
|
||||
> - **定期评估依赖**:即使指定了版本号,仍应定期检查依赖的基础镜像是否有安全更新。
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
现在让我们以定制一个 Web 服务器为例子,来讲解镜像是如何构建的。
|
||||
|
||||
> **版本提示**:以下示例中 `nginx` 镜像使用默认 `latest` 标签。生产环境建议指定具体版本号(如 `nginx:1.30`),以避免镜像更新带来的不兼容性。
|
||||
> **版本提示**:以下示例中 `nginx` 镜像使用默认 `latest` 标签。生产环境建议指定具体版本号(如 `nginx:1.28`),以避免镜像更新带来的不兼容性。
|
||||
|
||||
```bash
|
||||
$ docker run --name webserver -d -p 8080:80 nginx
|
||||
@@ -93,7 +93,7 @@ nginx 1.30 05a60462f8ba 12 days ago
|
||||
nginx latest e43d811ce2f4 4 weeks ago 181.5 MB
|
||||
```
|
||||
|
||||
> **版本说明**:上面示例中 `nginx:1.30` 代表 1.30 系列的最新 patch 版本。在���际应用中应根据需求选择确切的版本号,而不是盲目使用 `latest`。
|
||||
> **版本说明**:上面示例中 `nginx:1.28` 代表 1.30 系列的最新 patch 版本。在���际应用中应根据需求选择确切的版本号,而不是盲目使用 `latest`。
|
||||
|
||||
我们还可以用 `docker history` 具体查看镜像内的历史记录。例如先执行 `docker history nginx:v2`,再对比 `docker history nginx:latest`,就能看到我们刚刚提交出来的新层。
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ $ touch Dockerfile
|
||||
```
|
||||
其内容为:
|
||||
|
||||
> **版本提示**:下面示例中 `FROM nginx` 使用的是 `latest` 标签。在实际应用中应使用明确的版本号(如 `FROM nginx:1.30`),以确保 Dockerfile 的可重现性和稳定性。
|
||||
> **版本提示**:下面示例中 `FROM nginx` 使用的是 `latest` 标签。在实际应用中应使用明确的版本号(如 `FROM nginx:1.28`),以确保 Dockerfile 的可重现性和稳定性。
|
||||
|
||||
```docker
|
||||
FROM nginx
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
- **镜像标签约定**:
|
||||
- `latest` 或 `v1.0.0` 等:带标签的自定义镜像,示例中指定具体版本
|
||||
- `24.04`、`8.4`:官方镜像的稳定版本分支
|
||||
- 生产环境建议:指定���确版本号(如 `nginx:1.30.0`、`mysql:8.4.4`)而非仅大版本号
|
||||
- 生产环境建议:指定���确版本号(如 `nginx:1.28.0`、`mysql:8.4.4`)而非仅大版本号
|
||||
|
||||
* [启动容器](5.1_run.md)
|
||||
* [守护态运行](5.2_daemon.md)
|
||||
|
||||
@@ -34,7 +34,7 @@ Starting ──成功──> Healthy ──失败N次──> Unhealthy
|
||||
#### Web 服务检查
|
||||
|
||||
```docker
|
||||
# 注:nginx 镜像推荐使用具体的版本标签(如 nginx:1.30-alpine)
|
||||
# 注:nginx 镜像推荐使用具体的版本标签(如 nginx:1.28-alpine)
|
||||
FROM nginx
|
||||
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
|
||||
|
||||
|
||||
@@ -176,5 +176,5 @@ $ docker build --target builder -t username/imagename:tag .
|
||||
上面例子中我们使用 `COPY --from=0 /go/src/github.com/go/helloworld/app .` 从上一阶段的镜像中复制文件,我们也可以复制任意镜像中的文件。
|
||||
|
||||
```docker
|
||||
COPY --from=nginx:1.30-alpine /etc/nginx/nginx.conf /nginx.conf
|
||||
COPY --from=nginx:1.28-alpine /etc/nginx/nginx.conf /nginx.conf
|
||||
```
|
||||
|
||||
@@ -128,8 +128,8 @@ RUN set -x ; cd ${LARAVEL_PATH} \
|
||||
### 7.18.5 最后一个阶段构建 NGINX 镜像
|
||||
|
||||
```docker
|
||||
# 注:nginx 镜像推荐使用具体的版本标签(如 nginx:1.30-alpine)
|
||||
FROM nginx:1.30-alpine as nginx
|
||||
# 注:nginx 镜像推荐使用具体的版本标签(如 nginx:1.28-alpine)
|
||||
FROM nginx:1.28-alpine as nginx
|
||||
|
||||
ARG LARAVEL_PATH=/app/laravel
|
||||
|
||||
@@ -179,7 +179,7 @@ $ docker run -dit --rm --network=laravel -p 8080:80 my/nginx
|
||||
完整的 `Dockerfile` 文件如下。
|
||||
|
||||
```docker
|
||||
# 注:生产环境推荐使用具体的版本标签,如 node:22-alpine、composer:2.x、php:8.3-fpm-alpine、nginx:1.30-alpine
|
||||
# 注:生产环境推荐使用具体的版本标签,如 node:22-alpine、composer:2.x、php:8.3-fpm-alpine、nginx:1.28-alpine
|
||||
FROM node:22-alpine as frontend
|
||||
|
||||
COPY package.json /app/
|
||||
@@ -229,7 +229,7 @@ RUN set -x ; cd ${LARAVEL_PATH} \
|
||||
&& chmod -R 777 storage \
|
||||
&& php artisan package:discover
|
||||
|
||||
FROM nginx:1.30-alpine as nginx
|
||||
FROM nginx:1.28-alpine as nginx
|
||||
|
||||
ARG LARAVEL_PATH=/app/laravel
|
||||
|
||||
|
||||
@@ -198,7 +198,7 @@ $ docker run --rm --cpus=1 stress --cpu 4
|
||||
|
||||
#### Docker 对 cgroups v2 的支持
|
||||
|
||||
Docker 19.03+ 默认优先使用 cgroups v2(如果系统支持),提供更好的性能和资源隔离。如果需要明确控制或回退到 v1,可以通过 Docker 守护进程配置文件 `/etc/docker/daemon.json` 修改 `cgroup-driver` 参数:
|
||||
Docker 20.10+ 开始支持 cgroups v2(如果系统支持),提供更好的性能和资源隔离。如果需要明确控制或回退到 v1,可以通过 Docker 守护进程配置文件 `/etc/docker/daemon.json` 修改 `cgroup-driver` 参数:
|
||||
|
||||
```json
|
||||
{
|
||||
|
||||
@@ -166,7 +166,7 @@ spec:
|
||||
spec:
|
||||
containers:
|
||||
- name: nginx
|
||||
image: nginx:1.30
|
||||
image: nginx:1.28
|
||||
ports:
|
||||
- containerPort: 80
|
||||
```
|
||||
|
||||
@@ -31,7 +31,7 @@ spec:
|
||||
spec:
|
||||
containers:
|
||||
- name: nginx
|
||||
image: nginx:1.30
|
||||
image: nginx:1.28
|
||||
ports:
|
||||
- containerPort: 80
|
||||
```
|
||||
@@ -73,7 +73,7 @@ kubectl get svc nginx-service
|
||||
|
||||
### 13.5.4 步骤 3:模拟滚动更新
|
||||
|
||||
修改 `nginx-deployment.yaml`,将镜像版本改为 `nginx:1.30-alpine`。
|
||||
修改 `nginx-deployment.yaml`,将镜像版本改为 `nginx:1.28-alpine`。
|
||||
|
||||
```bash
|
||||
kubectl apply -f nginx-deployment.yaml
|
||||
|
||||
@@ -140,7 +140,7 @@ $ sysctl --system
|
||||
|
||||
#### 修改 `kubelet.service`(可选:IPVS 模式)
|
||||
|
||||
> **注意**:kube-proxy 的 IPVS 模式已在 Kubernetes 1.35 中被标记为弃用,并计划在后续版本中移除。新部署建议使用默认的 iptables 模式或 nftables 模式(Kubernetes 1.31+ 可用)。以下 IPVS 配置仅供需要兼容旧环境的场景参考。
|
||||
> **注意**:kube-proxy 的 IPVS 模式已在 Kubernetes 1.35 中被标记为弃用,并在 **Kubernetes 1.36 中正式移除**。新部署应使用默认的 iptables 模式或 nftables 模式(Kubernetes 1.31+ 可用)。以下 IPVS 配置仅供 1.35 及更早版本的旧环境参考。
|
||||
|
||||
`/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 中被标记为弃用,并计划在后续版本中移除。新部署建议使用默认的 iptables 模式或 nftables 模式(Kubernetes 1.31+ 可用)。以下 IPVS 配置仅供需要兼容旧环境的场景参考。
|
||||
> **注意**:kube-proxy 的 IPVS 模式已在 Kubernetes 1.35 中被标记为弃用,并在 **Kubernetes 1.36 中正式移除**。新部署应使用默认的 iptables 模式或 nftables 模式(Kubernetes 1.31+ 可用)。以下 IPVS 配置仅供 1.35 及更早版本的旧环境参考。
|
||||
|
||||
`/etc/systemd/system/kubelet.service.d/10-proxy-ipvs.conf` 写入以下内容
|
||||
|
||||
|
||||
@@ -543,7 +543,7 @@ logfile ""
|
||||
|
||||
# 客户端输出缓冲限制
|
||||
client-output-buffer-limit normal 0 0 0
|
||||
client-output-buffer-limit slave 256mb 64mb 60
|
||||
client-output-buffer-limit replica 256mb 64mb 60
|
||||
client-output-buffer-limit pubsub 32mb 8mb 60
|
||||
```
|
||||
|
||||
|
||||
Reference in New Issue
Block a user