离线安装docker


离线安装docker

参考:https://yeasy.gitbook.io/docker_practice/install/offline

1、yum本地文件安装

1.1、过程记录

准备安装包

在一台有网络的机器上下载安装包

安装docker源

wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sudo sed -i 's+download.docker.com+mirrors.tuna.tsinghua.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum update

查看可用的docker版本

yum list docker-ce --showduplicates|sort -r

下载指定版本

mkdir -p /home/docker_packages/
yum install --downloadonly --downloaddir=/home/docker_packages/ docker-ce docker-ce-cli

执行发现系统已安装docker,改为执行update

yum update --downloadonly --downloaddir=/home/docker_packages/ docker-ce docker-ce-cli

再次执行报错,证书过期

https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/centos/7/x86_64/stable/repodata/repomd.xml: [Errno 14] curl#60 - "Peer's Certificate has expired."

一番排查后是虚拟机时间不对

yum install ntpdate -y
ntpdate -u ntp.aliyun.com

然后再下载

yum update --downloadonly --downloaddir=/home/docker_packages/ docker-ce docker-ce-cli

报错

[Errno -1] 软件包与预期下载的不符。建议:运行 yum --enablerepo=docker-ce-stable clean metadata

执行

yum --enablerepo=docker-ce-stable clean metadata

再下载

yum update --downloadonly --downloaddir=/home/docker_packages/ docker-ce docker-ce-cli

还是报错

覆盖,不使用清华源

wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
yum update --downloadonly --downloaddir=/home/docker_packages/ docker-ce docker-ce-cli

下载成功。可能是之前安装的docker不是清华源安装的。所以更新的时候不匹配。

这个下载的只有2个文件,和文档不符。也许是因为之前已经安装过,有些已存在的依赖没有被下载。为避免意外,克隆一台全新的虚拟机来安装。

途中还是报错,软件包与预期下载的不符。

https://blog.csdn.net/hylaking/article/details/87978819

执行

yum clean all
yum makecache

还是报错,覆盖

wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
yum clean all
yum makecache

再次下载

mkdir -p /home/docker_packages/
yum install --downloadonly --downloaddir=/home/docker_packages/ docker-ce docker-ce-cli

下载完成

-rw-r--r--. 1 root root  77K 8月  23 2019 audit-libs-python-2.8.5-4.el7.x86_64.rpm
-rw-r--r--. 1 root root 295K 11月 12 2018 checkpolicy-2.5-8.el7.x86_64.rpm
-rw-r--r--. 1 root root  34M 9月  16 07:20 containerd.io-1.6.24-3.1.el7.x86_64.rpm
-rw-r--r--. 1 root root  40K 7月   6 2020 container-selinux-2.119.2-1.911c772.el7_8.noarch.rpm
-rw-r--r--. 1 root root  14M 7月  24 23:07 docker-buildx-plugin-0.11.2-1.el7.x86_64.rpm
-rw-r--r--. 1 root root  25M 9月  15 21:42 docker-ce-24.0.6-1.el7.x86_64.rpm
-rw-r--r--. 1 root root  14M 9月  15 21:42 docker-ce-cli-24.0.6-1.el7.x86_64.rpm
-rw-r--r--. 1 root root 9.2M 9月  15 21:42 docker-ce-rootless-extras-24.0.6-1.el7.x86_64.rpm
-rw-r--r--. 1 root root  13M 9月  15 21:42 docker-compose-plugin-2.21.0-1.el7.x86_64.rpm
-rw-r--r--. 1 root root  82K 4月  29 2020 fuse3-libs-3.6.1-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  55K 4月  29 2020 fuse-overlayfs-0.7.2-6.el7_8.x86_64.rpm
-rw-r--r--. 1 root root  67K 8月  23 2019 libcgroup-0.41-21.el7.x86_64.rpm
-rw-r--r--. 1 root root 113K 11月 12 2018 libsemanage-python-2.5-14.el7.x86_64.rpm
-rw-r--r--. 1 root root 458K 4月   4 2020 policycoreutils-python-2.5-34.el7.x86_64.rpm
-rw-r--r--. 1 root root  33K 7月   4 2014 python-IPy-0.75-6.el7.noarch.rpm
-rw-r--r--. 1 root root 621K 11月 12 2018 setools-libs-3.3.8-4.el7.x86_64.rpm
-rw-r--r--. 1 root root  82K 4月  29 2020 slirp4netns-0.4.3-4.el7_8.x86_64.rpm

拷贝后执行安装

rpm -Uvh *.rpm --nodeps --force

安装成功

1.2、安装流程总结

在一台有网且未安装docker的虚拟机上下载docker的rpm包,系统版本最好与要离线安装docker的系统是一致的。

wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
yum clean all
yum makecache
mkdir -p /home/docker_packages/
yum install --downloadonly --downloaddir=/home/docker_packages/ docker-ce docker-ce-cli

拷贝rpm文件到离线的系统

执行安装

rpm -Uvh *.rpm --nodeps --force

2、本地源安装

2.1、安装过程记录

单纯的创建本地源,可以参考:https://www.vos.cn/os/387.html

下载Everything系统镜像(阿里镜像,选择OS镜像下载)

https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Everything-2207-02.iso

虚拟机挂载

mount /dev/cdrom /mnt

安装reposync

yum install yum-utils

下载docker-ec源仓库

wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
mkdir -p /home/html/docker-ce
reposync -r docker-ce-stable -p /home/html/docker-ce/

配置本地源(可选)

# 删除其他网络源
rm -f /etc/yum.repo.d/*
# 添加本地源
cat >/etc/yum.repos.d/local_files.repo<< EOF
[Local_Files]
name=Local_Files
baseurl=file:///mnt
enable=1
gpgcheck=0
gpgkey=file:///mnt/RPM-GPG-KEY-CentOS-7
EOF

安装createrepo

yum clean all
yum install createrepo -y
createrepo /home/html/docker-ce/

# 使用overlay报错,不支持底层iso的文件系统
#mkdir -p /home/html/base_upper /home/html/base_work /home/html/base
#mount -t overlay overlay -olowerdir=/mnt/Packages/,upperdir=/home/html/base_upper,workdir=/home/html/base_work /home/html/base
mkdir -p /home/html/base
cp /mnt/Packages/* /home/html/base
createrepo /home/html/base/

开启http文件服务器

cd /home/html
nohup python -m SimpleHTTPServer 80 >./console.log 2>&1 &

客户端设置

rm -f /etc/yum.repo.d/*
cat >/etc/yum.repos.d/local_files.repo<< EOF
[base]
name=base
# 改成B服务器地址
baseurl=http://192.168.31.197/base
enable=1
gpgcheck=0
proxy=_none_
[docker_ce]
name=docker_ce
# 改成B服务器地址
baseurl=http://192.168.31.197/docker-ce
enable=1
gpgcheck=0
proxy=_none_
EOF

安装docker

yum install docker-ce

报错

---> 软件包 docker-compose-plugin.x86_64.0.2.21.0-1.el7 将被 安装
--> 解决依赖关系完成
错误:软件包:3:docker-ce-24.0.6-1.el7.x86_64 (docker_ce)
          需要:container-selinux >= 2:2.74
错误:软件包:containerd.io-1.6.24-3.1.el7.x86_64 (docker_ce)
          需要:container-selinux >= 2:2.74
错误:软件包:docker-ce-rootless-extras-24.0.6-1.el7.x86_64 (docker_ce)
          需要:slirp4netns >= 0.4
错误:软件包:docker-ce-rootless-extras-24.0.6-1.el7.x86_64 (docker_ce)
          需要:fuse-overlayfs >= 0.7

到服务器上执行(此时服务器用的本地文件源)

yum search fuse-overlayfs

没有这个包,说明Everything的iso里没有这个包

服务器恢复为公共网络源,查差的这几个包的信息

yum provides fuse-overlayfs
yum provides slirp4netns
yum provides container-selinux

发现都来自extras源下

列出源列表

yum repolist

下载extras源

参考:https://www.vos.cn/os/387.html

mkdir -p /home/html/extras
reposync -g -l -d -m --repoid=extras --newest-only --download-metadata --download_path=/home/html/
createrepo --worker=6 /home/html/extras/

修改客户端设置

[base]
name=base
# 改成B服务器地址
baseurl=http://192.168.31.197/base
enable=1
gpgcheck=0
proxy=_none_

[extras]
name=extras
# 改成B服务器地址
baseurl=http://192.168.31.197/extras
enable=1
gpgcheck=0
proxy=_none_

[docker_ce]
name=docker_ce
# 改成B服务器地址
baseurl=http://192.168.31.197/docker-ce
enable=1
gpgcheck=0
proxy=_none_

安装docker

yum install docker-ce

2.2、安装流程总结

找一台有网的机器

安装工具

yum install yum-utils createrepo

下载基本软件(阿里镜像,选择OS镜像,下载Everything系统镜像)

https://mirrors.aliyun.com/centos/7.9.2009/isos/x86_64/CentOS-7-x86_64-Everything-2207-02.iso

挂载Everything镜像

mount /dev/cdrom /mnt

开始制作

mkdir -p /home/html/{base,extras,docker-ce}

拷贝base软件

cp /mnt/Packages/* /home/html/base/
createrepo --worker=6 -v /home/html/base/

同步docker-ce源

wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
mkdir -p /home/html/docker-ce
reposync -r docker-ce-stable -p /home/html/docker-ce/
createrepo /home/html/docker-ce/

这一步可以参考:https://www.vos.cn/os/387.html,只下载最新的(未测试)

reposync -g -l -d -m --repoid=docker-ce-stable --newest-only --download-metadata --download_path=/home/html

说明:

-g, --gpgcheck        Remove packages that fail GPG signature checking after downloading
-l, --plugins         enable yum plugin support
-d, --delete          delete local packages no longer present in repository
-m, --downloadcomps   also download comps.xml

-r REPOID, --repoid=REPOID
                        specify repo ids to query, can be specified multiple
                        times (default is all enabled)

-n, --newest-only     Download only newest packages per-repo

--download-metadata   download all the non-default metadata

-p DESTDIR, --download_path=DESTDIR
                        Path to download packages to: defaults to current dir
  --norepopath          Don't add the reponame to the download path. Can only
                        be used when syncing a single repository (default is
                        to add the reponame)

同步extras源

mkdir -p /home/html/extras
reposync -g -l -d -m --repoid=extras --newest-only --download-metadata --download_path=/home/html/
createrepo --worker=6 /home/html/extras/

开启http文件服务器

cd /home/html
nohup python -m SimpleHTTPServer 80 >./console.log 2>&1 &

客户端设置

[base]
name=base
# 改成服务器地址
baseurl=http://192.168.31.197/base
enable=1
gpgcheck=0
proxy=_none_

[extras]
name=extras
# 改成服务器地址
baseurl=http://192.168.31.197/extras
enable=1
gpgcheck=0
proxy=_none_

[docker_ce]
name=docker_ce
# 改成服务器地址
baseurl=http://192.168.31.197/docker-ce
enable=1
gpgcheck=0
proxy=_none_

客户端安装

yum install docker-ce

3、一键安装脚本

#!/bin/bash
source /etc/profile
# #############
# 离线服务器一键安装docker
# 需要docker_packages.7z
# 下载地址:
#       https://www.123pan.com/s/xMzAjv-wm7dv.html提取码:4U5d
# 实际位于123云盘:/linux软件包/docker_packages.tgz
# 校验 md5 a5b43193a62bca23786cd77b203030b6

# docker_packages.7z 中包含docker安装所需的rpm包,这个包使用以下命令,在虚拟机中生成
    #wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
    #yum clean all
    #yum makecache
    #mkdir -p /home/docker_packages/
    #yum install --downloadonly --downloaddir=/home/docker_packages/ docker-ce docker-ce-cli
    #tar czvf dockerker_packages.tgz /home/docker_packages/

# 虚拟机环境:
# 系统: CentOS Linux release 7.9.2009 (Core)
# 内核: Linux vm0 3.10.0-1160.71.1.el7.x86_64 #1 SMP Tue Jun 28 15:37:28 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux
# glibc: ldd (GNU libc) 2.17
# docker版本: 24.0.6-1.el7.x86_64
# #############

/usr/bin/docker -v && {
  echo "docker 已安装"
  exit 0
}
cd "$(dirname "$0")" || exit 1
[ -f "./docker_packages.tgz" ] || {
  echo "docker_packages.tgz未找到"
  exit 2
}
[ `md5sum docker_packages.tgz |awk '{print $1}'` = a5b43193a62bca23786cd77b203030b6 ]|| {
  echo "docker_packages.tgz文件md5有误,文件可能弄错了或被篡改"
  exit 3
}
tar xzvf docker_packages.tgz || {
  echo "解压失败,请手动解压到docker_packages.tgz到当前目录"
  exit 4
}
# 安装docker
cd docker_packages && yum localinstall *.rpm && service docker start && docker -v