如何在 RHEL 系列 linux 上安装并配置 docker?
Docker 是现代软件开发和运维中不可或缺的工具之一。它通过容器化技术,为开发者和运维人员提供了一个轻量级、高效且灵活的解决方案。无论是构建、测试还是部署应用程序,Docker 都能显著简化流程并提升效率。在本篇文章中,我们将详细介绍如何在 RHEL 系列 系统上安装和配置 Docker,帮助您快速上手并充分利用其强大的功能。
1. 什么是 Docker 容器?
Docker 是一种轻量级的虚拟化技术,同时是一个开源的应用容器运行环境搭建平台,可以让开发者以便捷方式打包应用到一个可移植的容器中,然后安装至任何运行 Linux 或 Windows 等系统的服务器上。相较于传统虚拟机,Docker 容器提供轻量化的虚拟化方式、安装便捷、启停速度快。
本文主要讲述如何在 Centos 7.9 操作系统上安装 Docker, 当然本教程也适合 RHEL 系列的其他 Linux 发型版本.
2. 为什么需要 Docker 容器?
虚拟机(Virtual Machine,简称 VM)的发展,减轻了企业对硬件资源的依赖,它将一台物理设备虚拟为多个逻辑设备,每个逻辑设备可运行不同的操作系统,并且应用程序都可以在相互独立的空间内运行而互不影响,从而显著提高设备的工作效率。然而,传统 VM 需要安装操作系统才能执行应用程序,占用系统资源过多。多数情况下,用户只需要运行简单的应用程序,采用 VM 技术操作繁琐且造成资源浪费。倘若需要迁移应用服务程序,则需迁移整个 VM,因此企业迫切需要轻量级的虚拟化技术。
容器,就是一种轻量级的虚拟化技术,目的和虚拟机一样,都是为了创造“隔离环境”。但是它不像 VM 采用操作系统级的资源隔离,容器采用的是进程级的系统隔离。Docker 作为创建容器的主流工具,近年来迅速发展,它的优势在于可以让开发者将企业需要的各种应用及应用依赖文件封装在 Docker 镜像文件中,然后在任何物理设备(Linux 设备或 Window 设备等)上安装运行实现虚拟化,让应用程序彻底脱离底层设备,可以在物理机之间灵活迁移部署,使运维工程师摆脱了繁琐的环境部署,极大的提高了工作效率,同时减少了部署过程中的潜在风险。
Docker 容器具有以下三大特点:
轻量化:一台主机上运行的多个 Docker 容器可以共享主机操作系统内核;启动迅速,只需占用很少的计算和内存资源。
标准开放:Docker 容器基于开放式标准,能够在所有主流 Linux 版本、Microsoft Windows 以及包括 VM、裸机服务器和云在内的任何基础设施上运行。
安全可靠:Docker 赋予应用的隔离性不仅限于彼此隔离,还独立于底层的基础设施。Docker 默认提供最强的隔离,因此应用出现问题,也只是单个容器的问题,而不会波及到整台主机。
3. 如何安装 Docker
3.1. 配置 docker-ce yum 源
如果是国外服务器使用以下脚本添加 yum 源
1 |
|
其他发行版操作系统参考添加源,可以参考Install Docker Engine
国内服务器使用以下脚本添加 yum 源
1 |
|
3.2. 安装 docker
1 |
|
3.3. 配置 docker
3.3.1. 以非 root 用户身份管理 Docker
为了避免在使用 Docker 命令时频繁使用 sudo 命令,请使用以下命令将您的用户添加到“docker”组:。
1 | sudo usermod -aG docker $USER |
-a(append)选项是必不可少的。否则,该用户将从任何组中删除,不在列表中。
-G 选项需要指定要加入的用户主组, 可以一次添加多个, 使用逗号分割。
3.3.2. 配置镜像加速
由于 dockerhub 镜像仓库在国外,国内访问速度较慢,下载镜像的过程中,多数情况下会因为超时而失败,所以强烈建议配置镜像加速。
另外在整个安装过程中主要需要与 internet 上三个镜像仓库打交道。
- DockerHub,
- gcr.io 这个几乎不能访问,后面会介绍到如何获得其上相应的镜像
- quay.io , 主要是一些网络组件相关的镜像
1 | $sudo vi /etc/docker/daemon.json |
2025-03-22 更新:由于众所周知的原因,hub.docker.com 于 2023 年 6 月国内已经无法访问,次年也即 2024 年 6 月国内的 Docker 镜像加速器也被关闭。
可以使用热心网友提供的镜像加速,参考2025 年最新国内可用 Docker 镜像加速器汇总
3.3.3. docker iptables FORWARD 策略
docker 自 1.13 版起会自动设置 iptables 的 FORWARD 默认策略为 DROP,这可能会影响 kubernetes 集群依赖的报文转发功能,因此,需要在 docker 服务启动后,重新将 FORWARD 链的默认策略设置为 ACCEPT,方式是修改/usr/lib/systemd/system/docker.service 文件,在 “ExecStart=/usr/bin/dockerd” 一行之后新增加一行内容如下:
1 | ExecStartPost=/usr/sbin/iptables -P FORWARD ACCEPT |
3.4. 启动 docker
重载完成后即可启动 docker 服务, 并设置为开机自启动:
1 | sudo systemctl enable docker --now |
3.5. 测试 docker
查看 docker 版本
1 | root@server# docker --version |
运行 hello-world 镜像, 能看到 hello world 消息, 说明 docker 镜像配置没有问题
1 |
|
4. 如何卸载 Docker?
4.1. 删除 docker 服务
1 |
|
4.2. 查询已安装的 docker 安装包
首先搜索已安装的 docker 安装包
1 |
|
输出
1 | containerd.io.x86_64 1.6.24-3.1.el7 @docker-ce-stable |
4.3. 删除安装包
1 | yum remove docker-buildx-plugin.x86_64 containerd.io.x86_64 docker-ce-cli.x86_64 docker-ce.x86_64 docker-ce-rootless-extras.x86_64 docker-compose-plugin.x86_64 |
4.4. 删除 docker 镜像
1 |
|
5. Troubleshooting
问题描述:按照官网安装完 Docker,在最后一步检验 docker 是否安装成功,即运行 sudo docker run hello-world 这条命令时一直一直一直出现”Unable to find image ‘hello-word:latest’ locally”
1 |
|
原因分析:由于众所周知的原因,hub.docker.com 于 2023 年 6 月国内已经无法访问,次年也即 2024 年 6 月国内的 Docker 镜像加速器也被关闭。所以直接拉取镜像会失败。
当然如果你想在国内突破墙的封锁封锁,最根本的办法还是搭建梯子,搭建梯子的方法有很多种,可以到我的首页去找。
这里介绍另外一种办法就是寻找国内依然可用的镜像加速器。
首先到 docker registry mirrors status 去找可用的 docker 镜像加速
然后修改 docker 镜像配置,这里以 dockerhub.timeweb.cloud 为例
1 | $sudo vi /etc/docker/daemon.json |
重启 docker
1 |
|
6. 相关阅读
如何在 RHEL 系列 linux 上安装并配置 docker?