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)、访问控制、镜像同步。 |
3.2 Docker 安装与验证
Docker 支持主流操作系统(Linux、macOS、Windows)。以下以 Ubuntu 22.04 LTS 为例展示标准安装步骤,其他发行版或平台可参考官方文档。
3.2.1 安装步骤(Ubuntu)
- 卸载旧版本(如有):
sudo apt-get remove docker docker-engine docker.io containerd runc - 设置仓库:安装依赖并添加 Docker 官方 GPG 密钥和 APT 源。
- 安装 Docker Engine:
sudo apt-get update && sudo apt-get install docker-ce docker-ce-cli containerd.io - 启动并设置开机自启:
sudo systemctl enable docker --now - 将当前用户加入 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
3.5 本章小结
- 镜像、容器、仓库 构成 Docker 的三角基石,理解其关系是后续所有操作的前提。
- 安装后务必通过
docker version、docker info和docker run hello-world完成验证。 - 常用命令按 镜像管理、容器生命周期、网络与数据卷 分类记忆,重点掌握
docker run的端口映射参数(-p)。 - Dockerfile 的 分层构建 特性要求我们将不常变化的指令(如
FROM、RUN)放在前面,以最大化缓存命中率。