前言
有人会问:为什么不直接apt 或者 yum 安装?
我的回答:我喜欢把控每个细节的感觉
安装了的需要卸载 Docker !!!
里面有两个文件可能直接在 linux 下载不下来,需要手动下载后上传到 linux ,脚本中会根据不同的 linux 架构输出不同的地址
安装脚本
使用说明:直接复制后重命名(随便): install_docker.sh
运行脚本方式1:chmod +x install_docker.sh && ./install_docker.sh
运行脚本方式2:bash install_docker.sh
#!/bin/bash
echoRed() {
echo -e "\e[31m$1\e[0m"
}
echoGreen() {
echo -e "\e[32m$1\e[0m"
}
# 获取当前文件夹
get_project_root() {
project_root=$(pwd) #
}
# 获取系统架构
get_arch() {
arch=$(uname -m)
}
# 下载 Docker-compose
download_docker_compose() {
echoRed "如果下载不下来直接去手动下载后放到当前文件夹:https://github.com/docker/compose/releases/download/${docker_compose_version}/docker-compose-linux-${arch}"
echoRed "然后注释掉结尾第 3 步 download_docker_compose 方法的调用"
curl -o ${project_root}/docker-compose https://github.com/docker/compose/releases/download/${docker_compose_version}/docker-compose-linux-${arch}
}
# 下载 docker tar 包
download_docker_tar() {
echoRed "如果下载不下来直接去手动下载后放到当前文件夹:https://download.docker.com/linux/static/stable/${arch}/docker-${docker_version}.tgz"
echoRed "然后注释掉结尾第 4 步 download_docker_tar 方法的调用"
curl -o ${project_root}/docker-${docker_version}.tgz https://download.docker.com/linux/static/stable/${arch}/docker-${docker_version}.tgz
}
# 安装 docker-compose
install_docker_compose() {
mkdir -p /usr/local/bin
chmod +x ${project_root}/docker-compose-linux-${arch}
mv -f ${project_root}/docker-compose-linux-${arch} /usr/local/bin/docker-compose
}
# 写入 docker.service
write_docker_service() {
mkdir -p /lib/systemd/system
cat <<EOF >/lib/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target
EOF
}
# 写入 docker 加速镜像
write_docker_daemon_json() {
mkdir -p /etc/docker
cat <<EOF >/etc/docker/daemon.json
{
"registry-mirrors": [
"https://mirror.ccs.tencentyun.com"
]
}
EOF
}
# 写入 docker.socket
write_docker_socket() {
cat <<EOF >/lib/systemd/system/docker.socket
[Unit]
Description=Docker Socket for the API
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
}
# 写入 containerd.service
write_containerd_service() {
cat <<EOF >/lib/systemd/system/containerd.service
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target
[Service]
ExecStartPre=-/sbin/modprobe overlay
ExecStart=/usr/bin/containerd
Type=notify
Delegate=yes
KillMode=process
Restart=always
RestartSec=5
LimitNPROC=infinity
LimitCORE=infinity
LimitNOFILE=infinity
TasksMax=infinity
OOMScoreAdjust=-999
[Install]
WantedBy=multi-user.target
EOF
}
# 安装 docker
install_docker() {
# 解压docker二进制文件到 /usr/bin ,与官网保持一致
tar -zxvf ${project_root}/docker-${docker_version}.tgz
cp -f ${project_root}/docker/* /usr/bin
rm -rf ${project_root}/docker
# 创建 docker.socket
systemctl daemon-reload
groupadd docker >/dev/null 2>&1 || true
systemctl start docker.socket
systemctl enable docker.socket
# 创建containerd.service
systemctl start containerd.service
systemctl enable containerd.service
# 启动 docker
systemctl start docker
systemctl enable docker
# 查看docker版本
docker version
}
# 安装完成
install_complete() {
echoGreen "Docker以及Docker-compose 已安装完成"
echoGreen "可以手动清理以下安装文件:"
echoGreen "1、${project_root}/docker-compose-linux-${arch}"
echoGreen "2、${project_root}/docker-${docker_version}.tgz"
}
docker_version="20.10.23"
docker_compose_version="v2.17.2"
# 1、获取当前文件夹
get_project_root
# 2、获取系统架构
get_arch
# 3、下载 Docker-compose
download_docker_compose
# 4、下载 docker tar 包
download_docker_tar
# 5、安装 docker-compose
install_docker_compose
# 6、写入 docker.service
write_docker_service
# 7、写入 docker.socket
write_docker_socket
# 8、写入 containerd.service
write_containerd_service
# 9、写入 docker 加速镜像
write_docker_daemon_json
# 10、安装 docker
install_docker
# 11、安装完成
install_complete