arm版本群晖安装Docker,非套件.

安装

安装目录

# 命令存放目录
BIN_PATH='/usr/sbin'
DATA_ROOT='/volume1/docker'

# 准备目录
mkdir -p /etc/docker
mkdir -p /var/lib/docker
mkdir -p $DATA_ROOT

下载安装docker

# docker 版本
DOCKER_VER='20.10.9'

# 下载镜像地址
# DOCKER_MIRROR='https://download.docker.com'
DOCKER_MIRROR='https://mirrors.163.com/docker-ce'
GITHUB_MIRROR='https://cors.isteed.cc'

# 安装docker
curl -fLo docker.tgz "$DOCKER_MIRROR/linux/static/stable/$(uname -m)/docker-${DOCKER_VER}.tgz" && tar xvf docker.tgz && chmod -R +x docker && mv docker/* $BIN_PATH && rm -rf docker docker.tgz

# 安装docker-compose
curl -fLo $BIN_PATH/docker-compose "$GITHUB_MIRROR/https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" && chmod +x $BIN_PATH/docker-compose

docker控制脚本

tee /etc/docker/daemon.json <<-EOF
{
  "storage-driver": "vfs",
  "data-root": "$DATA_ROOT",
  "experimental": true,
  "registry-mirrors": [
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com"
  ]
}
EOF

tee $BIN_PATH/docker.sh <<-'EOF'
#!/bin/sh
set -e

if [ "$(id -u)" != 0 ]; then
	echo >&2 "error: must be root to invoke $0"
	exit 1
fi

PIDFILE='/var/run/docker.pid'
pid() {
	if [ -s "$PIDFILE" ]; then
		local pid
		pid="$(cat "$PIDFILE")"
		if ps "$pid" > /dev/null 2>&1; then
			echo "$pid"
			return 0
		fi
	fi
	return 1
}

start() {
	if pid="$(pid)"; then
		echo >&2 "error: Docker daemon is already running ($pid)"
		exit 1
	fi

	local KER_MOD="aufs macvlan ip_tables iptable_filter iptable_nat ip_conntrack ipt_state"

	for mod in $KER_MOD; do
		checkmod=`lsmod | grep -i ${mod} | wc -l`
			if [[ $checkmod -eq 0 ]]; then
				modprobe ${mod}
			fi
	done
	sysctl -w net.ipv4.ip_forward=1
	sysctl -w net.ipv6.conf.all.forwarding=1

	EXTRA_ARGS="-H tcp://0.0.0.0:2375"

	mkdir -p /var/lib/docker/log

	echo "Starting dockerd"
	dockerd -H unix:// $EXTRA_ARGS --pidfile "$PIDFILE" >> /var/lib/docker/log/docker.log 2>&1 &
}

stop() {
	if pid="$(pid)"; then
		echo "Stopping dockerd ($pid)"
		kill "$pid"

		i=30
		while pid > /dev/null; do
			sleep 1
			i=$(expr $i - 1)
			if [ "$i" -le 0 ]; then
				echo >&2 "error: failed to stop Docker daemon"
				exit 1
			fi
		done
	fi
	if ! pid="$(pid)"; then
		for mod in $KER_MOD; do
		   checkmod=`lsmod | grep -i ${mod} | wc -l`
		   if [[ $checkmod -ge 1 ]]; then
			   modprobe -r ${mod}
		   fi
		done
	fi
}

restart() {
	stop
	start
}

reload() {
	if ! pid="$(pid)"; then
		echo >&2 "error: Docker daemon is not running"
		exit 1
	fi
	kill -s HUP "$pid"
}

status() {
	if pid > /dev/null; then
		echo "Docker daemon is running"
		exit 0
	else
		echo "Docker daemon is not running"
		exit 1
	fi
}

case "$1" in
	start|stop|restart|reload|status)
		"$1"
		;;

	*)
		echo "Usage $0 {start|stop|restart|reload|status}"
		exit 1
		;;
esac
EOF

脚本执行权限

chmod +x $BIN_PATH/docker.sh

使用方法

# 启动
docker.sh start
# 停止
docker.sh stop
# 重启
docker.sh restart

可在计划任务中设置启动执行 docker.sh start

卸载

rm /usr/local/bin/ctr
rm /usr/local/bin/containerd-shim-runc-v2
rm /usr/local/bin/containerd
rm /usr/local/bin/containerd-shim
rm /usr/local/bin/dockerd
rm /usr/local/bin/runc
rm /usr/local/bin/docker-proxy
rm /usr/local/bin/docker
rm /usr/local/bin/docker-init
rm /usr/local/bin/docker-compose
rm /usr/local/bin/docker.sh
rm -rf /var/lib/docker
上次更新: