在 Rocky Linux 9.x 上安装 Docker CE
本文最后更新于 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-adjustoverlay2.override_kernel_check
    • 增加 Docker 守护进程各参数说明。
    • 增加 Docker Compose 安装说明。
    • 优化文章排版逻辑和结构。
    • 操作系统版本更新至 Rocky Linux 9.3 。
Avatar photo

关于 木子

Founder of the Rocky Linux Chinese community, MVP、VMware vExpert、TVP, advocate for cloud native technologies, with over ten years of experience in site reliability engineering (SRE) and the DevOps field. Passionate about Cloud Computing、Microservices、CI&CD、DevOps、Kubernetes, currently dedicated to promoting and implementing Rocky Linux in Chinese-speaking regions.
用一杯咖啡支持我们,我们的每一篇[文档]都经过实际操作和精心打磨,而不是简单地从网上复制粘贴。期间投入了大量心血,只为能够真正帮助到您。

评论

  1. iStevenShum
    2年前
    2022-11-30 9:39:31

    建议公众号也同步一下这些文章,RockyLinux 公众号已经好久没有更新啦~

    • Avatar photo
      博主
      iStevenShum
      2年前
      2022-11-30 10:15:12

      好的,我们尽快打通与微信公众号之前的文章同步功能。

  2. woodman
    1年前
    2023-9-06 15:58:38

    docker.service: Failed with result ‘exit-code’.
    修改配置文件后缀 —>把/etc/docker/daemon.json文件的.json后缀,修改为.conf后缀

    • Avatar photo
      博主
      woodman
      1年前
      2023-10-20 17:00:58

      Good @-@

  3. 2周前
    2024-11-20 12:36:23

    不知道会不会有人看见,这个脚本是我个人编写的一个,很简单很简单的bash脚本。因为文章中的docker CE安装过程,现在的国内环境如果不会在linux中代理翻墙的话就没有办法连接安装,因此我就使用了阿里云的docker镜像,虽然和最新的docker有一定的版本差距,但是不影响使用,加速镜像的网址是目前我个人确定能够连接的上的,具体的内容,请看下面的代码。

    #!/bin/bash
    
    # 安装 Docker CE 的函数
    install_docker() {
        echo "正在安装 Docker CE..."
        yum install -y yum-utils device-mapper-persistent-data lvm2
        yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
        # 替换仓库中的下载地址为阿里云镜像
        sed -i 's|download.docker.com|mirrors.aliyun.com/docker-ce|g' /etc/yum.repos.d/docker-ce.repo
        dnf makecache # 更新缓存
        dnf install -y docker-ce
        # 创建或覆盖 daemon.json 配置文件
        tee /etc/docker/daemon.json << EOF
    {
        "registry-mirrors": ["https://mirror.iscas.ac.cn",
        "https://docker.m.daocloud.io",
        "https://docker.rainbond.cc",
        "https://docker.1panel.live",
        "https://hub.rat.dev"
        ],
        "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
        echo "Docker CE 安装完成,并应用了默认配置。"
        systemctl daemon-reload
        systemctl enable docker --now
    }
    
    # 配置 Docker 的函数
    configure_docker() {
        echo "正在配置 Docker..."
        read -p "请输入 Docker 镜像加速地址(例如 https://docker.mirrors.ustc.edu.cn,留空则跳过): " mirror
        if [ -n "$mirror" ]; then
            sudo tee /etc/docker/daemon.json <<EOF
    {
      "registry-mirrors": ["$mirror"]
    }
    EOF
            echo "Docker 配置完成,镜像加速地址已设置为 $mirror。"
            echo "正在重启 Docker 服务..."
            systemctl restart docker
            echo "Docker 服务已重启。"
        else
            echo "Docker 配置跳过,未设置镜像加速地址。"
        fi
        echo "请根据需要手动重启 Docker 服务以使配置生效。"
    }
    
    # 重启 Docker 的函数
    restart_docker() {
        echo "正在重启 Docker 服务..."
        systemctl restart docker
        echo "Docker 服务已重启。"
    }
    
    # 查看 Docker 服务状态的函数
    check_docker_status() {
        echo "正在查看 Docker 服务状态..."
        systemctl status docker
    }
    
    # 启动 Docker 服务的函数
    start_docker() {
        echo "正在启动 Docker 服务..."
        systemctl start docker
        echo "Docker 服务已启动。"
    }
    
    # 停止 Docker 服务的函数
    stop_docker() {
        echo "正在停止 Docker 服务..."
        systemctl stop docker
        echo "Docker 服务已停止。"
    }
    
    # 查看 Docker 版本的函数
    view_docker_version() {
        echo "正在查看 Docker 版本信息..."
        docker --version
    }
    
    # 查看 Docker 配置的函数
    view_docker_config() {
        echo "正在查看 Docker 配置信息..."
        cat /etc/docker/daemon.json 2>/dev/null || echo "Docker 配置文件不存在。"
    }
    
    # 主菜单
    while true; do
        echo "==== Docker 管理脚本 ===="
        echo "1. 安装 Docker CE"
        echo "2. 配置 Docker"
        echo "3. 重启 Docker"
        echo "4. 查看 Docker 服务状态"
        echo "5. 启动 Docker 服务"
        echo "6. 停止 Docker 服务"
        echo "7. 查看 Docker 版本信息"
        echo "8. 查看 Docker 相关配置信息"
        echo "0. 退出"
        read -p "请选择功能选项: " choice
    
        case $choice in
            1)
                # 执行安装 Docker CE
                install_docker
                ;;
            2)
                # 执行配置 Docker
                configure_docker
                ;;
            3)
                # 执行重启 Docker
                restart_docker
                ;;
            4)
                # 查看 Docker 服务状态
                check_docker_status
                ;;
            5)
                # 启动 Docker 服务
                start_docker
                ;;
            6)
                # 停止 Docker 服务
                stop_docker
                ;;
            7)
                # 查看 Docker 版本信息
                view_docker_version
                ;;
            8)
                # 查看 Docker 相关配置信息
                view_docker_config
                ;;
            0)
                # 退出脚本
                echo "退出脚本。"
                exit 0
                ;;
            *)
                # 无效选择提示
                echo "无效的选择,请重新输入。"
                ;;
        esac
    done

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇