Docker 简介
Docker 是一个开源的容器化平台,允许开发者将应用及其依赖打包到一个轻量级、可移植的容器中,实现 "一次构建,到处运行"。与传统虚拟机相比,容器共享宿主操作系统内核,启动快、资源占用低,特别适合微服务、持续集成/持续部署(CI/CD)等场景。
Docker CE(Community Edition)是 Docker 的社区免费版本,适合个人开发者、小型团队学习和生产使用。本文将基于 CentOS 7/8 系统,带你一步步完成 Docker CE 的安装,并使用阿里云镜像源与公共镜像加速器解决国内网络问题。
核心概念
- 镜像(Image):一个只读的模板,包含运行应用所需的文件系统、依赖和配置。镜像采用分层结构,每一层代表一次变更,支持复用和增量更新。
- 容器(Container):镜像的运行实例,是一个轻量级、隔离的执行环境。容器拥有独立的进程空间、网络接口和文件系统,可快速启停。
- Dockerfile :用于构建镜像的文本文件,通过一系列指令(
FROM、RUN、COPY等)定义镜像的构建步骤。 - Registry(仓库) :存放和管理镜像的服务,如 Docker Hub、阿里云容器镜像服务等。用户可通过
pull/push操作获取或分发镜像。 - Docker Daemon(dockerd):运行在宿主机的守护进程,负责管理容器、镜像、网络和数据卷。
- Docker Client(docker CLI):用户与 Docker Daemon 交互的命令行工具,通过 API 发送指令。
Docker 安装
1) 使用 yum 安装 (Installation via yum)
1. 卸载旧版本 Docker(如有)
bash
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2. 安装必要依赖 (Install Required Dependencies)
bash
yum install -y yum-utils device-mapper-persistent-data lvm2
3. 添加阿里云 Docker CE 源(关键修改点)
⚠️ 将文档中的官方地址替换为阿里云镜像地址,解决网络连接问题:
bash
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
4. 验证源是否可用 (Verifying Repository Availability)
bash
yum repolist
✅ 正常输出中 docker-ce-stable 的状态应显示具体包数量(如 600+),
而非 0。
5. 查看可安装的 Docker 版本 (View Installable Docker Versions)
bash
yum list | grep docker-ce
✅ 该命令会列出所有可用的 Docker CE 版本,您可以根据需要选择特定版本安装(如 docker-ce-20.10.0)。
6. 安装 Docker CE (Install Docker CE)
bash
yum -y install docker-ce
7. 启动 Docker 并设置开机自启 (Start Docker and Enable Auto-start)
bash
systemctl start docker
systemctl enable docker
8. 验证安装结果 (Verifying Installation)
bash
docker version
docker --version
✅ 若同时显示 Client 和 Server 版本信息,则安装成功。
9. 添加加速器(建议使用方法 2)
方式 1:使用阿里云镜像加速器
注册阿里云 → 搜索容器镜像服务 → 右侧菜单栏选择镜像工具 → 通过阿里云操作文档进行操作。
bash
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://<你的专属ID>.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
注意: 阿里云加速器为个人免费专属,存在以下硬性限制:
- 它对 "阿里云产品 + 公网访问" 组合生效,仅加速特定范围内的镜像。适合阿里云 ECS 环境,内网/同地域速度最优。
- 若你使用的是本地虚拟机、自建机房或其他云环境(如主机名显示为
localhost,且上一步连接官方源被建议更换为阿里云源),该地址可能不生效或加速效果有限,尤其是在拉取 Docker Hub 上的公共镜像时。 - 阿里云官方公告说明:因运营商网络问题,拉取 Docker Hub 镜像仍可能变慢。
方式 2:使用公共镜像加速器(建议使用)
bash
cat > /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://hub.rat.dev",
"https://docker.1ms.run",
"https://docker.1panel.live",
"https://docker.hpcloud.cloud",
"https://docker.nju.edu.cn"
]
}
EOF
校验 + 重载 + 重启 + 确认:
bash
python -m json.tool /etc/docker/daemon.json >/dev/null && echo "JSON OK" || echo "JSON 错,查逗号/引号"
systemctl daemon-reload
systemctl restart docker
docker info | grep -A 8 "Registry Mirrors"
验证: 拉取测试镜像,确认加速器生效。
bash
docker pull nginx:alpine
docker images | grep nginx
2) 使用第三方工具安装
由于网络限制,可借助第三方工具 "轩辕镜像" 实现一键安装 Docker(付费,但包含了一键安装及镜像加速器)。
轩辕镜像官方网站:https://www.xuanyuan.dev/
Docker 核心命令
核心命令,结合了企业级最佳实践进行了扩展,按照镜像管理、容器生命周期、运维排查、资源限制、网络存储、Dockerfile构建、Docker Compose编排等维度进行了分类。
1. 镜像管理 (Image Management)
镜像是容器的模板,企业级操作中强调版本锁定 和镜像瘦身。
| 命令 | 说明 | 扩展/最佳实践 |
|---|---|---|
docker pull <镜像名>:<标签> |
拉取镜像 | 必加标签 :严禁使用 latest,应指定版本如 nginx:1.27-alpine 以确保环境一致性。 |
docker images |
查看本地镜像列表 | 可配合 grep 过滤,如 `docker images |
docker rmi <镜像ID/名称> |
删除镜像 | 若有容器正在使用该镜像,需先删除容器或加 -f 强制删除。 |
docker tag <源镜像> <目标镜像> |
镜像打标 | 用于私有仓库推送,格式:IP:端口/项目/镜像:版本。 |
docker save -o <文件名.tar> <镜像> |
镜像备份/迁移 | 将镜像保存为 tar 包,用于离线环境部署。 |
docker load -i <文件名.tar> |
镜像恢复/导入 | 从 tar 包加载镜像,保留所有层信息(推荐)。 |
docker image prune -a |
清理悬空镜像 | 删除未被任何容器引用的镜像,释放磁盘空间。 |
2. 容器生命周期管理 (Container Lifecycle)
管理容器的运行状态,核心在于守护式运行 和自动重启策略。
| 命令 | 说明 | 扩展/最佳实践 |
|---|---|---|
docker run [选项] <镜像> |
创建并启动容器 | 最核心命令,详见下方参数详解。 |
docker ps |
查看运行中的容器 | 加 -a 查看所有(含已停止);加 -q 仅显示容器ID。 |
docker stop <容器名/ID> |
停止容器 | 发送 SIGTERM 信号,允许优雅退出。 |
docker start <容器名/ID> |
启动已停止的容器 | 用于重启非运行状态的容器。 |
docker restart <容器名/ID> |
重启容器 | 相当于 stop + start。 |
docker rm <容器名/ID> |
删除容器 | 加 -f 可强制删除运行中的容器;加 -v 同时删除关联卷。 |
docker container prune |
批量清理 | 一键删除所有已停止的容器,运维常用。 |
docker run 核心参数扩展:
-d: 后台运行(生产环境必加)。--name: 指定容器名称,方便记忆。-p <宿主机端口>:<容器端口>: 端口映射。-v <宿主机目录>:<容器目录>: 数据卷挂载(持久化)。--restart=always: 企业级必配,保证容器随 Docker 服务自启或异常退出后自动重启。-e KEY=VALUE: 设置环境变量。--network: 指定网络模式。
3. 运维排查与日志 (Ops & Troubleshooting)
当服务出现问题时,快速定位是运维的基本功。
| 命令 | 说明 | 扩展/最佳实践 |
|---|---|---|
docker logs <容器名> |
查看日志 | 加 -f 实时跟踪(类似 tail -f);加 --tail 100 只看最后100行。 |
docker exec -it <容器名> <命令> |
进入容器/执行命令 | 生产推荐 :在运行容器中开启新进程。如 docker exec -it nginx sh。 |
docker attach <容器名> |
连接主进程 | 慎用:退出时可能导致容器主进程退出(容器停止)。 |
docker inspect <容器名> |
查看详细信息 | 查看 IP、挂载点、配置详情。配合 grep 使用,如 grep IPAddress。 |
docker stats |
实时资源监控 | 查看所有容器的 CPU、内存、网络 I/O 实时占用。 |
docker top <容器名> |
查看进程 | 查看容器内部运行的具体进程列表。 |
docker cp <容器:路径> <宿主机:路径> |
文件拷贝 | 在容器和宿主机之间复制文件,用于紧急修复配置。 |
4. 资源限制与管理 (Resource Management)
防止某个容器耗尽宿主机资源,导致"邻居干扰"。
| 命令 | 说明 | 扩展/最佳实践 |
|---|---|---|
docker update |
动态更新配置 | 可动态修改运行中容器的重启策略或资源限制。 |
--memory 或 -m |
内存限制 | 如 -m 512m。防止内存泄漏吃光宿主机内存。 |
--cpuset-cpus |
CPU 核绑定 | 如 0,1,限制容器只能使用特定的 CPU 核心。 |
--cpu-shares |
CPU 权重 | 默认 1024。仅在 CPU 争抢时生效,按比例分配时间片。 |
--device-read-bps |
磁盘读限速 | 限制设备读取速度,如 /dev/sda:1mb。 |
--device-write-bps |
磁盘写限速 | 限制设备写入速度,防止 I/O 阻塞。 |
5. 网络与存储 (Network & Storage)
解决容器间通信和数据持久化问题。
| 命令 | 说明 | 扩展/最佳实践 |
|---|---|---|
docker network create <网络名> |
创建自定义网络 | 推荐创建 bridge 网络,实现容器间通过名称互访。 |
docker network ls |
查看网络列表 | 查看 bridge, host, none 等模式。 |
docker network inspect <网络名> |
查看网络详情 | 查看网段、连接的容器等信息。 |
docker volume create <卷名> |
创建数据卷 | 管理 Docker 管理的卷,比直接挂载目录更易于备份迁移。 |
docker volume ls |
查看数据卷列表 | |
docker volume prune |
清理无用卷 | 删除未被容器使用的卷。 |
6. Dockerfile 构建 (Image Building)
文档中详细列出了 Dockerfile 的关键字,这是构建自定义镜像的基础。
核心指令速查:
FROM: 指定基础镜像(必须是第一行,推荐 Alpine 或 Slim 版)。LABEL: 维护者信息(替代已废弃的 MAINTAINER)。COPY/ADD: 复制文件。推荐用COPY,ADD仅在需要自动解压 tar 包或下载 URL 时使用。RUN: 构建时执行命令。建议合并多条命令(用&&)以减少镜像层数。WORKDIR: 指定工作目录。EXPOSE: 声明端口(文档说明,不自动映射)。ENV: 设置环境变量。ENTRYPOINT/CMD: 启动命令。ENTRYPOINT适合做主程序,CMD适合做默认参数。HEALTHCHECK: 企业级必加,配置健康检查,让编排工具感知容器状态。USER: 切换用户,避免使用 root 运行应用。
构建命令:
docker build -t <镜像名:版本> .: 构建镜像(注意点代表当前目录)。
7. Docker Compose 编排 (Orchestration)
用于定义和运行多容器应用(如 LNMP、Zabbix)。
| 命令 | 说明 | 扩展/最佳实践 |
|---|---|---|
docker-compose up -d |
启动所有服务 | 在 docker-compose.yml 所在目录执行,-d 表示后台运行。 |
docker-compose down |
停止并删除 | 停止容器并移除网络,加 -v 可同时删除卷。 |
docker-compose ps |
查看服务状态 | 查看编排文件中定义的所有容器状态。 |
docker-compose logs -f |
查看聚合日志 | 实时查看所有服务的日志输出。 |
docker-compose restart |
重启服务 | 重启编排文件中的所有容器。 |
docker-compose restart |
重启服务 | 重启编排文件中的所有容器。 |
8. 私有仓库与系统管理 (Registry & System)
- 私有仓库交互:
docker login <仓库地址>: 登录私有仓库。docker logout: 登出。- 配置信任 :修改
/etc/docker/daemon.json添加insecure-registries以支持 HTTP 私有仓库。
- 系统级命令:
docker info: 查看 Docker 系统详细信息(存储驱动、容器数量等)。docker version: 查看版本。systemctl restart docker: 修改 daemon.json 后必须重启服务生效。