本文以 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 界面,如下: