CentOS 7安装Docker详细教程

科技   2024-12-19 14:00   河北  

本文以 CentOS7.8 为例安装 Docker 26.1.4 、Docker Compose、以及 Docker 镜像仓库。

1.安装Docker社区版

1.1 安装准备
1.1.1 检查系统环境

Docker 不支持32位的 CentOS 7 系统,要求系统内核版本为3.10 以上,可以通过命令 uname -r 来查看当前系统的内核版本。

[root@Docker ~]# uname -r
3.10.0-1127.el7.x86_64
[root@Docker ~]
1.1.2卸载旧版本的Docker

如果系统中已经安装了旧版本的Docker,建议卸载后再安装新版本。可以使用命令yum remove来卸载旧版本的Docker及其相关组件。

yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine \
                  docker-ce
1.1.3更新yum源

这里更新为阿里云 yum 源,更新之前先做备份:

[root@Docker ~]# mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
[root@Docker ~]

然后,下载新的 CentOS-Base.repo 到 /etc/yum.repos.d/:

wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo

[root@Docker ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
--2024-12-19 09:59:12--  https://mirrors.aliyun.com/repo/Centos-7.repo
正在解析主机 mirrors.aliyun.com (mirrors.aliyun.com)... 124.236.28.176, 124.236.28.180, 124.238.244.131, ...
正在连接 mirrors.aliyun.com (mirrors.aliyun.com)|124.236.28.176|:443... 已连接。
已发出 HTTP 请求,正在等待回应... 200 OK
长度:2523 (2.5K) [application/octet-stream]
正在保存至: “/etc/yum.repos.d/CentOS-Base.repo”

100%[=======================================================================================================================================================================>] 2,523       --.-K/s 用时 0s      

2024-12-19 09:59:17 (115 MB/s) - 已保存 “/etc/yum.repos.d/CentOS-Base.repo” [2523/2523])

[root@Docker ~]

最后,运行 yum makecache 生成缓存:

[root@Docker ~]# yum makecache

1.2安装Docker
1.2.1安装依赖包

Docker 的安装需要一些依赖包,包括 yum-utils、device-mapper-persistent-data 和 lvm2 等。可以使用命令yum install -y yum-utils device-mapper-persistent-data lvm2来安装这些依赖包。

yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

1.2.2 配置Docker的yum源

为了安装 Docker,需要配置 Docker 的 yum 源。可以使用命令yum-config-manager --add-repo来添加Docker的官方源或国内镜像源(如阿里云镜像源)。添加后,使用命令yum makecache fast来更新 yum 缓存。

[root@Docker ~]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
repo saved to /etc/yum.repos.d/docker-ce.repo
[root@Docker ~]

查看内容:

[root@Docker ~]# cat /etc/yum.repos.d/docker-ce.repo
[docker-ce-stable]
name=Docker CE Stable - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/stable
enabled=1
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-stable-debuginfo]
name=Docker CE Stable - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-stable-source]
name=Docker CE Stable - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/stable
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-test]
name=Docker CE Test - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-test-debuginfo]
name=Docker CE Test - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-test-source]
name=Docker CE Test - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/test
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-nightly]
name=Docker CE Nightly - $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-nightly-debuginfo]
name=Docker CE Nightly - Debuginfo $basearch
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/debug-$basearch/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg

[docker-ce-nightly-source]
name=Docker CE Nightly - Sources
baseurl=https://mirrors.aliyun.com/docker-ce/linux/centos/$releasever/source/nightly
enabled=0
gpgcheck=1
gpgkey=https://mirrors.aliyun.com/docker-ce/linux/centos/gpg
[root@Docker ~]

然后更新 yum 缓存:

[root@Docker ~]# yum makecache fast

1.2.3安装Docker社区版

输入 yum install -y docker-ce 命令开始安装:

[root@Docker ~]# yum install -y docker-ce
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
 * base: mirrors.aliyun.com
 * extras: mirrors.aliyun.com
 * updates: mirrors.aliyun.com
正在解决依赖关系
--> 正在检查事务
---> 软件包 docker-ce.x86_64.3.26.1.4-1.el7 将被 安装
--> 正在处理依赖关系 container-selinux >= 2:2.74,它被软件包 3:docker-ce-26.1.4-1.el7.x86_64 需要
……
已安装:
  docker-ce.x86_64 3:26.1.4-1.el7                                                                                                                                                                                

作为依赖被安装:
  container-selinux.noarch 2:2.119.2-1.911c772.el7_8         containerd.io.x86_64 0:1.6.33-3.1.el7               docker-buildx-plugin.x86_64 0:0.14.1-1.el7         docker-ce-cli.x86_64 1:26.1.4-1.el7        
  docker-ce-rootless-extras.x86_64 0:26.1.4-1.el7            docker-compose-plugin.x86_64 0:2.27.1-1.el7         fuse-overlayfs.x86_64 0:0.7.2-6.el7_8              fuse3-libs.x86_64 0:3.6.1-4.el7            
  slirp4netns.x86_64 0:0.4.3-4.el7_8                        

完毕!
[root@Docker ~]

安装过程截图如下:

1.3启动Docker

先关闭并禁用防火墙随机启动:

[root@Docker ~]# systemctl stop firewalld
[root@Docker ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@Docker ~]

启动之前,输入docker images

[root@Docker ~]# docker images
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
[root@Docker ~]

说明 docker 没有启动,现在启动并查看状态:

[root@Docker ~]# systemctl start docker
[root@Docker ~]# systemctl status docker
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since 四 2024-12-19 10:29:47 CST; 7s ago
     Docs: https://docs.docker.com
 Main PID: 26341 (dockerd)
    Tasks: 10
   Memory: 35.1M
   CGroup: /system.slice/docker.service
           └─26341 /usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

12月 19 10:29:45 Docker systemd[1]: Starting Docker Application Container Engine...
12月 19 10:29:45 Docker dockerd[26341]: time="2024-12-19T10:29:45.888362136+08:00" level=info msg="Starting up"
12月 19 10:29:46 Docker dockerd[26341]: time="2024-12-19T10:29:46.224219879+08:00" level=info msg="Loading containers: start."
12月 19 10:29:46 Docker dockerd[26341]: time="2024-12-19T10:29:46.898469964+08:00" level=info msg="Loading containers: done."
12月 19 10:29:47 Docker dockerd[26341]: time="2024-12-19T10:29:47.005955247+08:00" level=info msg="Docker daemon" commit=de5c9cf containerd-snapshotter=false storage-driver=overlay2 version=26.1.4
12月 19 10:29:47 Docker dockerd[26341]: time="2024-12-19T10:29:47.006599035+08:00" level=info msg="Daemon has completed initialization"
12月 19 10:29:47 Docker dockerd[26341]: time="2024-12-19T10:29:47.169172927+08:00" level=info msg="API listen on /run/docker.sock"
12月 19 10:29:47 Docker systemd[1]: Started Docker Application Container Engine.
[root@Docker ~]

查看 docker 版本:

[root@Docker ~]# docker -v
Docker version 26.1.4, build 5650f9b
[root@Docker ~]

或者同时可以查看到服务端和客户端信息:

[root@Docker ~]# docker version
Client: Docker Engine - Community
 Version:           26.1.4
 API version:       1.45
 Go version:        go1.21.11
 Git commit:        5650f9b
 Built:             Wed Jun  5 11:32:04 2024
 OS/Arch:           linux/amd64
 Context:           default

Server: Docker Engine - Community
 Engine:
  Version:          26.1.4
  API version:      1.45 (minimum version 1.24)
  Go version:       go1.21.11
  Git commit:       de5c9cf
  Built:            Wed Jun  5 11:31:02 2024
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.6.33
  GitCommit:        d2d58213f83a351ca8f528a95fbd145f5654e957
 runc:
  Version:          1.1.12
  GitCommit:        v1.1.12-0-g51d5e94
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
[root@Docker ~]
1.4配置镜像加速

由于 Docker 默认从官方镜像源下载镜像,速度可能较慢。可以配置国内镜像源(如阿里云镜像源)来加速镜像的下载。

编辑 /etc/docker/daemon.json 文件内容,如下:

[root@Docker ~]# vim /etc/docker/daemon.json
[root@Docker ~]# cat /etc/docker/daemon.json 
{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://dockerhub.azk8s.cn",
    "https://mirror.ccs.tencentyun.com",
    "https://registry.cn-hangzhou.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.1panel.live",
    "https://atomhub.openatom.cn/",
    "https://hub.uuuadc.top",
    "https://docker.anyhub.us.kg",
    "https://dockerhub.jobcher.com",
    "https://dockerhub.icu",
    "https://docker.ckyl.me",
    "https://docker.awsl9527.cn"
  ]
}

重载 systemd 服务和重启 docker :

[root@Docker ~]# systemctl daemon-reload
[root@Docker ~]# systemctl restart docker
[root@Docker ~]

2.安装Docker compose

Docker Compose 是一个用于定义和运行多容器应用程序的工具。它是实现流畅、高效开发和部署体验的关键。

Compose 简化了对整个应用程序堆栈的控制,使得在单个、易于理解的 YAML 配置文件中管理服务、网络和卷变得轻而易举。然后,只需一个命令,您就可以从配置文件中创建并启动所有服务。

Compose 适用于所有环境,包括生产环境、暂存环境、开发环境、测试环境以及持续集成(CI)工作流。它还提供了管理应用程序整个生命周期的命令:

  • 启动、停止和重建服务
  • 查看运行服务的状态
  • 实时查看运行服务的日志输出
  • 在服务上运行一次性命令
2.1下载docker-compose文件

通过curl命令下载,并指定保存到 /usr/local/bin/docker-compose 目录下:

curl -L https://github.com/docker/compose/releases/download/v2.32.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

如下:

[root@Docker ~]# curl -L https://github.com/docker/compose/releases/download/v2.32.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
100 61.6M  100 61.6M    0     0  2078k      0  0:00:30  0:00:30 --:--:-- 2153k
[root@Docker ~]

2.2增加文件执行权限
[root@Docker ~]# chmod +x /usr/local/bin/docker-compose
[root@Docker ~]

查看版本:

[root@Docker ~]# docker-compose version
Docker Compose version v2.32.1
[root@Docker ~]

3.Docker镜像仓库搭建

搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。

https://docs.docker.com/registry/

3.1搭建简化版的镜像仓库

Docker 官方提供了一个简化版的 Docker Registry 镜像,具备完整的仓库管理功能,但缺乏图形化界面。下面是一个简单的搭建命令:

docker run -d \
    --restart=always \
    --name registry \
    -p 5000:5000 \
    -v registry-data:/var/lib/registry \
    registry

这个命令中的参数说明:

  • -d: 后台运行容器。
  • --restart=always: 设置容器总是在 Docker 启动时重新启动。
  • --name registry: 为容器指定一个名字,这里是 registry。
  • -p 5000:5000: 将主机的 5000 端口映射到容器的 5000 端口。
  • -v registry-data:/var/lib/registry: 挂载数据卷 registry-data 到容器内的 /var/lib/registry 目录,用于持久化存储镜像数据。
  • registry: 使用的镜像名称。

通过上述命令,就成功运行了一个 Docker Registry 服务。访问:

http://192.168.250.22:5000/v2/_catalog

可以查看当前私有镜像服务中包含的镜像:

暂为空。

3.2搭建带有图形化界面的镜像仓库

通过 Docker Compose,可以很容易地搭建一个带有图形化界面的 Docker Registry 服务。

以下是一个简单的 docker-compose.yml 文件:

version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=我的私有仓库
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry
3.3 配置 Docker 信任地址

这里采用的是 http 协议,默认不被 Docker 信任,所以需要做一个配置:

编辑 /etc/docker/daemon.json文件:

[root@Docker ~]# vim /etc/docker/daemon.json
[root@Docker ~]

然后添加:

"insecure-registries": ["http://192.168.250.22:8080"]

[root@Docker ~]# cat /etc/docker/daemon.json
{
  "registry-mirrors": [
    "https://registry.docker-cn.com",
    "http://hub-mirror.c.163.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://dockerhub.azk8s.cn",
    "https://mirror.ccs.tencentyun.com",
    "https://registry.cn-hangzhou.aliyuncs.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://docker.1panel.live",
    "https://atomhub.openatom.cn/",
    "https://hub.uuuadc.top",
    "https://docker.anyhub.us.kg",
    "https://dockerhub.jobcher.com",
    "https://dockerhub.icu",
    "https://docker.ckyl.me",
    "https://docker.awsl9527.cn"
  ],
  "insecure-registries": ["http://192.168.250.22:8080"]
}

然后重载 Docker 守护进程配置并重启 Docker:

[root@Docker ~]# systemctl daemon-reload
[root@Docker ~]# systemctl restart docker

这样,就成功搭建了一个简化版的 Docker 镜像仓库,并且还可以使用 Docker Compose 部署一个带有图形化界面的 Docker Registry。

然后运行命令:docker-compose up -d

[root@Docker ~]# docker-compose up -d
WARN[0000] /root/docker-compose.yml: the attribute `version` is obsolete, it will be ignored, please remove it to avoid potential confusion 
[+] Running 12/12
 ✔ ui Pulled                                                                                                                                                                                               50.9s 
   ✔ 540db60ca938 Pull complete                                                                                                                                                                            15.1s 
   ✔ 197dc8475a23 Pull complete                                                                                                                                                                            16.7s 
   ✔ 39ea657007e5 Pull complete                                                                                                                                                                            16.9s 
   ✔ 37afbf7d4c3d Pull complete                                                                                                                                                                            17.0s 
   ✔ 0c01f42c3df7 Pull complete                                                                                                                                                                            17.3s 
   ✔ d590d87c9181 Pull complete                                                                                                                                                                            17.4s 
   ✔ 3333c94ae44f Pull complete                                                                                                                                                                            17.6s 
   ✔ 33d7cca6fc9f Pull complete                                                                                                                                                                            17.9s 
   ✔ 076b2dd9bdd1 Pull complete                                                                                                                                                                            18.0s 
   ✔ b70198f04ee7 Pull complete                                                                                                                                                                            18.2s 
   ✔ 1fb6c5acc953 Pull complete                                                                                                                                                                            18.3s 
[+] Running 3/3
 ✔ Network root_default       Created                                                                                                                                                                       0.2s 
 ✔ Container root-registry-1  Started                                                                                                                                                                       1.6s 
 ✔ Container root-ui-1        Started                                                                                                                                                                       2.0s 
[root@Docker ~]

然后输入仓库地址:

http://192.168.250.22:8080/

就可以看到私有镜像查看的 UI 界面,如下:


Python运维实践
Python运维实践,专注于互联网技术的总结与交流,内容涉及Python自动化运维、Django框架、园区网络技术、linux云计算、系统架构及网络空间安全等知识的实践与分享。
 最新文章