背景

最近在做私有化部署项目,项目的整体方案基于docker。考虑到客户的运行环境可能无法连接到公网,因此需要制作docker的离线安装。整个离线安装分为三个部分:1)准备docker离线安装包,2)docker离线源配置,3)离线安装docker

准备docker离线安装包

目前只考虑Linux及其发行版的服务器。docker对于机器和操作系统的要求:

  • 内核版本3.10及其以上
  • 操作系统位数为64位
  • CPU架构为x86_64或amd64(目前也有别的支持)
  • 内核开启并支持cgroup和命名空间

简单点说来,常用的 CentOS 7及其以上,Ubuntu 14及其以上,Fedora 24及其以上,Debian 8及其以上,还有 Raspbian 等。这个部分具体可以参考[1]。这个是docker官方的在线安装脚本,本文中的内容主要也是参考这个脚本。

对于不同的操作系统,不同的架构,需要的docker安装包不同,所以要分开处理。目前主流的包管理工具是 apt-get 和 yum,这两者也分别对应到Ubuntu\Debian和CentOS\Fedora系列操作系统。不管是哪种包管理工具,基本思路都是

  1. 下载docker安装包及其依赖
  2. 对下载下来的安装包制作本地源
  3. 准备本地源配置文件

对于 apt-get 来说,可以执行以下脚本,该脚本抽取自参考链接[1]。对于流程的解释可以参考链接[2]

#!/bin/sh

lsb_dist="ubuntu"
dist_version="xenial"   # 14-trusty 16-xenial 17-zesty

DOWNLOAD_URL="https://mirrors.aliyun.com/docker-ce"
DOWNLOAD_DIR="/home/work/docker-packages/$lsb_dist-$dist_version"

set -e
apt_repo="deb [arch=$(dpkg --print-architecture)] $DOWNLOAD_URL/linux/$lsb_dist $dist_version stable"

if [ ! -x "$DOWNLOAD_DIR" ]; then
    mkdir -p "$DOWNLOAD_DIR"
fi

apt-get update -qq >/dev/null
apt-get install -y -qq apt-transport-https ca-certificates curl dpkg-dev > /dev/null
curl -fsSL "$DOWNLOAD_URL/linux/$lsb_dist/gpg" | apt-key add - > /dev/null
echo "$apt_repo" > /etc/apt/sources.list.d/docker.list
if [ "$lsb_dist" = "debian" ] && [ "$dist_version" = "wheezy" ]; then
    sed -i "/deb-src.*download\.docker/d" /etc/apt/sources.list.d/docker-ce.list
fi
# 只下载docker和依赖的安装包
apt-get update -qq >/dev/null
apt-get --download-only -o Dir::Cache="./" -o Dir::Cache::archives=$DOWNLOAD_DIR install -y --no-install-recommends docker-ce > /dev/null

# 为安装包建立索引,方便后续加载为本地源安装
touch $DOWNLOAD_DIR/Packages.gz
dpkg-scanpackages $DOWNLOAD_DIR /dev/null | gzip > $DOWNLOAD_DIR/Packages.gz

我在制作的时候,对于生成的Packages.gz,调整里面每一个软件的 Filename 项,只留下软件名,不保留前面的目录路径。具体可以使用sed命令。

对于 yum 来说,可以执行以下脚本,该脚本也抽取自参考链接[1]。对于流程的解释可以参考链接[3]

#!/bin/sh

lsb_dist="centos"
dist_version="7"

DOWNLOAD_URL="https://mirrors.aliyun.com/docker-ce"
DOWNLOAD_DIR="/home/work/docker-packages/$lsb_dist-$dist_version"

set -e
yum_repo="$DOWNLOAD_URL/linux/$lsb_dist/docker-ce.repo"

if [ ! -x "$DOWNLOAD_DIR" ]; then
    mkdir -p "$DOWNLOAD_DIR"
fi

# 只下载docker和依赖的安装包
yum-config-manager --add-repo $yum_repo
yum makecache
yum install --downloadonly --downloaddir=$DOWNLOAD_DIR docker-ce

# 为安装包建立索引,方便后续加载为本地源安装
createrepo $DOWNLOAD_DIR

准备docker离线源配置

将刚刚准备好的安装包内容\$lsb_dist-$dist_version这个目录下)拷贝到目标机器上,比如统一放到/home/work/docker-packages目录下。基于这个路径:

对于 apt-get 系的离线源配置文件为 docker-ce.list,内容如下

deb [trusted=yes] file:/home/work/docker-packages ./

对于 yum 系的离线源配置文件为 docker-ce.repo,内容如下

[Local_docker_yum]
name=Local Docker Yum Repository
baseurl=file:///home/work/docker-packages/
enabled=1
gpgcheck=0

离线安装docker

对于 apt-get 将离线源配置文件 docker-ce.list 拷贝到 /etc/apt/sources.list.d 目录下。如果电脑不能联网,先将 /etc/apt/sources.list 文件重命名;然后执行apt-get update;再把刚刚重命名的 /etc/apt/sources.list 改回来。如果不这么改的话,在apt-get update的时候可能联网失败而无法完成更新。
最后执行 apt-get install docker-ce

对于 yum 将离线源配置文件 docker-ce.repo 拷贝到 /etc/yum.repos.d/ 目录下。如果电脑不能联网,先将 /etc/yum.repos.d/ 目录下其他配置文件重命名;然后执行 yum makecache;最后再把刚刚重命名的文件改回来。这么做的理由同上。
最后执行 yum install docker-ce

参考链接:
[1]https://get.docker.com/
[2]http://blog.csdn.net/candcplusplus/article/details/52156324
[3]http://www.cnblogs.com/zzyyxxjc/p/4346975.html

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐