Linux 二进制安装Docker、docker-compose、buildx

本作品为原创内容,未经作者许可,禁止任何形式的转载、复制或传播。

前言

懒人可以直接使用文末的安装脚本和卸载脚本(我只在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

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值