本文最后更新于 270 天前,其中的信息可能已经有所发展或是发生改变。
今天,我们将重点讨论如何在 Rocky Linux 上安装 Docker Community Edition(Docker CE)。考虑到大多数同学可能已经对 Docker 有所了解,不难理解 Docker CE 作为社区版的开源容器平台,它支持安装在各种主流操作系统上。鉴于 Rocky Linux 与 CentOS 共享相似的基因,预计在 Rocky Linux 上的安装过程将会相对简单。让我们一起探索并学习吧!
安装Docker CE
特别说明
此安装步骤支持所有 Red Hat 系 Linux 操作系统,所以它适应包括: Red Hat、CentOS、Rocky Linux、Alma Linux、Oracle Linux 等操作系统。
# 添加Docker Repo
[root@localhost ~]# dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
# 更新源
[root@localhost ~]# dnf update
# 在安装 Docker CE 的时候,会同步安装 docker-compose-plugin 插件
[root@localhost ~]# dnf install -y docker-ce
Last metadata expiration check: 0:00:42 ago on Fri Mar 8 10:24:42 2024.
Dependencies resolved.
================================================================================================================================================================================================================================================================
Package Architecture Version Repository Size
================================================================================================================================================================================================================================================================
Installing:
docker-ce x86_64 3:25.0.4-1.el9 docker-ce-stable 26 M
Installing dependencies:
checkpolicy x86_64 3.5-1.el9 appstream 345 k
container-selinux noarch 3:2.221.0-1.el9 appstream 55 k
containerd.io x86_64 1.6.28-3.1.el9 docker-ce-stable 34 M
docker-ce-cli x86_64 1:25.0.4-1.el9 docker-ce-stable 7.3 M
fuse-common x86_64 3.10.2-6.el9 baseos 7.2 k
fuse-overlayfs x86_64 1.12-1.el9 appstream 66 k
fuse3 x86_64 3.10.2-6.el9 appstream 52 k
fuse3-libs x86_64 3.10.2-6.el9 appstream 91 k
libslirp x86_64 4.4.0-7.el9 appstream 68 k
policycoreutils-python-utils noarch 3.5-3.el9_3 appstream 71 k
python3-audit x86_64 3.0.7-104.el9 appstream 82 k
python3-distro noarch 1.5.0-7.el9 appstream 36 k
python3-libsemanage x86_64 3.5-2.el9 appstream 79 k
python3-policycoreutils noarch 3.5-3.el9_3 appstream 2.0 M
python3-setools x86_64 4.4.3-1.el9 baseos 551 k
python3-setuptools noarch 53.0.0-12.el9 baseos 839 k
slirp4netns x86_64 1.2.1-1.el9 appstream 46 k
tar x86_64 2:1.34-6.el9_1 baseos 876 k
Installing weak dependencies:
docker-buildx-plugin x86_64 0.13.0-1.el9 docker-ce-stable 13 M
docker-ce-rootless-extras x86_64 25.0.4-1.el9 docker-ce-stable 4.0 M
docker-compose-plugin x86_64 2.24.7-1.el9 docker-ce-stable 13 M
Transaction Summary
================================================================================================================================================================================================================================================================
Install 22 Packages
# 建议添加普通用户至Docker组,并以普通用户运行Docker。
[root@localhost ~]# usermod -aG docker $USER
# 生效组用户变更配置
[root@localhost ~]# newgrp docker
相关参数配置(daemon.json)
Docker 的相关参数都通过守护进程配置文件 (daemon.json
) 进行配置,用于自定义 Docker 的行为。下面是每个参数的作用:
"registry-mirrors"
:配置 Docker 客户端使用的镜像仓库加速地址。用于指定一个或多个 Docker 镜像仓库加速地址,这些地址将作为 Docker Hub 的镜像加速使用。当你从 Docker Hub 拉取镜像时,如果配置了镜像加速地址,Docker 会首先尝试从这些镜像地址拉取所需的镜像。如果拉取成功,则不需要从 Docker Hub 拉取,这样可以加快镜像下载速度,特别是在 Docker Hub 访问速度较慢或不稳定的情况下。镜像仓库镜像通常由第三方提供,例如阿里云、腾讯云等云服务商在中国境内提供的 Docker 镜像加速服务(当然也可以自建镜像加速站)。"insecure-registries"
:指定 Docker 客户端可以连接的不安全仓库列表。用于指定一个或多个不使用 HTTPS 协议的私有仓库地址。默认情况下,Docker 要求镜像仓库使用 HTTPS 来保证通信的安全性。但是,如果你在内部网络中运行自己的私有仓库,并且没有配置 HTTPS,你可以使用insecure-registries
选项让 Docker 客户端信任这些仓库的 HTTP 连接。请注意,这样做会降低安全性,因此只建议在安全的内部网络环境中使用。"exec-opts"
:为 Docker 守护进程设置执行选项。"native.cgroupdriver=systemd"
表示 Docker 将使用systemd
作为其控制组驱动,而不是默认的cgroupfs
。这有助于更好地集成和管理系统资源。"log-driver"
:设置 Docker 容器的日志驱动。在这里,使用的是"json-file"
,这意味着容器的日志将以 JSON 格式写入到文件中。"log-opts"
:为日志驱动配置选项。"max-size": "100m"
表示每个日志文件的最大大小为 100MB,"max-file": "10"
表示最多保留 10 个日志文件。"storage-driver"
:设置 Docker 的存储驱动。这里使用"overlay2"
,这是 Docker 推荐的存储驱动之一,用于管理镜像和容器的文件系统层。"live-restore"
:当设置为true
时,允许 Docker 守护进程重新启动而不会停止正在运行的容器。"default-shm-size"
:设置容器内/dev/shm
的默认大小。这里设置为 128MB,而 Docker 默认值通常是 64MB。"bridge"
:配置 Docker 网络桥接选项。在这里,"none"
表示删除默认的docker0
网桥(Kubernetes 配置时有用,单 Docker 节点不需要设置)。"max-concurrent-downloads"
:设置 Docker 拉取镜像时的最大并发下载数量。这里设置为 10,而 Docker 默认通常是 3。"max-concurrent-uploads"
:设置 Docker 推送镜像到仓库时的最大并发上传数量。这里设置为 10,而 Docker 默认通常是 5。"debug"
:配置是否启用调试模式。这里设置为false
,表示关闭调试日志。
从修改 Docker 文件系统为 ovelay2 驱动,并配置 Docker 下载加速器地址,因为国内很多 Docker 加速器都需要进行认证,中国科学技术大学不需要进行认证,所以这里采用中国科学技术大学的 Docker 加速器。
[root@localhost ~]# cat > /etc/docker/daemon.json << EOF
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://mirror.iscas.ac.cn"],
"insecure-registries":["docker.rockylinux.cn"],
"exec-opts": ["native.cgroupdriver=systemd"],
"log-driver": "json-file",
"log-opts": {
"max-size": "100m",
"max-file": "10"
},
"storage-driver": "overlay2",
"live-restore": true,
"default-shm-size": "128M",
"max-concurrent-downloads": 10,
"max-concurrent-uploads": 10,
"debug": false
}
EOF
# 重启Docker
[root@localhost ~]# systemctl daemon-reload
# 设置开机自启动,同时启动 docker 服务
[root@localhost ~]# systemctl enable docker --now
# 查看 docker 服务状态
[root@localhost ~]# systemctl status docker
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled; preset: disabled)
Active: active (running) since Fri 2024-03-08 11:06:10 CST; 40min ago
TriggeredBy: ● docker.socket
Docs: https://docs.docker.com
Main PID: 8834 (dockerd)
Tasks: 10
Memory: 36.2M
CPU: 1.546s
CGroup: /system.slice/docker.service
└─8834 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
Mar 08 11:06:07 localhost.localdomain dockerd[8834]: time="2024-03-08T11:06:07.751363730+08:00" level=info msg="[graphdriver] trying configured driver: overlay2"
Mar 08 11:06:08 localhost.localdomain dockerd[8834]: time="2024-03-08T11:06:08.240829931+08:00" level=info msg="Loading containers: start."
Mar 08 11:06:09 localhost.localdomain dockerd[8834]: time="2024-03-08T11:06:09.824673008+08:00" level=info msg="failed to read ipv6 net.ipv6.conf.<bridge>.accept_ra" bridge=docker0 syspath=/proc/sys/net/ipv6/conf/docker0/accept_ra
Mar 08 11:06:09 localhost.localdomain dockerd[8834]: time="2024-03-08T11:06:09.824767439+08:00" level=info msg="failed to read ipv6 net.ipv6.conf.<bridge>.accept_ra" bridge=docker0 syspath=/proc/sys/net/ipv6/conf/docker0/accept_ra
Mar 08 11:06:10 localhost.localdomain dockerd[8834]: time="2024-03-08T11:06:10.081501802+08:00" level=info msg="Firewalld: interface docker0 already part of docker zone, returning"
Mar 08 11:06:10 localhost.localdomain dockerd[8834]: time="2024-03-08T11:06:10.575610211+08:00" level=info msg="Loading containers: done."
Mar 08 11:06:10 localhost.localdomain dockerd[8834]: time="2024-03-08T11:06:10.644316257+08:00" level=info msg="Docker daemon" commit=061aa95 containerd-snapshotter=false storage-driver=overlay2 version=25.0.4
Mar 08 11:06:10 localhost.localdomain dockerd[8834]: time="2024-03-08T11:06:10.644638904+08:00" level=info msg="Daemon has completed initialization"
Mar 08 11:06:10 localhost.localdomain dockerd[8834]: time="2024-03-08T11:06:10.842536019+08:00" level=info msg="API listen on /run/docker.sock"
Mar 08 11:06:10 localhost.localdomain systemd[1]: Started Docker Application Container Engine.
# 启动Docker服务
[root@localhost ~]# systemctl start docker
# 重启 Docker 服务
[root@localhost ~]# systemctl restart docker
# 停止 Docker 服务
[root@localhost ~]# systemctl stop docker
查看 Docker 信息
# 查看 Docker 版本信息(docker --version 命令只显示版本信息)
[root@localhost ~]# docker version
Client: Docker Engine - Community
Version: 25.0.4
API version: 1.44
Go version: go1.21.8
Git commit: 1a576c5
Built: Wed Mar 6 16:33:45 2024
OS/Arch: linux/amd64
Context: default
Server: Docker Engine - Community
Engine:
Version: 25.0.4
API version: 1.44 (minimum version 1.24)
Go version: go1.21.8
Git commit: 061aa95
Built: Wed Mar 6 16:32:08 2024
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.6.28
GitCommit: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
runc:
Version: 1.1.12
GitCommit: v1.1.12-0-g51d5e94
docker-init:
Version: 0.19.0
GitCommit: de40ad0
# 查看 Docker 相关配置信息
[root@localhost ~]# docker info
Client: Docker Engine - Community
Version: 25.0.4
Context: default
Debug Mode: false
Plugins:
buildx: Docker Buildx (Docker Inc.)
Version: v0.13.0
Path: /usr/libexec/docker/cli-plugins/docker-buildx
compose: Docker Compose (Docker Inc.)
Version: v2.24.7
Path: /usr/libexec/docker/cli-plugins/docker-compose
Server:
Containers: 0
Running: 0
Paused: 0
Stopped: 0
Images: 0
Server Version: 25.0.4
Storage Driver: overlay2
Backing Filesystem: xfs
Supports d_type: true
Using metacopy: false
Native Overlay Diff: true
userxattr: false
Logging Driver: json-file
Cgroup Driver: systemd
Cgroup Version: 2
Plugins:
Volume: local
Network: bridge host ipvlan macvlan null overlay
Log: awslogs fluentd gcplogs gelf journald json-file local splunk syslog
Swarm: inactive
Runtimes: runc io.containerd.runc.v2
Default Runtime: runc
Init Binary: docker-init
containerd version: ae07eda36dd25f8a1b98dfbf587313b99c0190bb
runc version: v1.1.12-0-g51d5e94
init version: de40ad0
Security Options:
seccomp
Profile: builtin
cgroupns
Kernel Version: 5.14.0-362.18.1.el9_3.0.1.x86_64
Operating System: Rocky Linux 9.3 (Blue Onyx)
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 7.494GiB
Name: localhost.localdomain
ID: caa108f4-0ff0-4e62-ac56-8abbb63b76a5
Docker Root Dir: /var/lib/docker
Debug Mode: false
Experimental: false
Insecure Registries:
127.0.0.0/8
Registry Mirrors:
https://docker.mirrors.ustc.edu.cn/
https://mirror.iscas.ac.cn/
Live Restore Enabled: true
测试部署 Docker
# 拉取镜像
[root@localhost ~]# docker pull rockylinux:9.3.20231119-minimal
9.3.20231119-minimal: Pulling from library/rockylinux
c57e48f6b45c: Pull complete
Digest: sha256:605cdab3253819ad302dd4ba43c89d1d6bea2a380057b6cd20f58393d7eee36c
Status: Downloaded newer image for rockylinux:9.3.20231119-minimal
docker.io/library/rockylinux:9.3.20231119-minimal
# 查看镜像
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
rockylinux 9.3.20231119-minimal 2b791da92d4d 3 months ago 118MB
# 启动 Docker
[root@localhost ~]# docker run -it rockylinux:9.3.20231119-minimal /bin/bash
bash-5.1# ls -l
total 0
dr-xr-xr-x 2 root root 6 May 16 2022 afs
lrwxrwxrwx 1 root root 7 May 16 2022 bin -> usr/bin
drwxr-xr-x 5 root root 360 Mar 11 01:36 dev
drwxr-xr-x 1 root root 66 Mar 11 01:36 etc
drwxr-xr-x 2 root root 6 May 16 2022 home
......(略)
Docker Compose 安装
以前需要单独下载 docker-compose 二进制文件,放于 /usr/local/bin
目录,并授于可执行权限,方可使用 docker-compose 命令。现在在安装 Docker CE 的时候,会同步安装 docker-compose-plugin 插件,安装以后可以直接使用 docker compose
命令,不需要单独安装。如果需要单独安装,可以使用以下命令进行安装。
# 安装 docker compose
[root@localhost ~]# dnf install docker-compose-plugin -y
# 查看对应版本
[root@localhost ~]# docker compose version
Docker Compose version v2.24.7
变更记录
- 2024-03-08
- 移除 Docker 弃用参数
oom-score-adjust
、overlay2.override_kernel_check
。 - 增加 Docker 守护进程各参数说明。
- 增加 Docker Compose 安装说明。
- 优化文章排版逻辑和结构。
- 操作系统版本更新至 Rocky Linux 9.3 。
- 移除 Docker 弃用参数
版权声明:「自由转载-保持署名-非商业性使用-禁止演绎 3.0 国际」(CC BY-NC-ND 3.0)
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。
建议公众号也同步一下这些文章,RockyLinux 公众号已经好久没有更新啦~
好的,我们尽快打通与微信公众号之前的文章同步功能。
docker.service: Failed with result ‘exit-code’.
修改配置文件后缀 —>把/etc/docker/daemon.json文件的.json后缀,修改为.conf后缀
Good @-@
不知道会不会有人看见,这个脚本是我个人编写的一个,很简单很简单的bash脚本。因为文章中的docker CE安装过程,现在的国内环境如果不会在linux中代理翻墙的话就没有办法连接安装,因此我就使用了阿里云的docker镜像,虽然和最新的docker有一定的版本差距,但是不影响使用,加速镜像的网址是目前我个人确定能够连接的上的,具体的内容,请看下面的代码。