本作品为原创内容,未经作者许可,禁止任何形式的转载、复制或传播。
前言
懒人可以直接使用文末的安装脚本和卸载脚本(我只在rockylinux和almalinux试过 其它发行版请谨慎使用)
25.05.19更新 本文的链接下载的docker适用于amd64/x86架构CPU AArch64等其它架构的需要把链接换一下
25.6.25更新 查阅docker文档时发现docker-compose和docker-buildx有更方便的安装方式 补充进来 文档:https://docs.docker.com/compose/install/linux/
安装docker
创建docker组
groupadd docker
下载docker二进制包并解压
这里将二进制包安装到/opt中
cd /opt
下载并解压docker二进制包
wget -c https://download.docker.com/linux/static/stable/x86_64/docker-28.1.1.tgz
tar -zxvf docker-28.1.1.tgz
查看解压后的文件
ls -l /opt/docker
将docker导入执行环境中
赋予/opt/docker下所有二进制文件执行权限
chmod +x -R /opt/docker
将/opt/docker目录下的二进制文件软链接到/bin中
while IFS= read -r -d '' name;do ln -s "/opt/docker/${name}"; "/usr/bin/${name}";done < <(find "/opt/docker" -type f -printf "%f\0")
创建systemd服务
创建docker socket套接字配置
[Unit]
Description=Docker socket
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
创建docker服务
注:ExecStart行的 --data-root=/data/docker /data/docker可以换成你想要docker数据存储的路径
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock --data-root=/data/docker
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target
创建containerd服务
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target dbus.service
[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
设置开机自启动docker服务
先重载systemd
systemctl daemon-reload
然后设置docker服务开机自启
systemctl enable docker.service
安装完成
启动docker服务
systemctl start docker.service
执行docker命令查看
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
此外,一般安装docker也会同时使用docker-compose和docker-buildx工具 下面也一起安装
安装docker-compose编排工具
旧方法-直接执行二进制文件
下载docker-compose二进制文件
wget -c https://github.com/docker/compose/releases/download/v2.36.0/docker-compose-linux-x86_64
将docker-compose二进制文件重命名并剪切到/opt/docker中
mv docker-compose-linux-x86_64 /opt/docker/docker-compose
导入到执行环境中
ln -s /opt/docker/docker-compose /bin/docker-compose
使用方法:
docker-compose up -d
docker-compose down
新方法-导入到docker的cli-plugins中 通过docker来执行
下载docker-compose二进制文件
wget -c https://github.com/docker/compose/releases/download/v2.36.0/docker-compose-linux-x86_64
创建docker插件存放路径
mkdir -p /usr/local/lib/docker/cli-plugins
将docker-compose二进制文件重命名并剪切到/usr/local/lib/docker/cli-plugins中
mv docker-compose-linux-x86_64 /usr/local/lib/docker/cli-plugins/docker-compose
使用方法:
docker compose up -d
docker compose down
安装docker-buildx跨平台镜像构建工具
旧方法-直接执行二进制文件
下载docker-buildx二进制文件
wget -c https://github.com/docker/buildx/releases/download/v0.10.3/buildx-v0.10.3.linux-amd64
将docker-buildx二进制文件重命名并剪切到/opt/docker中
mv buildx-v0.10.3.linux-amd64 /opt/docker/docker-buildx
导入到执行环境中
ln -s /opt/docker/docker-buildx /bin/docker-buildx
使用方法:
docker-buildx build -t test-img:0.0.1 -f test.buildfile .
新方法-导入到docker的cli-plugins中 通过docker来执行
下载docker-buildx二进制文件
wget -c https://github.com/docker/compose/releases/download/v2.36.0/docker-compose-linux-x86_64
创建docker插件存放路径
mkdir -p /usr/local/lib/docker/cli-plugins
将docker-compose二进制文件重命名并剪切到/usr/local/lib/docker/cli-plugins中
mv buildx-v0.10.3.linux-amd64 /usr/local/lib/docker/cli-plugins/docker-compose
使用方法:
docker build -t test-img:0.0.1 -f test.buildfile .
自动安装脚本
#!/bin/bash
# 作者:BreadAira
# 优快云名:林.面包x
#docker数据存储路径
datadir=/data/docker
#docker安装路径
installdir=/opt
#检查文件夹
if [ ! -d "$datadir" ];then
echo "未找到数据文件夹,自动创建..."
if ! mkdir -p "$datadir";then
echo "未找到数据文件夹,自动创建失败!" && exit 1
fi
fi
if [ ! -d "$installdir" ];then
echo "未找到安装文件夹,自动创建..."
if ! mkdir -p "$installdir";then
echo "未找到安装文件夹,自动创建失败!" && exit 1
fi
fi
#下载docker
cd "$installdir" || exit 1
if [ -f "${installdir}/docker-28.1.1.tgz" ];then
:
else
if ! wget -c --retry-connrefused --tries=0 --waitretry=2 --timeout=15 https://download.docker.com/linux/static/stable/x86_64/docker-28.1.1.tgz;then
echo "下载docker包失败!" && exit 1
fi
fi
if ! tar -zxvf docker-28.1.1.tgz;then
echo "解压失败,请检查tar gzip等工具是否未安装或压缩包是否损坏" && exit 1
fi
##导入docker到环境变量
while IFS= read -r -d '' name; do
if [ -f "/usr/bin/${name}" ];then
unlink "/usr/bin/${name}"
fi
done < <(find "$installdir"/docker -type f -printf "%f\0")
while IFS= read -r -d '' name; do
chmod +x "${installdir}/docker/${name}"
ln -s "${installdir}/docker/${name}" "/usr/bin/${name}"
done < <(find "$installdir"/docker -type f -printf "%f\0")
#创建systemd服务
groupadd docker
cat > /usr/lib/systemd/system/docker.socket <<EOF
[Unit]
Description=Docker socket for API
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
cat > /usr/lib/systemd/system/docker.service <<EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target containerd.service
Wants=network-online.target
Requires=docker.socket containerd.service
[Service]
Type=notify
ExecStart=/usr/bin/dockerd -H unix:///var/run/docker.sock --data-root=/data/docker
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutStartSec=0
RestartSec=2
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target
EOF
cat > /usr/lib/systemd/system/containerd.service <<EOF
[Unit]
Description=containerd container runtime
Documentation=https://containerd.io
After=network.target local-fs.target dbus.service
[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
systemctl daemon-reload
if ! systemctl start docker;then
echo "启动docker服务失败,可通过systemctl status docker.service查看报错信息" && exit 1
fi
systemctl enable docker
# 作者:BreadAira
# 优快云名:林.面包x
#安装docker-compose
cd "$installdir/docker" || exit 1
if ! [ -f "${installdir}/docker/docker-compose" ];then
if ! [ -f "${installdir}/docker/docker-compose-linux-x86_64" ];then
if ! wget -c --retry-connrefused --tries=0 --waitretry=2 --timeout=15 https://github.com/docker/compose/releases/download/v2.36.0/docker-compose-linux-x86_64;then
echo "下载docker包失败!" && exit 1
fi
fi
fi
##import docker-compose
if [ -f "${installdir}/docker/docker-compose-linux-x86_64" ];then
mv docker-compose-linux-x86_64 docker-compose
fi
if [ ! -f "/bin/docker-compose" ];then
ln -s /opt/docker/docker-compose /bin/docker-compose
fi
#安装docker-buildx
cd "$installdir/docker" || exit 1
if ! [ -f "${installdir}/docker/docker-buildx" ];then
if ! [ -f "${installdir}/docker/buildx-v0.10.3.linux-amd64" ];then
if ! wget -c --retry-connrefused --tries=0 --waitretry=2 --timeout=15 https://github.com/docker/buildx/releases/download/v0.10.3/buildx-v0.10.3.linux-amd64;then
echo "下载docker包失败!" && exit 1
fi
fi
fi
##import docker-buildx
if [ -f "${installdir}/docker/buildx-v0.10.3.linux-amd64" ];then
mv buildx-v0.10.3.linux-amd64 docker-buildx
fi
if [ ! -f "/bin/docker-buildx" ];then
ln -s /opt/docker/docker-buildx /bin/docker-buildx
fi
# 作者:BreadAira
# 优快云名:林.面包x
卸载脚本
#!/bin/bash
# 作者:BreadAira
# 优快云名:林.面包x
echo "仅卸载docker二进制文件,如需删除数据请自行操作"
#docker安装路径
installdir=/opt
if [ ! -d "${installdir}/docker" ];then
echo "未找到docker安装文件夹" && exit 1
fi
echo "以下是将要卸载的二进制文件"
while IFS= read -r -d '' name; do
echo "${installdir}/docker/${name}"
done < <(find "$installdir"/docker -type f -printf "%f\0")
i=1
while [[ "$i" == 1 ]];do
read -rp "确认卸载,Just uninstall(y/n):" Start_input
case $Start_input in
"Y"|"y")
i=0
;;
"N"|"n")
echo "取消卸载" && exit 1
;;
esac
done
# 作者:BreadAira
# 优快云名:林.面包x
while IFS= read -r -d '' name; do
unlink "/bin/${name}"
rm -f "${installdir}/docker/${name}"
done < <(find "$installdir"/docker -type f -printf "%f\0")
systemctl stop docker.service
systemctl stop docker.socket
systemctl stop containerd.service
systemctl disable docker
rm -f /usr/lib/systemd/system/docker.socket
rm -f /usr/lib/systemd/system/containerd.service
rm -f /usr/lib/systemd/system/docker.service
systemctl daemon-reload
groupdel docker
echo "卸载完成!"
# 作者:BreadAira
# 优快云名:林.面包x
595

被折叠的 条评论
为什么被折叠?



