Docker 容器技术快速入门与实战指南

举报
yd_262041091 发表于 2026/10/21 12:23:09 2026/10/21
【摘要】 Docker 容器技术快速入门与实战指南 1. 容器化架构与核心概念传统虚拟机(VM)需要在宿主操作系统之上通过 Hypervisor 模拟完整的硬件层与客户机操作系统(Guest OS),存在启动慢、体积大、资源占用高的问题。Docker 容器引擎直接共享宿主机 Linux 内核(基于 Namespace 实现进程与网络隔离,基于 Cgroups 实现计算资源限制),将应用程序及其全部依...

Docker 容器技术快速入门与实战指南

1. 容器化架构与核心概念

传统虚拟机(VM)需要在宿主操作系统之上通过 Hypervisor 模拟完整的硬件层与客户机操作系统(Guest OS),存在启动慢、体积大、资源占用高的问题。Docker 容器引擎直接共享宿主机 Linux 内核(基于 Namespace 实现进程与网络隔离,基于 Cgroups 实现计算资源限制),将应用程序及其全部依赖库打包为轻量、标准化的容器单元,实现秒级启动与“一次构建,随处运行”。

四大核心组件关系

  • 镜像(Image):只读的容器模板,采用分层联合文件系统(UnionFS)构建,包含运行应用所需的代码、运行时、库、环境变量与配置文件。
  • 容器(Container):镜像的可运行实例。在只读镜像层之上叠加一层可读写层(Container Layer),支持独立启动、停止、移动和销毁。
  • 仓库(Registry):集中存放和分发镜像的服务平台(如 Docker 官方镜像仓库或华为云 SWR 容器镜像服务),支持通过 docker pull 拉取或 docker push 推送镜像。
  • 守护进程(Docker Daemon / dockerd):运行在宿主机后台的服务进程,负责监听 Docker CLI 请求并调度管理底层的镜像、容器、数据卷(Volumes)与网络。

2. Linux / openEuler 环境部署与镜像加速配置

在企业级 Linux 环境(如 openEuler 22.03 LTS 或 CentOS)中,可通过预编译二进制包快速部署 Docker Engine,并配置国内镜像加速器以提升镜像拉取速度。

步骤一:二进制包解压与 Systemd 服务注册

下载并解压 Docker 二进制归档包,将可执行文件移入 /usr/bin,并编写 /usr/lib/systemd/system/docker.service 守护进程配置文件:

wget https://edu-res.hc-cdn.cn/sharedata/hdinnovation/sandbox/2417/docker-18.09.9.tgz
tar zxf docker-18.09.9.tgz
mv docker/* /usr/bin

cat >/usr/lib/systemd/system/docker.service <<'EOF'
[Unit]
Description=Docker Application Container Engine
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl start docker
systemctl enable docker
docker version

步骤二:配置 /etc/docker/daemon.json 镜像加速器

写入华为云 SWR 镜像加速地址并重启 Docker 服务使其立即生效:

mkdir -p /etc/docker
cat >/etc/docker/daemon.json <<'EOF'
{
  "registry-mirrors": [
    "https://0cf850bb9480f3170f2dc01234ec1ca0.mirror.swr.myhuaweicloud.com"
  ]
}
EOF
systemctl restart docker

3. 高频镜像与容器生命周期命令速查

熟练掌握镜像拉取、离线归档导入导出以及容器启动管理命令,可覆盖日常开发调试与服务部署的核心场景。

运维场景 标准命令语法 核心作用与高频参数说明
拉取远程镜像 docker pull <镜像名>:<标签> 从镜像仓库下载指定版本镜像(省略标签时默认拉取 :latest)。
查看本地镜像 docker images 列出本地已缓存镜像的仓库名、标签、镜像 ID、创建时间与体积。
离线加载镜像 docker load -i <归档包.tar> 从本地 .tar 归档文件导入恢复镜像(对应导出命令为 docker save -o)。
删除本地镜像 docker rmi -f <镜像名或ID> 删除本地镜像;添加 -f 参数可强制删除存在多个标签引用冲突的镜像。
后台启动容器 docker run -itd -p 80:80 --name <名> <镜像> 创建并运行容器:-d 后台运行,-it 分配交互伪终端,-p 宿主机端口:容器端口。
挂载持久化目录 docker run -v /宿主机目录:/容器目录 ... 将宿主机绝对路径挂载至容器内(或使用命名数据卷),防止容器销毁导致数据丢失。
查看容器状态 docker ps -a 查看所有运行中(Up)及已退出(Exited)的容器;省略 -a 仅显示运行中容器。
进入运行中容器 docker exec -it <容器名或ID> /bin/bash 在运行中的容器内开启交互式 Shell 排查问题,输入 exit 退出时不会停止容器。
查看容器日志 docker logs -f --tail 100 <容器名> 实时追踪容器标准输出日志(-f 持续跟随输出,--tail 指定显示末尾行数)。
启停与销毁容器 docker start / stop / rm -f <容器名> 启动已停止容器、优雅停止运行中容器,或使用 rm -f 强制销毁容器。

典型实战:部署带目录挂载与端口映射的 Apache (httpd) 容器

以下命令拉取官方 httpd 镜像,导入并清理离线 centos.tar 镜像包,随后将宿主机 80 端口映射至容器 80 端口,并将宿主机 /data/ 目录挂载到容器的 /var/www/httpd/ 路径:

# 1. 在线拉取 httpd 镜像
docker pull httpd

# 2. 离线导入与强制删除镜像练习
wget https://edu-res.hc-cdn.cn/sharedata/hdinnovation/sandbox/1911/centos.tar
docker load -i centos.tar
docker images
docker rmi -f centos

# 3. 启动带端口映射和目录挂载的 httpd 容器
docker run --privileged -it -d -p 80:80 --name datahttpd -v /data/:/var/www/httpd/ httpd
docker ps -a

4. Dockerfile 声明式构建与工程化交付

当标准基础镜像无法满足业务需求时,可通过编写 Dockerfile 将应用代码、运行时与环境配置固化为自定义镜像,并结合 Docker Compose 统一编排多容器应用。

Dockerfile 核心指令速查表

指令名称 语法示例 功能说明与构建规范
FROM FROM python:3.11-slim 指定基础镜像,必须作为 Dockerfile 的第一条非注释指令(ARG 除外)。
WORKDIR WORKDIR /app 设置后续 RUN、CMD、ENTRYPOINT、COPY 的工作目录(不存在时自动创建)。
COPY / ADD COPY . /app 将构建上下文中的本地文件复制到镜像内;普通文件复制优先使用透明可控的 COPY。
RUN RUN apt-get update && apt-get install -y curl 在镜像构建阶段执行命令并提交为新镜像层;合并多条命令可有效减少镜像层数。
ENV ENV APP_ENV=production 设置环境变量,在镜像构建阶段及容器启动运行时均持续生效。
EXPOSE EXPOSE 80 声明容器在运行时监听的网络端口(仅起文档声明作用,仍需通过 -p 映射宿主机端口)。
ENTRYPOINT / CMD CMD ["httpd-foreground"] 指定容器启动时默认执行的进程命令;推荐使用 JSON 数组(Exec 格式)以正确接收信号。

编写标准 Dockerfile 并构建自定义镜像

在项目目录下创建 Dockerfile,通过标准指令定义镜像构建层,并调用 docker build 完成构建(注意命令末尾的 . 代表当前上下文路径):

# Dockerfile 示例:基于 httpd 定制静态站点镜像
FROM httpd:latest
WORKDIR /usr/local/apache2/htdocs/
COPY index.html ./index.html
EXPOSE 80

执行构建并启动自定义容器:

echo "<h1>Hello Docker Container!</h1>" > index.html
docker build -t my-web:v1.0 .
docker run -d -p 8080:80 --name custom-web my-web:v1.0

生产环境四大核心实践准则

  1. 精简镜像层数与体积:优先选用 alpine 或 slim 基础镜像,添加 .dockerignore 排除无关文件,并使用多阶段构建(Multi-stage builds)分离编译环境与运行环境。
  2. 状态与计算分离:容器本身应保持无状态(Stateless);数据库文件、上传附件及业务日志必须通过 -v 目录挂载或 Docker Volumes 独立持久化存储。
  3. 最小权限与高可用自愈:生产环境避免滥用 --privileged 特权模式,并通过 --restart=unless-stopped 配置容器异常退出后自动拉起。
  4. 使用 Docker Compose 编排多服务:针对包含前端、后端与数据库的多容器项目,使用 compose.yaml 统一定义服务网络与数据卷,通过 docker compose up -d 一键启停完整应用栈。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。