Docker 基础回顾:核心概念、安装验证与常用命令

在进入集成测试中的缓存服务端口映射与连通性验证之前,必须牢固掌握 Docker 的底层基石。本章将系统梳理 Docker 的三大核心概念(镜像、容器、仓库)、安装与验证流程、高频操作命令以及 Dockerfile 基础写法,为后续的端口映射实验和连通性测试打下坚实基础。

3.1 Docker 核心概念

Docker 的体系围绕三个核心抽象构建:镜像(Image)、容器(Container) 和 仓库(Registry)。理解三者之间的关系是使用 Docker 的第一步。

核心关系速记: 镜像 = 只读模板(类);容器 = 运行实例(对象);仓库 = 存储分发中心(Git 远程仓库)。
概念 定义 类比 关键特征
镜像(Image) 一个轻量级、独立的可执行软件包,包含运行某软件所需的所有内容(代码、运行时、库、环境变量、配置文件)。 面向对象中的 类;虚拟机模板(OVA/OVF)。 只读、分层构建(Union FS)、可复用。
容器(Container) 镜像的运行实例。它是在镜像层之上添加一个可写层,并利用 Namespace 和 Cgroups 实现资源隔离与限制。 面向对象中的 对象;虚拟机实例。 可写、轻量(共享宿主机内核)、秒级启动、可被删除/重建。
仓库(Registry) 集中存储和分发 Docker 镜像的服务。分为公共仓库(如 Docker Hub)和私有仓库(如 Harbor、Nexus)。 Git 远程仓库(GitHub/GitLab)。 支持版本标签(Tag)、访问控制、镜像同步。
Docker 三大核心概念关系图 镜像 (Image) 只读模板 / 分层构建 容器 (Container) 运行实例 / 可写层 仓库 (Registry) 存储 / 分发 / 标签 docker run docker push/pull 操作流程说明: 1. 从仓库拉取镜像(docker pull)到本地宿主机。 2. 基于镜像创建并运行容器(docker run),容器拥有独立文件系统与网络栈。 3. 修改容器后,可通过 docker commit 生成新镜像,再推送(docker push)回仓库。

3.2 Docker 安装与验证

Docker 支持主流操作系统(Linux、macOS、Windows)。以下以 Ubuntu 22.04 LTS 为例展示标准安装步骤,其他发行版或平台可参考官方文档。

3.2.1 安装步骤(Ubuntu)

  1. 卸载旧版本(如有):sudo apt-get remove docker docker-engine docker.io containerd runc
  2. 设置仓库:安装依赖并添加 Docker 官方 GPG 密钥和 APT 源。
  3. 安装 Docker Engine:sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io
  4. 启动并设置开机自启:sudo systemctl enable docker --now
  5. 将当前用户加入 docker 组(避免每次使用 sudo):sudo usermod -aG docker $USER,然后重新登录。

3.2.2 安装验证

执行以下命令验证 Docker 是否安装成功并能正常工作:

# 查看 Docker 版本信息(客户端 + 服务端)
docker version

# 查看更详细的系统信息(容器数、镜像数、存储驱动等)
docker info

# 运行一个测试容器,验证拉取镜像和运行容器的能力
docker run hello-world
验证要点: docker version 应同时显示 Client 和 Server 版本;docker info 中 Server Version 字段不能为空;docker run hello-world 应输出 "Hello from Docker!" 信息。

3.3 常用 Docker 命令

掌握以下高频命令,可以覆盖日常开发与测试中 90% 以上的操作场景。命令按功能分为镜像管理、容器生命周期、网络与数据卷三大类。

分类 命令 说明 常用示例
镜像管理 docker images 列出本地所有镜像 docker images | grep redis
docker pull 从仓库拉取镜像 docker pull redis:7-alpine
docker rmi 删除本地镜像 docker rmi redis:7-alpine
docker build 根据 Dockerfile 构建镜像 docker build -t myapp:v1 .
容器生命周期 docker run 创建并启动容器(最常用) docker run -d --name redis-cache -p 6379:6379 redis:7-alpine
docker ps 列出运行中的容器(-a 列出所有) docker ps -a --format "table {{.Names}}\t{{.Status}}"
docker stop/start/restart 停止/启动/重启容器 docker restart redis-cache
docker rm 删除容器(需先停止) docker rm -f redis-cache(强制删除)
docker logs 查看容器日志 docker logs -f --tail 100 redis-cache
网络与数据卷 docker network 管理容器网络(创建、连接、断开) docker network create test-net
docker volume 管理数据卷(创建、挂载、查看) docker volume create cache-data
常见陷阱: 使用 docker run 时若未指定 --rm 参数,容器退出后不会自动删除,长期积累会占用磁盘空间。建议在测试场景中始终添加 --rm 标志。

3.4 Dockerfile 基础

Dockerfile 是一个文本文件,包含一系列指令,用于自动化构建 Docker 镜像。掌握 Dockerfile 是自定义缓存服务镜像(如 Redis、Memcached 定制版)的前提。

3.4.1 核心指令速查表

指令 作用 示例
FROM 指定基础镜像(必须为第一条非注释指令) FROM alpine:3.18
LABEL 添加元数据(作者、版本、描述等) LABEL maintainer="devops@example.com"
RUN 在构建过程中执行命令(每一条 RUN 会新增一层) RUN apt-get update && apt-get install -y redis-server
COPY / ADD 将文件从构建上下文复制到镜像中 COPY ./redis.conf /etc/redis/redis.conf
EXPOSE 声明容器运行时监听的端口(仅作文档用途,不实际发布端口) EXPOSE 6379
CMD 提供容器启动时的默认命令(可被 docker run 参数覆盖) CMD ["redis-server", "/etc/redis/redis.conf"]
ENTRYPOINT 配置容器启动时的固定入口点(不易被覆盖) ENTRYPOINT ["redis-server"]

3.4.2 一个完整的 Dockerfile 示例

以下 Dockerfile 构建一个基于 Alpine 的 Redis 缓存服务镜像,并自定义配置文件:

# 使用 Alpine 作为基础镜像,体积更小
FROM alpine:3.18

# 维护者信息
LABEL maintainer="devops@example.com" \
      description="Custom Redis cache for integration testing"

# 安装 Redis 并清理缓存以减少镜像层大小
RUN apk add --no-cache redis

# 复制自定义配置文件(需与 Dockerfile 同目录)
COPY redis.conf /etc/redis/redis.conf

# 声明容器端口
EXPOSE 6379

# 设置容器启动命令
CMD ["redis-server", "/etc/redis/redis.conf"]
构建与运行:
docker build -t custom-redis:latest .
docker run -d --name my-cache -p 6379:6379 custom-redis:latest
Dockerfile 构建流程与分层结构 构建上下文 (Dockerfile + 文件) FROM alpine:3.18 RUN apk add redis COPY redis.conf CMD / ENTRYPOINT 最终镜像 custom-redis:latest 分层构建要点: • 每条指令生成一层 • 层可被缓存复用 • 变更顺序影响缓存命中 • 不常变指令放前面 • 常用 .dockerignore

3.5 本章小结

  • 镜像、容器、仓库 构成 Docker 的三角基石,理解其关系是后续所有操作的前提。
  • 安装后务必通过 docker version、docker info 和 docker run hello-world 完成验证。
  • 常用命令按 镜像管理、容器生命周期、网络与数据卷 分类记忆,重点掌握 docker run 的端口映射参数(-p)。
  • Dockerfile 的 分层构建 特性要求我们将不常变化的指令(如 FROM、RUN)放在前面,以最大化缓存命中率。