首页 > 其他分享 >二进制安装 Docker 以及 Docker Compose

二进制安装 Docker 以及 Docker Compose

时间:2024-10-18 15:33:24浏览次数:1  
标签:bin compose 二进制 Compose usr Docker local docker

Author: ACatSmiling

Since: 2024-10-12

Docker 安装

  1. 官网下载安装包。(以下示例脚本为下载最新版 Docker 离线压缩包,也可以用浏览器打开官网地址直接下载再传到服务器。如果使用该脚本,下面的第 2、3 步可以不执行。)

    #!/bin/bash
    
    set -u
    # docker 官网下载地址
    url='https://download.docker.com/linux/static/stable/x86_64/'
    # 获取最新版的 docker 包名,地址:https://download.docker.com/linux/static/stable/x86_64/
    tarFile=$(curl -s ${url} | grep -E '.*docker-[0-9]*\.[0-9]*\.[0-9]*\.tgz' | tail -n 1 | awk -F '"' '{print $2}')
    # 拼接完整 url 并下载
    curl -o docker.tgz "${url}${tarFile}"
    
    # 解压,将压缩包内的文件挪到 /usr/local/bin
    tar xf docker.tgz
    mv docker/* /usr/local/bin/
    
    # 创建 docker 的数据目录
    mkdir -p /home/data/docker
    
    $ sudo bash docker.sh
    
  2. 解压安装包,将安装包内的二进制程序解压到/usr/local/bin目录。

    $ tar xf docker.tgz
    $ mv docker/* /usr/local/bin/
    
  3. 建立 Docker 的数据存放目录/home/data/docker

    $ mkdir -p /home/data/docker
    
  4. 创建 Docker 的 service 文件/usr/lib/systemd/system/docker.service

    $ sudo vim /usr/lib/systemd/system/docker.service
    
    [Unit]
    Description=Docker Application Container Engine
    Documentation=https://docs.docker.com
    After=network-online.target firewalld.service
    Wants=network-online.target
    
    [Service]
    Type=notify
    # the default is not to use systemd for cgroups because the delegate issues still
    # exists and systemd currently does not support the cgroup feature set required
    # for containers run by docker
    ExecStart=/usr/local/bin/dockerd --data-root /home/data/docker
    
    ExecReload=/bin/kill -s HUP $MAINPID
    # Having non-zero Limit*s causes performance problems due to accounting overhead
    # in the kernel. We recommend using cgroups to do container-local accounting.
    LimitNOFILE=infinity
    LimitNPROC=infinity
    LimitCORE=infinity
    # Uncomment TasksMax if your systemd version supports it.
    # Only systemd 226 and above support this version.
    #TasksMax=infinity
    TimeoutStartSec=0
    # set delegate yes so that systemd does not reset the cgroups of docker containers
    Delegate=yes
    # kill only the docker process, not all processes in the cgroup
    KillMode=process
    # restart the docker process if it exits prematurely
    Restart=on-failure
    StartLimitBurst=3
    StartLimitInterval=60s
    
    [Install]
    WantedBy=multi-user.target
    
  5. 配置 Docker 的 daemon.json。

    $ sudo vim /etc/docker/daemon.json
    
    {
        "registry-mirrors": [
            "https://dockerproxy.com",
            "https://hub-mirror.c.163.com",
            "https://mirror.baidubce.com",
            "https://ccr.ccs.tencentyun.com"
        ]
    }
    
    • /etc 目录下可能没有 docker 目录和 daemon.json,需要新建。
    • 检查 daemon.json 文件的格式:cat /etc/docker/daemon.json | python -m json.tool
  6. 生效配置。

    $ systemctl daemon-reload
    $ systemctl start docker
    $ systemctl enable docker
    
  7. 验证。

    $ systemctl status docker
    $ docker info
    
  8. 普通用户如需使用二进制方式安装的 Docker,可参考以下步骤,假设普通用户的用户名为 admin。

    # 1. 创建 docker 用户组
    $ sudo groupadd docker
    # 2. 将 admin 用户加到 docker 用户组
    $ sudo usermod admin -a -G docker
    # 3. 重启 docker
    $ systemctl restart docker
    # 4. admin 用户执行 docker 命令进行测试
    
  9. 如果安装过程中出现错误,使用命令查看详细的错误日志。

    $ systemctl status docker.service
    $ journalctl -xeu docker | less
    

Docker Compose 安装

  1. 官网下载二进制程序包(以下示例脚本为通过代理站从 GitHub 下载最新版 docker-compose 的安装包,也可以用浏览器直接从浏览器下载再传到服务器。如果使用该脚本,下面的第 2、3 步可以不执行。)

    #!/bin/bash
    
    set -eu
    tag=$(curl -s "https://api.github.com/repos/docker/compose/tags" | grep '"name":' | head -n 1 | awk -F '"' '{print $4}')
    
    url="https://github.com/docker/compose/releases/download/${tag}/docker-compose-$(uname -s)-$(uname -m)"
    
    curl -o docker-compose ${url}
    
    chmod +x docker-compose
    
    # 将 docker-compose 挪到 PATH 环境变量的路径
    mv docker-compose /usr/local/bin/
    
    # 验证并查看版本
    docker-compose --version
    
    $ sudo bash docker-compose.sh
    
  2. 重命名为 docker-compose,并移到/usr/local/bin

  3. 验证。

如果脚本执行异常,下载的 docker-compose 安装包不正确,可以手动安装。(因为下载地址是 GitHub,如果没有配置代理,下载速度会很慢,甚至失败。)

# 1. 查看最新版本
$ curl -s "https://api.github.com/repos/docker/compose/tags" | grep '"name":' | head -n 1 | awk -F '"' '{print $4}'

# 2. 下载,如需下载其他版本,替换 v2.24.7 为最新的版本号即可
$ sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.7/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

# 3. 赋予二进制文件可执行权限
$ sudo chmod +x /usr/local/bin/docker-compose

Docker 配置 clash 代理

国内镜像源偶尔会出现不能使用的情况,在已有代理的情况下,按如下方式配置:

# 1. 编辑 daemon.json 文件,添加代理,192.168.1.17:7890 是宿主机局域网中的代理服务器地址(国内镜像源的配置需要删除)
$ vim /etc/docker/daemon.json 
{
    "proxies": {
        "http-proxy": "http://192.168.1.17:7890",
        "https-proxy": "http://192.168.1.17:7890"
    }
}

# 2. 生效配置
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker

代理配置完成后,需要设置防火墙的入站规则,否则可能出现无法拉取镜像,宿主机也无法 ping 通虚拟机的情况。

image-20240621234809771

image-20240622001039962

安装脚本

#!/bin/bash
# description:国内联网情况下通过 Docker 二进制包安装 Docker 和 docker-compose

set -u
dataDir='/home/apps/docker'

downloadDocker(){
 # Docker 官网下载地址
 local url='https://download.docker.com/linux/static/stable/x86_64/'
 # 获取最新版的 Docker 包名
 local tarFile=$(curl -s ${url} | grep -E '.*docker-[0-9]*\.[0-9]*\.[0-9]*\.tgz' | tail -n 1 | awk -F '"' '{print $2}')
 # 拼接完整 url 并下载
 curl -s -o docker.tgz "${url}${tarFile}"

 # 解压,将压缩包内的文件挪到 /usr/local/bin
 tar xf docker.tgz
 mv docker/* /usr/local/bin/

 # 创建 Docker 的数据目录
 mkdir -p ${dataDir}
 echo -e "\n\t>>> docker data dir: ${dataDir} <<<\n"

 # (可选)创建 Docker 用户组
 groupadd docker
}

downloadDockerCompose() {
 # 获取最新版 tag
 local tag=$(curl -s "https://api.github.com/repos/docker/compose/tags" | grep '"name":' | head -n 1 | awk -F '"' '{print $4}')
 # 通过 ghproxy 的代理拼接下载 url
 local url="https://ghproxy.com/https://github.com/docker/compose/releases/download/${tag}/docker-compose-linux-x86_64"

 curl -s -o docker-compose ${url}
 chmod +x docker-compose
 mv docker-compose /usr/local/bin
}

createSystemConfig() {
 cat > docker.service <<EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/local/bin/dockerd --data-root ${dataDir}

ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity

#TasksMax=infinity
TimeoutStartSec=0

Delegate=yes

KillMode=process

Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target
EOF
 mv docker.service /etc/systemd/system/

 systemctl daemon-reload
 systemctl start docker
 systemctl enable docker
}

# 生成 Docker 的配置文件
createDockerConfig() {
 if [ ! -d "/etc/docker" ]; then
     echo -e "\n\t>>> /etc/docker is not exist. <<<\n"
     return
 fi

 if [ -f "/etc/docker/daemon.json" ]; then
     echo -e "\n\t>>> /etc/docker/daemon.json is exist. <<<\n"
     return
 fi

 cat > /etc/docker/daemon.json <<EOF
{
 "log-driver": "json-file",
 "log-level": "warn",
 "log-opts": {
     "max-size": "100m"
 }
}
EOF
 systemctl daemon-reload
 systemctl restart docker
}

main() {
 # 检测当前用户是否为 root 用户
 if [ $(whoami) != 'root' ]; then
     echo -e "\n\t>>> Please use \033[31mroot\033[0m privilege to run this script. <<<\n"
     exit 1
 fi

 # 检测 Docker 是否已安装
 docker --version > /dev/null 2>&1
 if [ $? -eq 0 ]; then
     echo -e "\n\t\033[31m>>> Docker is already installed. <<<\033[0m"
     echo -e "\t\033[31m>>> If you want to reinstall, please uninstall it first. <<<\033[0m\n"
     exit 1
 fi

 downloadDocker
 downloadDockerCompose
 createSystemConfig
 createDockerConfig
}

main

标签:bin,compose,二进制,Compose,usr,Docker,local,docker
From: https://www.cnblogs.com/acatsmiling/p/18474276

相关文章

  • Docker 用例:15 种最常见的 Docker 使用方法
    容器化应用程序而不是将它们托管在虚拟机上是过去几年一直流行的概念,使容器管理流行起来。Docker处于这一转变的核心,帮助组织无缝地采用容器化技术。最近,Docker用例遍布所有行业,无论规模大小和性质如何。什么是Docker?Docker是一种容器化技术,它使开发人员能够将服务及其依......
  • 1.docker基础课程-docker安装
    如今,docker的使用已是越来越广泛熟练的掌握docker的使用已经是作为后端开发工程师必不可少的技能之一了docker是干啥的我们都知道,windows环境和linux环境是不一样的简单来说就是,不同的应用程序所依赖的环境不一样,如果把他们依赖的软件都安装在一个服务器上,不仅需要调试很久......
  • 国外电商系统开发-运维系统Docker镜像
            如果您在【主机配置】中,添加主机的时候使用的是root超级管理员,而且该主机中确实有docker镜像存在,那么运维系统会自动发现该列表,并且展现在网页中                自动发现的时间,间隔是30分钟一次。在该页面,您可以自行操作docker镜像功能。 ......
  • docker-certbot-dnspod 使用 Docker 申请、续期免费证书
    项目地址https://github.com/chenlongqiang/docker-certbot-dnspod背景近期免费证书有效期从1年缩短到3个月,避免经常要上云平台手动申请,所以想找个工具可以简单的申请、续期证书。通过了解,发现Certbot工具,但官方没提供Dnspod插件,于是找了Python3的封装并打包成......
  • 3191. 使二进制数组全部等于 1 的最少操作次数 I
    给你一个二进制数组nums。你可以对数组执行以下操作任意次(也可以0次):选择数组中任意连续3个元素,并将它们全部反转。反转一个元素指的是将它的值从0变1,或者从1变0。请你返回将nums中所有元素变为1的最少操作次数。如果无法全部变成1,返回-1。示例......
  • dockerfile中nuget源加载失败Retrying 'FindPackagesByIdAsync' for source 'xxx'
    问题描述:最近jenkins打包总是提示微软源加载不到Retrying'FindPackagesByIdAsync'forsource'https://api.nuget.org/v3-flatcontainer/microsoft.extensions.primitives/index.json'.Anerroroccurredwhilesendingtherequest.解决方案:dockerfile中添加国内源,改用华......
  • 二进制凑数+路线规划构造题
    妙啊妙啊https://ac.nowcoder.com/acm/contest/92687/K#include<bits/stdc++.h>#defineendl'\n'#definelowbit(x)(x&-x)usingnamespacestd;constdoublepi=acos(-1);intpre[30];voidsolve(){intn;cin>>n;vector<int>......
  • 如何更新docker中镜像的版本?
    如何更新docker中镜像的版本?#进入docker-compose.yml文件所在的文件夹下cd/root/data/docker_data/npm#停止容器docker-composedown#数据备份#万事先备份,以防万一cp-r/root/data/docker_data/npm/root/data/docker_data/npm.archive#拉取新版本镜像doc......
  • 全网热点信息监控舆情监控,一个docker一行命令启动完成部署,汇聚全网27个主流网站实时热
    全网热点信息监控舆情监控,一个docker一行命令启动完成部署,汇聚全网27个主流网站实时热榜,热点一“手”掌握,今日热榜API,一个聚合热门数据的API接口,支持RSS模式及Vercel部署。今日热榜汇聚全网热点,热门尽览无余,今日热榜可以为用户提供最新、最热门的信息,尽览各大平......
  • 【Docker系列】docker-compose down 命令详解
    ......