Docker 容器化入门与实践:镜像、容器、编排

2026-03-03

Docker 是一种容器化(Containerization)技术:将应用与依赖打包为镜像(Image),在隔离的容器(Container)中运行,实现「一次构建,到处运行」。与虚拟机相比,容器共享宿主机内核、启动快、资源占用小。本文介绍 Docker 核心概念、常用命令、Dockerfile 编写与 Docker Compose 编排,帮助团队统一开发与生产环境。

一、Docker 为何重要:数据与优势

根据 Docker 官方与 CNCF 调研,容器化可显著提升部署效率与资源利用率。开发与生产环境一致,可减少「在我机器上能跑」类问题;镜像版本化便于回滚与审计。

维度传统虚拟机Docker 容器说明
启动时间分钟级秒级容器共享内核,无需启动完整 OS
资源占用每 VM 独立 OS共享宿主机内核同机可运行更多实例
镜像体积GB 级MB 级(Alpine 等)分层与精简基础镜像
可移植性依赖虚拟化层标准镜像格式任意支持 Docker 的环境均可运行

数据来源:Docker 官方文档、CNCF 调查报告(综合整理)。

二、Docker 核心概念

Docker 包含三大核心:镜像(Image)、容器(Container)、仓库(Registry)。

2.1 镜像(Image)

镜像是只读模板,由多层(Layer)组成,每层对应 Dockerfile 中的一条指令。镜像可来自 Dockerfile 构建,或从仓库拉取。同一镜像可创建多个容器实例。

2.2 容器(Container)

容器是镜像的运行实例,具有可写层,可创建、启动、停止、删除。容器之间相互隔离,拥有独立的文件系统、网络与进程空间。

2.3 仓库(Registry)

仓库用于存储与分发镜像。Docker Hub 是公共仓库;企业可自建私有仓库(如 Harbor)。

概念说明常用命令
镜像只读模板,含应用与依赖docker build, docker pull, docker images
容器镜像的运行实例,可读写docker run, docker start, docker ps
Volume持久化数据,挂载到容器docker volume create, -v 挂载
Network容器间通信、端口映射docker network create, -p 端口

三、Docker 常用命令详解

日常使用中,镜像与容器的生命周期命令最为常用。

3.1 镜像相关

docker pull <image>:从仓库拉取镜像。docker build -t <name>:<tag> .:根据当前目录 Dockerfile 构建镜像,-t 指定名称与标签。docker images:列出本地镜像。

3.2 容器相关

docker run -d -p 8080:80 --name myapp <image>:-d 后台运行,-p 将容器 80 映射到宿主机 8080,--name 指定容器名。docker ps 查看运行中容器,docker ps -a 含已停止。docker stop/start/restart <container>:停止/启动/重启。docker rm <container>:删除容器(需先停止)。docker logs -f <container>:查看日志,-f 持续输出。

类型命令说明
镜像docker pull <image>拉取镜像
镜像docker build -t <name> .构建镜像
容器docker run -d -p 8080:80 <image>后台运行并映射端口
容器docker ps / docker ps -a查看运行/全部容器
容器docker stop/start/rm <container>停止/启动/删除
日志docker logs -f <container>查看日志

四、Dockerfile 与多阶段构建

Dockerfile 定义镜像构建步骤,每条指令生成一层。多阶段构建(Multi-stage build)可在前几阶段编译、打包,最终阶段只复制产物,显著减小镜像体积。

4.1 常用指令

FROM:基础镜像。RUN:执行命令。COPY/ADD:复制文件。WORKDIR:工作目录。ENV:环境变量。EXPOSE:声明端口。CMD/ENTRYPOINT:容器启动时执行的命令。

4.2 多阶段构建示例

# 阶段一:构建
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

# 阶段二:仅保留运行时所需
FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY package*.json ./
EXPOSE 3000
CMD ["node", "dist/index.js"]

最终镜像不包含源码与 devDependencies,体积更小、更安全。

五、Docker Compose 编排

Docker Compose 通过 YAML 定义多容器应用,可一键启动、停止、扩缩。适用于本地开发与单机多服务部署。

指令说明示例
versionCompose 文件版本"3.8"
services服务定义app, db, redis
build构建镜像build: .
ports端口映射"8080:80"
volumes卷挂载./data:/var/lib/mysql
depends_on依赖关系app 依赖 db
environment环境变量KEY=value

运行:docker-compose up -d 后台启动,docker-compose down 停止并删除容器。

六、选型与落地要素权重

基于实际项目经验,容器化落地时以下要素的影响程度(相对权重,满分 100):

镜像分层与体积
88%
数据持久化与卷
85%
网络与端口
82%
与 CI/CD 集成
80%

说明:权重基于容器化项目实践归纳,仅供参考。

七、小结

Docker 通过镜像与容器实现可移植、可复现的部署。落地时从 Dockerfile、多阶段构建与 Compose 入手,结合 CI/CD 自动化构建与发布。若需 Kubernetes 等编排,可参考本站《云原生应用实践》;若需自动化流水线,可阅读《CI/CD 与持续交付实践》。