# Docker 容器化技术标准操作指南 ##
2026/7/22 11:27:19 网站建设 项目流程

Docker 容器化技术标准操作指南

目的

Docker 是一款基于 Go 语言的开源容器化技术,实现了“一次镜像,处处运行”的愿景。本指南旨在帮助读者系统掌握 Docker 的核心原理、常用命令、镜像构建(Dockerfile)及镜像仓库管理,实现应用的全生命周期容器化管理。

核心思路

  1. 理解原理再动手—— 掌握 Namespace、Cgroups、UnionFS 三大基石,才能更好地理解容器行为。
  2. 镜像分层,缓存复用—— Dockerfile 的每条指令生成一个只读层,合理编排指令顺序可最大化利用构建缓存。
  3. 一次构建,到处运行—— 镜像标准化确保开发、测试、生产环境一致性。
  4. 安全与效率并重—— 选择最小基础镜像、使用多阶段构建、定期更新镜像。

一、Docker 原理与架构

1.1 什么是容器化

容器化是操作系统级虚拟化的实现方式,通过内核命名空间(Namespace)和控制组(Cgroup)技术,将应用及其依赖环境封装为独立进程。

容器 vs 虚拟机:

对比维度容器虚拟机
启动速度秒级分钟级
镜像大小MB 级GB 级
资源开销低(共享内核)高(完整 OS)
隔离级别进程级隔离硬件级隔离

容器共享主机系统的内核,每个隔离的工作负载都不需要整个操作系统实例,因此资源效率更高。

1.2 Docker 核心架构

Docker 采用C/S(客户端-服务器)架构

┌─────────────────┐ ┌─────────────────────────────────────┐ │ Docker Client │ ───► │ Docker Daemon │ │ (docker CLI) │ │ (后台守护进程,处理构建/运行/分发) │ └─────────────────┘ └─────────────────────────────────────┘ │ ▼ ┌─────────────────────┐ │ Images Registry │ │ (Docker Hub / 私有) │ └─────────────────────┘
  • Docker Daemon:后台服务进程,负责镜像构建、容器管理和网络配置。
  • Docker Client:命令行工具,通过 REST API 与守护进程通信。
  • Images Registry:镜像仓库,存储和分发镜像。

1.3 三大底层核心技术

Docker 底层的核心技术包括Linux 命名空间(Namespaces)、控制组(Cgroups)和 Union 文件系统(UnionFS)

1.3.1 Namespace(命名空间)—— 实现隔离

命名空间保证容器之间彼此互不影响,每个容器都有自己独立的命名空间:

命名空间类型作用
pid隔离进程 ID,不同命名空间可有相同 PID
net隔离网络设备、IP 地址、路由表
ipc隔离进程间通信资源(信号量、消息队列等)
mnt隔离文件系统挂载点,类似 chroot
uts隔离主机名和域名
user隔离用户和组 ID
1.3.2 Cgroups(控制组)—— 实现资源限制

Cgroups 用于限制和分配容器的资源使用(CPU、内存、磁盘 IO 等),防止某个容器耗尽宿主机资源。

1.3.3 UnionFS(联合文件系统)—— 实现分层存储

镜像采用分层存储设计,每条指令(如RUNCOPY)生成一个只读层,最终通过 UnionFS 组合成完整文件系统。这种设计使得:

  • 多个镜像可共享相同的基础层,节省磁盘空间
  • 构建时可复用未变更的缓存层,加速构建

二、Docker 安装

2.1 通过官方脚本安装(推荐)

curl-fsSLhttps://get.docker.com|shsudosystemctlenabledockersudosystemctl startdocker

2.2 验证安装

docker--versiondockerinfo

三、Docker 常用命令

Docker 命令虽多,但日常高频使用的只有十几条。以下按功能场景分类整理。

3.1 镜像管理(Images)

命令说明示例
docker images/docker image ls查看本地镜像列表docker images
docker pull <镜像名>[:标签]从仓库拉取镜像docker pull nginx:1.25
docker build -t <镜像名>:<标签> <路径>构建镜像docker build -t myapp:v1 .
docker rmi <镜像ID或名称>删除镜像docker rmi nginx:1.25
docker tag <源镜像> <目标镜像>给镜像打标签docker tag myapp:v1 myregistry/myapp:v1

3.2 容器生命周期(Container)

命令说明示例
docker run [选项] <镜像>创建并启动容器docker run -d -p 8080:80 --name web nginx
docker ps查看运行中的容器docker ps -a(含已停止)
docker stop <容器>停止容器docker stop web
docker start <容器>启动已停止的容器docker start web
docker restart <容器>重启容器docker restart web
docker rm <容器>删除容器docker rm -f web(强制删除)
docker logs <容器>查看容器日志docker logs -f --tail 200 web
docker exec -it <容器> <命令>进入容器内部docker exec -it web /bin/bash
docker inspect <容器>查看容器详细信息docker inspect web
docker cp <源> <目标>宿主机与容器间拷贝文件docker cp test.txt web:/app/

docker run常用参数详解:

参数说明
-d后台运行(Detached),否则日志会霸占终端
-p 宿主机端口:容器端口端口映射,如-p 8080:80
-v 宿主机路径:容器路径挂载数据卷,防止容器删除后数据丢失
--name <容器名>给容器起名,便于管理
--restart=always容器退出后自动重启
-e KEY=value设置环境变量
--network=<网络>指定容器网络模式

3.3 网络管理(Network)

命令说明
docker network ls列出所有网络
docker network create <网络名>创建自定义网络
docker network connect <网络> <容器>将容器连接到网络
docker network disconnect <网络> <容器>将容器从网络断开

3.4 数据卷管理(Volume)

命令说明
docker volume ls列出所有卷
docker volume create <卷名>创建卷
docker volume rm <卷名>删除卷

3.5 清理维护(Cleanup)

# 一键清理所有未使用的资源(容器、网络、镜像、构建缓存)dockersystem prune# 只清理悬空镜像(<none> 标签的镜像)dockerimage prune# 查看 Docker 磁盘使用情况dockersystemdf

四、Dockerfile 镜像构建

Dockerfile 是一个文本文件,包含用户在命令行中构建镜像时可能调用的所有命令。

4.1 Dockerfile 核心指令

Dockerfile 支持以下核心指令:

指令说明示例
FROM必须,指定基础镜像FROM ubuntu:22.04
RUN执行构建命令并生成新层RUN apt-get update && apt-get install -y nginx
COPY复制文件/目录到镜像(仅本地)COPY . /app
ADD类似 COPY,支持 URL 和 tar 自动解压ADD app.tar.gz /app/
ENV设置环境变量(运行时持久存在)ENV NODE_ENV=production
ARG定义构建时变量(仅构建阶段有效)ARG VERSION=1.0
WORKDIR设置工作目录WORKDIR /app
EXPOSE声明容器监听端口(文档说明)EXPOSE 80
CMD指定容器启动默认命令(可被覆盖)CMD ["nginx", "-g", "daemon off;"]
ENTRYPOINT指定容器启动固定入口(不可被覆盖)ENTRYPOINT ["nginx"]
VOLUME创建挂载点VOLUME /data
USER设置运行用户USER nginx
LABEL添加元数据LABEL maintainer="dev@example.com"
HEALTHCHECK检查容器健康状态`HEALTHCHECK CMD curl -f http://localhost/

4.2 指令执行顺序与缓存机制

Docker 按顺序执行 Dockerfile 中的指令。每条指令生成一个独立的镜像层,Docker 会检查指令是否与缓存匹配,若指令或依赖文件未变更,则复用缓存层。

缓存失效的关键规则COPYADD后的文件变更会导致后续所有指令的缓存失效。

优化策略:将高频变更的指令(如代码复制)放在 Dockerfile末尾,减少缓存重建范围。

4.3 实战示例:构建一个 Nginx 应用镜像

# 1. 指定基础镜像 FROM nginx:1.25-alpine # 2. 设置维护者标签 LABEL maintainer="dev@example.com" # 3. 设置工作目录 WORKDIR /usr/share/nginx/html # 4. 复制静态文件(放在后面,利用缓存) COPY ./html /usr/share/nginx/html # 5. 复制自定义配置 COPY nginx.conf /etc/nginx/nginx.conf # 6. 声明端口 EXPOSE 80 # 7. 启动命令(使用默认 CMD) CMD ["nginx", "-g", "daemon off;"]

构建命令

dockerbuild-tmy-nginx:v1.

4.4 ARG 与 ENV 的深度解析

ARGENV是 Dockerfile 中最容易混淆的两个指令,它们在作用阶段生命周期上有本质区别。

特性ARGENV
作用阶段仅构建时(docker build构建时 + 运行时
是否持久化到镜像否(除非显式传递)
能否被覆盖可通过--build-arg覆盖可通过docker run -e覆盖
典型用途指定版本号、编译选项等构建参数配置应用运行环境
ARG 使用示例
# 定义构建参数(可设置默认值) ARG NODE_VERSION="20" ARG ALPINE_VERSION="3.21" # 在 FROM 中使用构建参数 FROM node:${NODE_VERSION}-alpine${ALPINE_VERSION} AS base WORKDIR /src COPY package*.json ./ RUN npm ci

构建时传参

dockerbuild --build-argNODE_VERSION=22--build-argALPINE_VERSION=3.19-tmyapp:v1.
ENV 使用示例
# 设置运行时环境变量(持久存在于镜像中) ENV NODE_ENV=production \ PORT=3000 CMD ["node", "app.js"]

运行时覆盖

dockerrun-eNODE_ENV=development-ePORT=8080myapp:v1
ARG 与 ENV 的协作模式

常通过ARG接收外部输入,再赋值给ENV,实现灵活且持久的配置管理:

ARG DB_HOST=localhost ARG DB_PORT=5432 ENV DATABASE_URL=postgresql://$DB_HOST:$DB_PORT/mydb

⚠️ 安全警告:构建参数和环境变量不适合传递密码等敏感信息,因为它们会在镜像元数据中暴露。应使用 Docker 的secret 挂载SSH 挂载功能。

4.5 多阶段构建(Multi-stage Builds)

多阶段构建通过多个FROM指令将构建过程拆分为多个阶段,最终仅复制所需文件到最终镜像,显著减小镜像体积

# ========== 第一阶段:构建阶段 ========== FROM golang:1.21 AS builder WORKDIR /app COPY . . RUN go build -o myapp # ========== 第二阶段:运行阶段 ========== FROM alpine:3.18 WORKDIR /app COPY --from=builder /app/myapp . CMD ["./myapp"]

最终镜像仅包含编译好的二进制文件 + Alpine 基础镜像,不包含 Go 编译工具链。

4.6 Dockerfile 最佳实践

  1. 选择最小基础镜像:优先使用 Alpine、Slim 等轻量级官方镜像,缩小镜像体积并减少漏洞。
  2. 使用多阶段构建:分离构建环境和运行环境,减小最终镜像大小。
  3. 合并 RUN 指令:用&&连接多个命令,减少镜像层数。
  4. 优化指令顺序:将不易变更的指令放在前面,易变更的(如代码复制)放在后面,最大化缓存命中。
  5. 使用.dockerignore:排除无关文件(如node_modules.git),避免构建上下文过大。
  6. 指定镜像版本标签:避免使用latest,使用明确的版本号如nginx:1.25-alpine
  7. 定期重建镜像:使用--no-cache选项获取最新的安全补丁。

五、镜像仓库管理

5.1 镜像仓库概述

Docker 镜像是通过镜像仓库进行存储和分发的。镜像仓库分为两类:

类型说明典型代表
公有仓库公开访问,适合开源项目Docker Hub、阿里云容器镜像服务
私有仓库仅授权用户可访问,适合企业Harbor、Docker Registry

5.2 Docker Hub 基本操作

# 登录 Docker Hubdockerlogin# 给本地镜像打上仓库标签dockertag myapp:v1 username/myapp:v1# 推送到 Docker Hubdockerpush username/myapp:v1# 从 Docker Hub 拉取dockerpull username/myapp:v1# 登出dockerlogout

5.3 搭建私有镜像仓库:Harbor

Harbor 是由 VMware 开发并开源的企业级 Docker 镜像仓库,提供RBAC 权限管理、LDAP 集成、日志审核、镜像复制和漏洞扫描等高级功能。

环境要求
  • 操作系统:Linux(CentOS 7/8 或 Ubuntu 18.04/20.04)
  • 硬件:至少2 核 CPU、4GB 内存、20GB 磁盘空间
安装步骤

Step 1:安装 Docker 和 Docker Compose

# 安装 Dockercurl-fsSLhttps://get.docker.com|shsudosystemctlenabledockersudosystemctl startdocker# 安装 Docker Composesudocurl-L"https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname-s)-$(uname-m)"-o/usr/local/bin/docker-composesudochmod+x /usr/local/bin/docker-compose

Step 2:下载并解压 Harbor 安装包

# 从 GitHub Releases 下载最新版本wgethttps://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-offline-installer-v2.10.0.tgztarxvf harbor-offline-installer-v2.10.0.tgz-C/opt/cd/opt/harbor

Step 3:配置 harbor.yml

# 核心配置项hostname:registry.example.com# 访问域名或 IPhttp:port:80https:# 生产环境建议启用 HTTPSport:443certificate:/path/to/cert.pemprivate_key:/path/to/key.pemharbor_admin_password:Harbor12345# 管理员密码data_volume:/data/harbor# 镜像存储路径

Step 4:执行安装

./install.sh

Step 5:验证安装

docker-composeps# 所有服务状态应为 Up
使用 Harbor 私有仓库
# 1. 在 Docker 客户端配置信任(HTTP 仓库需配置 insecure-registries)# 编辑 /etc/docker/daemon.json{"insecure-registries":["registry.example.com"]}sudosystemctl restartdocker# 2. 登录私有仓库dockerlogin registry.example.com# 3. 给镜像打标签dockertag myapp:v1 registry.example.com/myproject/myapp:v1# 4. 推送镜像dockerpush registry.example.com/myproject/myapp:v1# 5. 拉取镜像dockerpull registry.example.com/myproject/myapp:v1

5.4 轻量级私有仓库:Docker Registry

若不需要 Harbor 的复杂功能,可使用官方轻量级 Registry:

# 启动 Registry 容器dockerrun-d-p5000:5000--nameregistry registry:2# 推送镜像dockertag myapp:v1 localhost:5000/myapp:v1dockerpush localhost:5000/myapp:v1# 拉取镜像dockerpull localhost:5000/myapp:v1

六、快速索引(备忘卡片)

场景命令
构建镜像docker build -t myapp:v1 .
运行容器docker run -d -p 8080:80 --name web nginx
查看运行中的容器docker ps
进入容器docker exec -it web /bin/bash
查看日志docker logs -f --tail 200 web
停止容器docker stop web
删除容器docker rm -f web
删除镜像docker rmi myapp:v1
推送到仓库docker push registry/myapp:v1
一键清理docker system prune
查看资源占用docker stats

文档版本:v1.0
适用环境:Docker Engine 20.10+,Linux / macOS / Windows
维护建议:定期更新基础镜像以获取安全补丁,使用.dockerignore控制构建上下文大小,生产环境务必使用私有镜像仓库并启用 HTTPS。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询