文章背景图

Docker 完整入门:安装、镜像、容器、网络、数据卷、Dockerfile 与私有仓库

2026-07-25
15
- 字
- 分钟

Docker Engine 通过 dockerd、containerd 和 runc 管理容器。镜像是分层的只读模板,容器是镜像的运行实例;容器隔离依赖 Linux namespaces、cgroups 和安全机制,不等同虚拟机。

安装

生产主机使用 Docker 官方仓库或受支持发行版包,阅读防火墙兼容说明。便利安装脚本只适合测试。安装后验证:


docker version

docker info

systemctl status docker

docker run --rm hello-world

加入 docker 组等同授予接近 root 的权限,应严格控制成员。优先评估 rootless 模式或通过受控平台操作。

常用命令


docker image ls

docker pull nginx:1.28

docker run -d --name web -p 8080:80 nginx:1.28

docker logs -f web

docker exec -it web sh

docker inspect web

docker stats

docker stop web && docker rm web

不要用 latest 发布生产;记录镜像摘要。删除和 prune 前检查范围,卷删除可能造成数据丢失。

网络与卷

用户自定义 bridge 网络提供容器 DNS。端口发布可能绕过部分 ufw/firewalld 规则,应检查 DOCKER-USER 链和实际公网暴露。


docker network create app-net

docker volume create app-data

docker run -d --network app-net -v app-data:/data IMAGE

数据放卷或外部存储,容器本身保持可替换。卷必须独立备份并恢复演练。

Dockerfile


# syntax=docker/dockerfile:1

FROM python:3.13-slim AS builder

WORKDIR /app

COPY requirements.txt .

RUN pip wheel --no-cache-dir --wheel-dir /wheels -r requirements.txt

FROM python:3.13-slim

RUN useradd --create-home app

WORKDIR /app

COPY --from=builder /wheels /wheels

COPY . .

RUN pip install --no-cache-dir /wheels/*

USER app

CMD ["python", "app.py"]

使用多阶段构建、可信最小基础镜像、.dockerignore、非 root 用户和 exec 形式 CMD。构建时不把 Secret COPY 进层;在 CI 扫描、生成 SBOM、签名并固定摘要。

私有仓库

测试可运行 CNCF Distribution Registry,生产必须配置 TLS、认证、持久存储、访问控制、扫描、保留和备份。不要长期配置 insecure-registry。


docker tag app:1.0 registry.example.com/team/app:1.0

docker login registry.example.com

docker push registry.example.com/team/app:1.0

凭证使用 credential helper,不写脚本。

排障

  1. docker info 与 daemon 日志。

  1. inspect 查看状态、退出码、挂载和网络。

  1. logs 与应用健康检查。

  1. 主机磁盘/inode、内存、iptables/nftables 与 DNS。

  1. 镜像架构、入口命令和文件权限。

容器退出是结果,不是根因。生产容器还要设置资源限制、只读文件系统、capability drop、seccomp、健康检查和集中日志。

参考:https://docs.docker.com/get-started/ 与 https://docs.docker.com/build/building/best-practices/

生产部署建议

  • 镜像使用明确版本并记录 digest,构建过程固定基础镜像和依赖版本。

  • 容器以非 root 用户运行,删除不必要 capabilities,启用只读根文件系统并限制资源。

  • 配置健康检查、优雅停止时间、日志轮转和重启策略,但避免用无限重启掩盖故障。

  • 状态数据放在受控卷或外部存储,并完成备份恢复演练。

docker run -d --name app   --read-only --cap-drop ALL   --memory 512m --cpus 1.0   --restart unless-stopped   --health-cmd 'wget -qO- http://127.0.0.1/health || exit 1'   registry.example.com/app:1.0.0

常见故障排查

docker ps -a
docker inspect <CONTAINER>
docker logs --since 30m <CONTAINER>
docker stats --no-stream
docker system df -v
docker network inspect <NETWORK>
journalctl -u docker --since "30 min ago"

容器退出先看 ExitCode、OOMKilled 和应用日志;网络问题对比容器 DNS、端口监听和宿主机防火墙;磁盘问题检查镜像层、容器日志和可写层。不要在未确认范围时执行全局 prune。

上线检查清单

  • □ 镜像来源、版本、摘要和漏洞扫描均可追溯

  • □ 非 root、资源限制、健康检查和优雅停止已配置

  • □ 网络暴露面、DOCKER-USER 链和 TLS 已核对

  • □ 数据卷有备份、恢复验证和容量告警

  • □ 日志轮转、监控、告警和回滚镜像已准备

总结

Docker 入门不只是记住 run 命令。理解镜像、进程、网络和存储边界,并把安全、资源、可观测性、数据保护和回滚放进发布流程,才能让容器真正适用于生产。

原创

Docker 完整入门:安装、镜像、容器、网络、数据卷、Dockerfile 与私有仓库

评论交流

文章目录