Update Grafana to v13, add version notes

This commit is contained in:
yeasy
2026-04-25 15:50:13 +00:00
parent 81b49cb00c
commit ec4ab5232b
55 changed files with 220 additions and 70 deletions
+3
View File
@@ -82,6 +82,7 @@ RUN pwd # 输出 /app
```docker
## 构建阶段
## 建议使用 node:20 或 node: 等具体版本标签,避免使用 latest
FROM node:20 AS builder
WORKDIR /build
@@ -91,6 +92,7 @@ COPY . .
RUN npm run build
## 生产阶段
## 建议使用 nginx:alpine 或其他具体版本
FROM nginx:alpine
WORKDIR /usr/share/nginx/html
@@ -103,6 +105,7 @@ COPY --from=builder /build/dist .
#### 1. 尽早设置 WORKDIR
```docker
# 建议使用 node:20 等主/次版本号标签
FROM node:20
WORKDIR /app # 尽早设置
+1
View File
@@ -34,6 +34,7 @@ Starting ──成功──> Healthy ──失败N次──> Unhealthy
#### Web 服务检查
```docker
# 注:nginx 镜像推荐使用具体的版本标签(如 nginx:1.25-alpine
FROM nginx
RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/*
@@ -60,6 +60,7 @@ server {
第一阶段进行前端构建
```docker
# 注:node 镜像推荐使用具体的版本标签(如 node:20-alpine
FROM node:alpine as frontend
COPY package.json /app/
@@ -81,6 +82,7 @@ RUN set -x ; cd /app \
第二阶段安装 Composer 依赖
```docker
# 注:composer 镜像推荐使用具体的版本标签(如 composer:2.x
FROM composer as composer
COPY database/ /app/database/
@@ -101,6 +103,7 @@ RUN set -x ; cd /app \
第三阶段对以上阶段生成的文件进行整合
```docker
# 注:php 镜像版本号已包含 major.minor(8.3),生产环境可根据需要调整
FROM php:8.3-fpm-alpine as laravel
ARG LARAVEL_PATH=/app/laravel
@@ -125,6 +128,7 @@ RUN set -x ; cd ${LARAVEL_PATH} \
### 7.18.5 最后一个阶段构建 NGINX 镜像
```docker
# 注:nginx 镜像推荐使用具体的版本标签(如 nginx:1.25-alpine
FROM nginx:alpine as nginx
ARG LARAVEL_PATH=/app/laravel
@@ -175,6 +179,7 @@ $ docker run -dit --rm --network=laravel -p 8080:80 my/nginx
完整的 `Dockerfile` 文件如下
```docker
# 注:生产环境推荐使用具体的版本标签,如 node:20-alpine、composer:2.x、php:8.3-fpm-alpine、nginx:1.25-alpine
FROM node:alpine as frontend
COPY package.json /app/
@@ -225,6 +230,7 @@ RUN set -x ; cd ${LARAVEL_PATH} \
&& php artisan package:discover
FROM nginx:alpine as nginx
```
ARG LARAVEL_PATH=/app/laravel
+2
View File
@@ -164,6 +164,7 @@ curl -s http://myip.ipip.net -i
#### 实现方式
```docker
# 建议使用 redis:7 或 redis:latest,具体版本号根据生产需求选择
FROM redis:7-alpine
COPY docker-entrypoint.sh /usr/local/bin/
ENTRYPOINT ["docker-entrypoint.sh"]
@@ -216,6 +217,7 @@ docker-entrypoint.sh redis-server docker-entrypoint.sh bash
### 7.5.6 场景三带参数的应用
```docker
# 建议使用 python:3.12 或 python:3,具体版本号根据应用兼容性需求选择
FROM python:3.12-slim
WORKDIR /app
COPY . .
+6 -6
View File
@@ -18,14 +18,14 @@ ENV <key1>=<value1> <key2>=<value2> ...
#### 设置单个变量
```docker
ENV NODE_VERSION 20.10.0
ENV NODE_VERSION 20
ENV APP_ENV production
```
#### 设置多个变量
```docker
ENV NODE_VERSION=20.10.0 \
ENV NODE_VERSION=20 \
APP_ENV=production \
APP_NAME="My Application"
```
@@ -158,15 +158,15 @@ $ docker build --build-arg NODE_VERSION=18 -t myapp .
```docker
## ✅ 好:版本集中管理
ENV NGINX_VERSION=1.25.0 \
NODE_VERSION=20.10.0 \
PYTHON_VERSION=3.12.0
ENV NGINX_VERSION=1.25 \
NODE_VERSION=20 \
PYTHON_VERSION=3.12
RUN apt-get install nginx=${NGINX_VERSION}
## ❌ 差:版本分散在各处
RUN apt-get install nginx=1.25.0
RUN apt-get install nginx=1.25
```
#### 2. 不要存储敏感信息
+9 -5
View File
@@ -35,6 +35,7 @@ ARG <参数名>[=<默认值>]
```docker
## 定义有默认值的 ARG
## 建议使用主版本号,如 20 而非 20.10.0,这样可以自动获取最新的补丁版本
ARG NODE_VERSION=20
@@ -113,17 +114,19 @@ RUN echo "Running with Node $NODE_VERSION"
#### 1. 控制基础镜像版本
```docker
ARG ALPINE_VERSION=3.19
# 推荐使用主版本号(如 3),或指定次版本号(如 3.19),避免指定完整补丁版本
ARG ALPINE_VERSION=3
FROM alpine:${ALPINE_VERSION}
```
```bash
$ docker build --build-arg ALPINE_VERSION=3.18 .
$ docker build --build-arg ALPINE_VERSION=3.19 .
```
#### 2. 设置软件版本
```docker
ARG NGINX_VERSION=1.25.0
# 使用次版本号 (1.25) 而非完整版本号 (1.25.0),以便自动更新到最新补丁版本
ARG NGINX_VERSION=1.25
RUN curl -fsSL https://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz | tar -xz
```
@@ -197,7 +200,7 @@ $ docker build --build-arg HTTP_PROXY=http://proxy:8080 .
#### 1. ARG 提供合理默认值
```docker
## ✅ 好:有默认值
## ✅ 好:有默认值,建议使用主或次版本号而非完整版本号
ARG NODE_VERSION=20
@@ -222,12 +225,13 @@ RUN echo "password=$DB_PASSWORD" > /app/.env
#### 3. 使用 ARG 提高构建灵活性
```docker
# 推荐使用次版本号标签,允许Docker自动拉取最新的补丁版本
ARG BASE_IMAGE=python:3.12-slim
FROM ${BASE_IMAGE}
## 可以构建不同基础镜像的版本
## docker build --build-arg BASE_IMAGE=python:3.14-alpine .
## docker build --build-arg BASE_IMAGE=python:3-slim .
...
```
+2
View File
@@ -120,6 +120,7 @@ VOLUME /data
#### 数据库持久化
```docker
# 建议使用 postgres:16 或 postgres:latest,具体版本号根据数据库兼容性需求选择
FROM postgres:16
VOLUME /var/lib/postgresql/data
```
@@ -173,6 +174,7 @@ $ docker inspect mycontainer --format '{{json .Mounts}}' | jq
```yaml
services:
db:
# 建议使用 postgres:16 或其他具体版本,避免 latest
image: postgres:16
volumes:
# 命名卷(推荐)
+12 -1
View File
@@ -72,6 +72,17 @@ docker build [选项] <上下文路径/URL/->
例如 Dockerfile 所在目录执行
```bash
docker build -t my-image:v1 .
docker build -t my-image:1.0 .
```
### 关于版本号最佳实践
本章中的 Dockerfile 示例使用的基础镜像标签遵循以下原则
- **通用标签** `ubuntu:24.04``alpine``nginx`保持原样无需修改
- **基础镜像版本号** `node:20``python:3.12`使用主或次版本号而非完整版本号patch这样可以自动获取最新的补丁版本确保获得安全更新
- **避免**不建议使用 `latest` 标签和完整的 patch 版本号 `20.10.0`作为基础镜像因为这会导致构建的不可重现性或安全风险
读者在使用这些示例时应根据实际生产环境需求选择合适的版本号
更多关于 `docker build` 的用法我们在实战中会结合具体指令进行演示