Docker是一种近来广为流行的容器虚拟化技术;它提供了一种更有效的方式来部署应用程序。使用Docker,应用程序驻留在 Linux 操作系统之上的容器内。
Docker使用 cgroups 和 namespace 等内核特性来允许独立容器在单个 os 实例上运行。
在这篇文章中,您将学习如何在CentOS 7 / RHEL 7上安装 Docker 。
安装 Docker
选择任何一种方法在CentOS 7上安装 Docker 。
从 Docker 安装(官方)
Docker 现在有两个版本,
- 社区版 (CE)
- 企业版 (EE)
在这里,我们将安装 Docker 社区版 (CE)。
卸载旧版本的 Docker,名为docker或docker-engine以及相关的依赖项。
yum -y remove docker-common docker container-selinux docker-selinux docker-engine
不要担心/var/lib/docker/里面的内容,所有内容都会被保留。
yum -y install lvm2 device-mapper device-mapper-persistent-data device-mapper-event device-mapper-libs device-mapper-event-libs
Docker 社区包现在称为 docker -ce。让我们为 docker 安装添加 CE 存储库。
yum -y install wget
wget https://download.docker.com/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo
使用以下命令安装最新版本的 Docker CE。
yum -y install docker-ce
例如:yum install docker-ce-19.03.0-3.el7
您可以列出yum可用的 Docker 版本列出 docker-ce –showduplicates | 排序 -r
从基础存储库安装 Docker
Docker 在 CentOS 的标准存储库中可用,因此我们不必搜索包。
对于 RHEL 7,您必须拥有有效的 Redhat 订阅才能在服务器上启用 Extras rpm 的存储库。使用以下命令安装它。
yum -y install docker
现在你已经在你的机器上安装了 Docker,启动 Docker 服务,以防安装后它没有自动启动
systemctl start docker
systemctl enable docker
验证 Docker 安装
服务启动后,通过运行以下命令验证您的安装。
docker run -it centos echo Hello-World
让我们看看当我们运行docker run命令时会发生什么。由于我们是第一次运行这个 centos 容器,Docker 会启动一个带有 centos 基础镜像的容器,输出将如下所示。
Unable to find image 'centos:latest' locally
latest: Pulling from library/centos
8ba884070f61: Pull complete
Digest: sha256:a799dd8a2ded4a83484bbae769d97655392b3f86533ceb7dd96bbac929809f3c
Status: Downloaded newer image for centos:latest
Hello-World
Docker在本地寻找centos镜像,没有找到,就开始从Docker注册中心下载centos镜像。下载图像后,它将启动容器并在控制台中回显命令Hello-World,您可以在输出的末尾看到该命令。
允许非root访问
正如您在我的命令中看到的,对于 CentOS,我必须以 root 用户身份运行 Docker。为避免这种情况,您可以按照以下步骤允许非 root 用户运行 Docker 容器。
如果不存在,则创建一个名为docker的组,以root权限运行以下命令。
groupadd docker
添加将成为 docker 组成员的用户。用您自己的用户名替换raj。
useradd raj
将用户添加到 docker 组。
usermod -aG docker raj
现在您可以使用非 root 用户运行 Docker。
防火墙
CentOS 7 中的防火墙可以与 Docker 冲突;建议关闭该服务。
systemctl stop firewalld
systemctl disable firewalld
当 firewalld 启动或重新启动时,它会从 iptables 中删除 DOCKER 链,从而阻止 Docker 正常工作。
如果你还想使用systemd,则必须在Docker服务之前启动firewalld。如果您在 Docker 之后启动或重新启动 firewalld,则必须重新启动 Docker 守护进程。