CentOS7 arm64 docker 离线安装脚本

418 阅读1分钟

离线包下载参考

docker ce arm64 静态编译版本下载地址_hkNaruto的博客-CSDN博客

脚本目录结构

./bin
./bin/containerd
./bin/containerd-shim
./bin/ctr
./bin/docker
./bin/docker-compose
./bin/docker-init
./bin/docker-proxy
./bin/dockerd
./bin/runc
./templates
./templates/daemon.json.j2
./templates/docker.service.j2
./install.sh

daemon.json.j2

{
  "data-root": "/var/lib/docker",
  "exec-opts": ["native.cgroupdriver=cgroupfs"],
  "hosts": ["unix:///var/run/docker.sock"],  
  "max-concurrent-downloads": 10,
  "log-driver": "json-file",
  "log-level": "warn",
  "log-opts": {
    "max-size": "15m",
    "max-file": "3"
    },
  "storage-driver": "overlay2"
}

docker.service.j2

[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.io

[Service]
Environment="PATH=/opt/kube/bin:/bin:/sbin:/usr/bin:/usr/sbin"
ExecStart=/opt/kube/bin/dockerd 
ExecStartPost=/sbin/iptables -I FORWARD -s 0.0.0.0/0 -j ACCEPT
ExecReload=/bin/kill -s HUP $MAINPID
Restart=always
RestartSec=5
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
Delegate=yes
KillMode=process

[Install]
WantedBy=multi-user.target

install.sh

#!/bin/bash
set -x
# 禁用selinux
sed -i 's/SELINUX=.*/SELINUX=disabled/g' /etc/selinux/config
setenforce 0

STORAGE_DIR="/var/lib/docker"
etc_dir="/etc/docker"
bin_dir="/opt/kube/bin"

docker_svc=`systemctl status docker|grep Active || echo "NoFound"`
# containerd_svc=`systemctl status containerd|grep Active || echo "NoFound"`

workdir=`dirname $0`
(
    cd ${workdir}

    if [ "${docker_svc}" == "NoFound" ]; then
        echo "create ${etc_dir}"
        mkdir ${etc_dir} -p

        echo "crate ${bin_dir}"
        mkdir ${bin_dir} -p

        echo "copy bin files"
        cp -vf bin/* ${bin_dir}"/"

        echo "flush-iptables"
        iptables -P INPUT ACCEPT \
            && iptables -F && iptables -X \
            && iptables -F -t nat && iptables -X -t nat \
            && iptables -F -t raw && iptables -X -t raw \
            && iptables -F -t mangle && iptables -X -t mangle

        echo "创建docker的systemd unit文件"
        cp -vf templates/docker.service.j2 /etc/systemd/system/docker.service

        echo "开机启用docker 服务"
        systemctl enable docker

        echo "开启docker 服务"
        systemctl daemon-reload && systemctl restart docker

        echo "轮询等待docker服务运行"
        while [ 1 -eq 1 ]; do
            docker_status=`systemctl status docker.service|grep Active`
            if [ "${docker_status}" == "" ]; then
                echo "wait docker start"
                sleep 1
            else
                echo "docker started"
                break
            fi
        done

        echo "配置 docker 命令软链接"
        ln -s -f ${bin_dir}/docker /usr/bin/docker

        echo "docker安装完成"
    fi
)

echo "enable ipv4 forward"
sed -i '/# -- enable ipv4 forward begin --/,/# -- enable ipv4 forward end --/d' /etc/sysctl.conf
cat << EOF >> /etc/sysctl.conf
# -- enable ipv4 forward begin --
net.ipv4.ip_forward=1
# -- enable ipv4 forward end --
EOF
sysctl -p
echo "done"

systemctl restart docker
echo "restart docker done. (for CentOS7 iptables nat DOCKER)"
sleep 10s