Docker 容器化核心概念与 CentOS 部署指南
引言:为什么需要 Docker
在现代软件交付流程中,确保应用从开发环境到生产环境的一致性是一个核心挑战。操作系统差异、运行库版本冲突以及配置不一致往往导致"在我机器上是好的"这类问题。Docker 作为一种基于 Go 语言开发的开源容器化引擎,旨在通过标准化软件交付单元来解决上述环境兼容性问题,从而优化持续集成与发布流程。
Docker 核心架构与虚拟机对比
Docker 体系结构主要围绕三个核心组件构建:
- 镜像 (Image):只读模板,包含运行应用所需的代码、库、环境变量和配置文件。
- 容器 (Container):镜像的运行实例,具有可写层,生命周期独立。
- 仓库 (Registry):用于存储和分发镜像的中心化服务。
容器与虚拟机的差异
相较于传统虚拟机技术,Docker 容器在资源利用和启动速度上具有显著优势:
- 抽象层更少:容器直接复用宿主机的硬件资源,无需 Hypervisor 层,CPU 和内存损耗更低。
- 内核共享:容器共享宿主机内核,不需要像虚拟机那样加载完整的 Guest OS。这使得容器启动通常在秒级甚至毫秒级,而虚拟机通常需要分钟级。
- 隔离性:容器本质上是具有特定视图的进程集合,虽然隔离性略弱于 VM,但现代技术正朝着强隔离方向演进。
CentOS 环境下的 Docker 部署
以下部署步骤基于 CentOS 7 及以上版本,要求系统内核版本在 3.10 以上。
1. 移除旧版本
如果系统已安装过旧版的 docker 或 docker-engine,建议先卸载以避免冲突:
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
2. 设置仓库源
安装必要的工具包并配置 Docker 官方或国内镜像源,以加速下载:
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
# 使用阿里云镜像源配置
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
3. 安装 Docker Engine
安装社区版引擎及相关依赖:
sudo yum install docker-ce docker-ce-cli containerd.io
若需安装特定版本,可先使用 yum list docker-ce --showduplicates | sort -r 查看可用版本,然后指定包名安装。
4. 启动与验证
启动服务并设置开机自启,随后通过运行测试镜像验证安装:
sudo systemctl start docker
sudo systemctl enable docker
sudo docker run --rm hello-world
5. 配置镜像加速器
为了提升拉取速度,可配置国内镜像加速地址。编辑配置文件 /etc/docker/daemon.json(若不存在则创建):
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://hub-mirror.c.163.com"
]
}
配置完成后需重载守护进程配置并重启服务:
sudo systemctl daemon-reload
sudo systemctl restart docker
注意:配置文件必须为有效的 JSON 格式,后缀通常为 .json,错误的符号(如多余的逗号)会导致服务启动失败。
Docker 常用命令参考
镜像管理
docker images:列出本地镜像。常用参数:-a(显示所有),-q(仅显示 ID)。docker search <keyword>:从仓库搜索镜像。可使用-f stars=30过滤高星项目。docker pull <image_name>:拉取镜像,如docker pull nginx:latest。docker rmi <image_id>:删除镜像。加-f可强制删除。
容器生命周期管理
- 创建与运行:
docker run--name:指定容器名称。-d:后台运行(守护模式)。-it:交互模式,通常配合/bin/bash使用。-p host_port:container_port:端口映射。
示例:启动一个名为 web_server 的 nginx 容器,映射 8080 端口:
docker run -d --name web_server -p 8080:80 nginx - 查看状态:
docker ps-a:显示所有容器(包括已停止)。-q:静默模式,仅输出容器 ID。
- 控制命令:
docker start <id>:启动已停止的容器。docker stop <id>:正常停止容器。docker kill <id>:强制停止容器。docker restart <id>:重启容器。docker rm <id>:删除容器。批量删除可使用docker rm -f $(docker ps -aq)。
容器内部操作与调试
docker logs -f -t --tail 100 <id>:实时查看容器日志,-t显示时间戳。docker top <id>:查看容器内运行的进程。docker inspect <id>:获取容器底层详细信息(JSON 格式)。docker exec -it <id> /bin/bash:进入正在运行的容器内部终端。docker attach <id>:连接到容器启动的主进程终端(退出可能导致容器停止)。
文件拷贝
在宿主机与容器之间传输文件:
# 从容器拷贝文件到主机
docker cp <container_id>:/path/to/file.txt ./local_destination/
# 从主机拷贝文件到容器
docker cp ./local_file.txt <container_id>:/path/to/destination/