当前位置:首页 > 技术 > 正文内容

Docker 容器化核心概念与 CentOS 部署指南

访客 技术 2026年9月19日 11

引言:为什么需要 Docker

在现代软件交付流程中,确保应用从开发环境到生产环境的一致性是一个核心挑战。操作系统差异、运行库版本冲突以及配置不一致往往导致"在我机器上是好的"这类问题。Docker 作为一种基于 Go 语言开发的开源容器化引擎,旨在通过标准化软件交付单元来解决上述环境兼容性问题,从而优化持续集成与发布流程。

Docker 核心架构与虚拟机对比

Docker 体系结构主要围绕三个核心组件构建:

  • 镜像 (Image):只读模板,包含运行应用所需的代码、库、环境变量和配置文件。
  • 容器 (Container):镜像的运行实例,具有可写层,生命周期独立。
  • 仓库 (Registry):用于存储和分发镜像的中心化服务。

容器与虚拟机的差异

相较于传统虚拟机技术,Docker 容器在资源利用和启动速度上具有显著优势:

  1. 抽象层更少:容器直接复用宿主机的硬件资源,无需 Hypervisor 层,CPU 和内存损耗更低。
  2. 内核共享:容器共享宿主机内核,不需要像虚拟机那样加载完整的 Guest OS。这使得容器启动通常在秒级甚至毫秒级,而虚拟机通常需要分钟级。
  3. 隔离性:容器本质上是具有特定视图的进程集合,虽然隔离性略弱于 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/

相关文章

Linux crontab 详解

1) crontab 是什么cron 是 Linux 的定时任务守护进程;crontab 是用来编辑/查看“按时间周期执行命令”的表(cron table)。常见两类:用户 crontab:每个用户一份(crontab -e 编辑)系统级 crontab / cron.d:可指定执行用户(/etc/crontab、/etc/cron.d/*)2) crontab 时间...

富文本里可以允许的 HTML 属性

一、所有标签默认允许的安全属性(极少)class        (可选)id           (通常建议禁用)title️ 注意:id 容易被滥用做锚点注入,很多系统直接禁用class 允许的话最好只允许固定前缀(如 editor-*)二、a 标签允许属性<a href="" t...

Mac 安装 Node.js 指南

方法一:通过官网安装包(最简单,适合初学者)如果你只是想快速安装并开始使用,这是最直接的方法。访问 Node.js 官网。页面会显示两个版本:LTS (Recommended For Most Users):长期支持版,最稳定。建议选这个。Current:最新特性版,包含最新功能但可能不够稳定。下载 .pkg 安装包并运行。按照安装向导点击“下一步”即可完成。方法二:使用 Homebrew 安装(...

Dom\HTML_NO_DEFAULT_NS 的副作用:自动加闭合标签

在使用Dom\HTMLDocument时,Dom\HTML_NO_DEFAULT_NS 将禁止在解析过程中设置元素的命名空间, 此设置是为了与DOMDocument向后兼容而存在的。当使用它时,已知的一个副作用就是:自动加闭合标签例如 </img> 为什么会这样?当你使用:Dom\HTML_NO_DEFAULT_NS文档会变成 无命名空间模式,此时内部更接近 XML...

Laravel 事件和监听器创建

在 Laravel 中,使用 Artisan 命令创建 Events(事件) 和 Listeners(监听器) 是非常高效的。你可以通过以下几种方式来实现:1. 手动创建单个 Event如果你只想创建一个事件类,可以使用 make:event 命令:Bashphp artisan make:event UserRegistered执行后,文件将生成在 app/Even...

自定义域名解析神器 dnsmasq

什么是 dnsmasq?dnsmasq 是一个轻量级、功能强大的网络服务工具,专为小型和中等规模网络设计。它是一个综合的网络基础设施解决方案[1]。dnsmasq 能做什么?功能说明应用场景DNS 转发与缓存将 DNS 查询转发到上游服务器(ISP、Google DNS 等),并在本地缓存结果加快 DNS 查询速度,减少外部 DNS 流量本地 DNS解析本地网络设备的主机名,无需编辑&n...

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。