Docker 部署与基础命令详解:从安装到容器管理全流程指南

Docker 部署与基础命令详解:从安装到容器管理全流程指南

摘要:本文详细介绍了 Docker 的核心概念、在 CentOS 环境下的安装部署流程(含镜像加速配置),以及镜像和容器的常用管理命令。适合作为 Docker 入门及日常运维的速查手册。

1. 容器技术与 Docker 简介

1.1 核心概念

  • 容器 (Container):一种轻量级、可移植的虚拟化技术,将应用及其依赖打包在一起,实现"一次构建,到处运行"。
  • 内核技术 :容器依赖于 Linux 内核的 Namespace (资源隔离)和 Cgroups(资源限制)技术。
  • Docker:目前最主流的容器引擎,提供了标准化的容器运行时环境和丰富的生态工具。

2. Docker 安装与部署

2.1 卸载旧版 Docker

如果系统中存在旧版本 Docker,建议先彻底卸载以避免冲突:

bash 复制代码
yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine

2.2 环境准备与依赖安装

bash 复制代码
# 开启防火墙(根据实际安全策略决定)
systemctl enable --now firewalld.service

# 临时关闭 SELinux(避免权限问题)
setenforce 0

# 安装必要依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

2.3 配置仓库并安装 Docker

bash 复制代码
# 添加阿里云 Docker CE 仓库
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

# 安装 Docker CE、CLI 及 Containerd
yum install -y docker-ce docker-ce-cli containerd.io

# 启动并设置开机自启
systemctl enable --now docker.service

2.4 配置镜像加速器

由于网络原因,直接拉取 Docker Hub 镜像可能较慢,建议配置国内加速器。

方法一:使用阿里云专属加速器(推荐)

访问 阿里云容器镜像服务控制台 获取您的专属加速地址。

bash 复制代码
mkdir -p /etc/docker

tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://<您的专属ID>.mirror.aliyuncs.com"]
}
EOF

systemctl daemon-reload
systemctl restart docker
systemctl enable docker
方法二:使用公共加速源

⚠️ 注意:公共加速地址可能随时失效,建议优先使用方法一。

bash 复制代码
mkdir -p /etc/docker

cat > /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": [
    "https://docker.m.daocloud.io",
    "https://huecker.io",
    "https://dockerhub.timeweb.cloud",
    "https://noohub.ru"
  ]
}
EOF

systemctl daemon-reload
systemctl restart docker
systemctl enable docker

🐳 Docker 核心指令速查

一、镜像管理 (Image)

镜像是容器的基础,掌握镜像的高效管理是第一步。

1. 搜索与获取

  • 搜索镜像docker search [选项] <关键词>
    • --filter "is-official=true":仅过滤出官方提供的镜像。
    • --limit <数字>:限制搜索结果的数量。
  • 拉取镜像docker pull <镜像名[:标签]>
    • 若省略标签,默认拉取 latest 版本。
    • 支持从私有仓库拉取:docker pull registry.example.com/myapp:v1.0

2. 构建镜像

  • 基本构建docker build [选项] <上下文路径>
    • -t, --tag <名称:标签>:为构建出的镜像命名并打标签(可多次使用)。
    • -f, --file <文件路径>:指定非默认名称或路径的 Dockerfile。
    • --no-cache:完全忽略缓存,从头逐层构建(用于排查构建问题)。
    • --build-arg <变量名>=<值>:向 Dockerfile 中的 ARG 指令传递构建时变量。
    • --network host:构建时使用宿主机网络(解决构建时无法下载依赖的问题)。

3. 查看与管理

  • 查看本地镜像docker images [选项]
    • -a, --all:显示所有中间层镜像(包括悬空镜像)。
    • -q, --quiet:仅输出镜像 ID,常用于批量操作组合。
    • --format:自定义输出格式。
  • 删除镜像docker rmi [选项] <镜像ID或名称:标签>
    • -f, --force:强制删除(即使有容器依赖该镜像也会尝试删除)。
    • --no-prune:不删除未标记的父镜像。
  • 清理未使用镜像docker image prune [选项]
    • -a:删除所有未被任何容器引用的镜像(不仅是悬空镜像)。
    • -f:跳过确认提示。

4. 导出与导入(离线传输)

  • 导出镜像docker save [选项] <镜像名:标签>
    • -o, --output <文件名>:指定导出的 tar 文件路径。
    • 支持管道压缩:docker save myapp:v1 | gzip > myapp.tar.gz
  • 导入镜像docker load [选项]
    • -i, --input <文件名>:从指定的 tar 文件加载镜像。
    • 支持管道解压:gunzip -c myapp.tar.gz | docker load

二、容器管理 (Container)

容器是镜像的运行实例,是业务运行的载体。

1. 创建与运行

  • 基本运行docker run [选项] <镜像> [命令]
    • -d, --detach:后台运行容器。
    • -p, --publish <主机端口>:<容器端口>:端口映射。
    • -v, --volume <主机路径>:<容器路径>:挂载数据卷或目录。
    • -e, --env <键=值>:设置环境变量。
    • --name <名称>:指定容器名称。
    • --rm:容器退出后自动删除(适合一次性任务)。
    • -it:交互式终端(-i 保持输入开放,-t 分配伪终端)。
    • --restart always:设置重启策略(no, on-failure, always, unless-stopped)。
    • --memory <限制>:限制内存使用(如 512m)。
    • --cpus <限制>:限制 CPU 使用(如 0.5)。

2. 状态查看

  • 查看容器列表
    • docker ps:查看正在运行的容器。
    • docker ps -a:查看所有容器(包括已停止)。
    • docker ps -q:仅显示容器 ID。
    • docker ps --filter "status=exited":筛选特定状态的容器。
  • 查看容器详情docker inspect <容器名/ID>
    • 返回 JSON 格式的详细信息(IP、挂载点、环境变量等)。
    • 格式化输出:docker inspect -f '{``{.NetworkSettings.IPAddress}}' <容器>

3. 生命周期控制

  • 启动/停止
    • docker start <容器>:启动已停止的容器。
    • docker stop <容器>:优雅停止(发送 SIGTERM,等待超时后 SIGKILL)。
    • docker kill <容器>:强制停止(直接发送 SIGKILL)。
    • docker restart <容器>:重启容器。
  • 暂停/恢复
    • docker pause <容器>:暂停容器内所有进程。
    • docker unpause <容器>:恢复容器运行。
  • 删除容器docker rm [选项] <容器>
    • -f:强制删除运行中的容器。
    • -v:同时删除关联的匿名卷。
    • $(docker ps -aq):配合命令替换删除所有容器。

4. 交互与调试

  • 进入容器docker exec [选项] <容器> <命令>
    • -it bash-it sh:进入交互式 Shell。
    • 注意:exec 是在运行中的容器内执行新进程,不会重启容器。
  • 查看日志docker logs [选项] <容器>
    • -f:实时跟踪日志输出。
    • --tail <数字>:显示最后 N 行。
    • -t:显示时间戳。
    • --since <时间>:显示从指定时间开始的日志。
  • 文件拷贝docker cp <容器>:<路径> <主机路径> 或反向操作。
  • 资源监控docker stats:实时显示 CPU、内存、网络 I/O 使用情况。

三、数据卷管理 (Volume)

数据卷用于持久化存储,避免容器删除导致数据丢失。

  • 创建卷docker volume create <卷名>
  • 查看卷
    • docker volume ls:列出所有卷。
    • docker volume inspect <卷名>:查看卷的挂载点等详情。
  • 删除卷
    • docker volume rm <卷名>:删除指定卷。
    • docker volume prune:删除所有未被容器使用的匿名卷。

四、网络管理 (Network)

Docker 网络实现了容器间的隔离与通信。

  • 创建网络docker network create [选项] <网络名>
    • --driver bridge:桥接网络(默认)。
    • --subnet <网段>:指定子网。
  • 连接/断开
    • docker network connect <网络> <容器>:将容器接入网络。
    • docker network disconnect <网络> <容器>:将容器移出网络。
  • 查看网络
    • docker network ls:列出网络。
    • docker network inspect <网络>:查看网络详情(包含接入的容器 IP)。
  • 删除网络docker network rm <网络>

五、Docker Compose (多容器编排)

适用于微服务或多组件应用的统一管理。

  • 常用命令
    • docker-compose up -d:后台启动所有服务。
    • docker-compose up -d --build:重新构建镜像并启动。
    • docker-compose down:停止并移除容器、网络。
    • docker-compose down -v:停止并移除容器、网络、数据卷
    • docker-compose ps:查看服务状态。
    • docker-compose logs -f <服务名>:实时查看指定服务日志。
    • docker-compose exec <服务名> bash:进入指定服务容器。
  • 注意事项
    • 必须在 docker-compose.yml 所在目录下执行。
    • down 默认保留数据卷,需加 -v 才会彻底清理数据。

六、系统清理与维护

定期清理无用资源,释放磁盘空间。

  • 查看磁盘占用docker system df:显示镜像、容器、卷的空间使用情况。
  • 一键清理
    • docker system prune:清理停止的容器、悬空镜像、未使用的网络。
    • docker system prune -a:清理所有未使用的镜像(不仅仅是悬空)。
    • docker system prune -a --volumes彻底清理所有未使用的镜像、容器、网络和卷(慎用!)。

七、Dockerfile 核心指令详解

Dockerfile 是构建镜像的脚本文件,每一行指令都会创建一个新的镜像层。

1. 基础指令

  • FROM :指定基础镜像(必须是第一行,除非在 ARG 之后)。
    • 示例:FROM ubuntu:20.04FROM scratch(从零构建)。
  • LABEL :为镜像添加元数据(作者、版本、描述等)。
    • 示例:LABEL maintainer="user@example.com" version="1.0"
  • WORKDIR :设置工作目录(后续 RUN/CMD/ENTRYPOINT 都在此目录下执行)。
    • 建议:始终使用绝对路径,避免相对路径带来的不确定性。

2. 文件操作

  • COPY :将宿主机文件复制到镜像中。
    • 语法:COPY <源路径> <目标路径>
    • 特点:仅支持本地复制,不解压 tar 包。
  • ADD :功能类似 COPY,但支持自动解压 tar 包和远程 URL 下载。
    • 建议:优先使用 COPY,仅在需要解压 tar 包时使用 ADD。
  • .dockerignore :在构建上下文根目录创建此文件,排除不需要复制到镜像的文件(如 .git, node_modules),减小镜像体积并加速构建。

3. 执行指令

  • RUN :在构建过程中执行命令(每行 RUN 产生一个新层)。
    • 建议:使用 && 合并多条命令,减少层数;安装完依赖后清理缓存(如 apt-get clean)。
  • CMD :指定容器启动时的默认命令(可被 docker run 覆盖)。
    • 格式:推荐 Exec 格式 ["executable", "param1"],避免 Shell 格式导致的信号传递问题。
  • ENTRYPOINT :指定容器启动时的入口程序(不可被覆盖,除非用 --entrypoint)。
    • 场景:常用于制作可执行工具镜像,CMD 作为默认参数传入 ENTRYPOINT。

4. 环境与暴露

  • ENV :设置环境变量(构建时和运行时均有效)。
    • 示例:ENV APP_HOME=/app
  • EXPOSE :声明容器运行时监听的端口(仅文档作用,不实际映射端口)。
    • 示例:EXPOSE 80 443
  • VOLUME :声明匿名卷挂载点(防止数据写入容器层)。
    • 示例:VOLUME /data

5. 用户与安全

  • USER :指定运行后续指令及容器启动时的用户。
    • 建议:避免使用 root 用户,创建专用用户以提高安全性。
  • HEALTHCHECK :定义健康检查命令。
    • 示例:HEALTHCHECK --interval=30s CMD curl -f http://localhost/ || exit 1

💡 Dockerfile 最佳实践

  1. 精简基础镜像 :优先使用 alpineslim 版本的基础镜像。
  2. 减少层数:合并 RUN 指令,及时清理包管理器缓存。
  3. 利用构建缓存:将变化频率低的指令(如安装依赖)放在前面,变化频繁的代码复制放在后面。
  4. 多阶段构建 :使用 FROM ... AS builder 分离编译环境和运行环境,显著减小最终镜像体积。
  5. 不使用 latest 标签:始终指定明确的基础镜像版本,确保构建的可复现性。
相关推荐
Baron X1 小时前
Gitea Docker 部署教程
docker·gitea
隔振消音专家2 小时前
冷水机组振动传导影响及专业化减振适配治理方案
大数据·运维
Brilliantwxx2 小时前
【Linux】 软件包管理器(yum)+ Vim使用
linux·运维·服务器·开发语言·编辑器·vim
skywalk81632 小时前
在FreeBSD的Uubntu兼容环境下安装Reasonix
linux·运维·freebsd
^yi2 小时前
【Linux系统编程】对操作系统的理解
linux·运维·服务器·操作系统·系统调用·os
Kina_C2 小时前
LVS-NAT 负载均衡实验从环境搭建到规则持久化
linux·运维·服务器·负载均衡·lvs
小肝一下2 小时前
7. 库制作与原理
linux·c语言·操作系统·bash·shell·动静态库
Android洋芋3 小时前
PrintFriendly网页文章转PDF插件工具及技术分析
运维·服务器·pdf·网页转pdf
Elastic 中国社区官方博客3 小时前
使用重新设计的 AutoOps 更快地进行 Elasticsearch 问题排查
大数据·运维·前端·人工智能·elasticsearch·搜索引擎·全文检索