f 运维.售后-Linux 系统离线安装 docker、docker compose - Powered by qidao123.com技术社区

Linux 系统离线安装 docker、docker compose

打印 上一主题 下一主题

主题 1751|帖子 1751|积分 5253


   本文中使用的安装包、设置文件、脚本文件:docker-20.10.7-linux-x86_64.zip
  下载

获取操作系统信息
  1. [root@localhost 桌面]# uname -m
  2. x86_64
复制代码
docker 下载地点:https://download.docker.com/linux/static/stable/

提示:根据上方 操作系统架构 进行下载,如 x86_64 则选择 x86_64 目录。
docker compose 下载地点:https://github.com/docker/compose/releases

提示:根据上方 操作系统架构 进行下载,如 x86_64 则选择 dokcer-compose-linux-x86_64。
整理安装文件

移动 docker、docker compose 安装包

提示:将 docker-20.10.7.tgz、dokcer-compose-linux-x86_64 放到一个目录,方便安装。本文存放目录:/root/下载/。
编写 docker 系统服务设置文件

  1. [root@localhost 下载]# touch docker.service
  2. [root@localhost 下载]# vi docker.service
  3. [Unit]
  4. Description=Docker Application Container Engine
  5. Documentation=https://docs.docker.com
  6. After=network-online.target firewalld.service
  7. Wants=network-online.target
  8. [Service]
  9. Type=notify
  10. # the default is not to use systemd for cgroups because the delegate issues still
  11. # exists and systemd currently does not support the cgroup feature set required
  12. # for containers run by docker
  13. ExecStart=/usr/bin/dockerd
  14. ExecReload=/bin/kill -s HUP $MAINPID
  15. # Having non-zero Limit*s causes performance problems due to accounting overhead
  16. # in the kernel. We recommend using cgroups to do container-local accounting.
  17. LimitNOFILE=infinity
  18. LimitNPROC=infinity
  19. LimitCORE=infinity
  20. # Uncomment TasksMax if your systemd version supports it.
  21. # Only systemd 226 and above support this version.
  22. #TasksMax=infinity
  23. TimeoutStartSec=0
  24. # set delegate yes so that systemd does not reset the cgroups of docker containers
  25. Delegate=yes
  26. # kill only the docker process, not all processes in the cgroup
  27. KillMode=process
  28. # restart the docker process if it exits prematurely
  29. Restart=on-failure
  30. StartLimitBurst=3
  31. StartLimitInterval=60s
  32. [Install]
  33. WantedBy=multi-user.target
复制代码
提示:ExecStart=/usr/bin/dockerd 是设置的执行文件,此中 /usr/bin/ 是安装目录。
编写安装脚本

  1. [root@localhost 下载]# touch docker_install.sh
  2. [root@localhost 下载]# vi docker_install.sh
  3. #!/bin/sh
  4. # 离线安装 docker、docker-compose
  5. echo '解压tar包...'
  6. tar -xvf docker-20.10.7.tgz
  7. echo '将 docker 目录移动 /usr/bin 目录下...'
  8. cp -p docker/* /usr/bin/
  9. rm -rf docker/
  10. echo '将 docker-compose 文件复制到 /usr/local/bin/ 目录下,并重命名为docker-compose'
  11. cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose
  12. echo '为 docker-compose 文件添加执行权限'
  13. chmod +x /usr/local/bin/docker-compose
  14. echo '将 docker.service 移到 /etc/systemd/system/ 目录...'
  15. cp docker.service /etc/systemd/system/
  16. echo '添加文件执行权限...'
  17. chmod +x /etc/systemd/system/docker.service
  18. echo '重新加载配置文件...'
  19. systemctl daemon-reload
  20. echo '启动docker...'
  21. systemctl start docker
  22. echo '设置开机自启...'
  23. systemctl enable docker.service
  24. echo 'docker 安装成功...'
  25. # 验证 docker 是否安装成功
  26. docker -v
  27. # 验证 docker compose 是否安装成功
  28. docker-compose -v
复制代码
编写卸载脚本

  1. [root@localhost 下载]# touch docker_uninstall.sh
  2. [root@localhost 下载]# vi docker_uninstall.sh
  3. #!/bin/sh
  4. # 卸载 docker 和 docker-compose
  5. echo '删除docker.service...'
  6. rm -f /etc/systemd/system/docker.service
  7. echo '删除docker文件...'
  8. rm -rf /usr/bin/docker*
  9. echo '删除docker-compose文件'
  10. rm -f /usr/local/bin/docker-compose
  11. echo '重新加载配置文件'
  12. systemctl daemon-reload
  13. echo '卸载成功...'
复制代码
安装

  1. [root@localhost 下载]# chmod +x docker.service docker_install.sh docker_uninstall.sh
  2. [root@localhost 下载]# ./docker_install.sh
复制代码
常见题目/方法

常用命令

查看镜像列表:docker images
删除指定镜像:docker image rm [REPOSITORY:TAG 或 IMAGE ID]
查看正在运行的镜像:docker ps
停止正在运行的镜像:docker stop [CONTAINER ID]
设置 docker 镜像源

   提示:此方法可解决一些镜像拉取慢/超时/错误的题目。
  1. [root@localhost 下载]# vi /etc/docker/daemon.json
  2. {"registry-mirrors":["新的镜像地址"]}
  3. [root@localhost 下载]# systemctl daemon-reload
  4. [root@localhost 下载]# systemctl restart docker
复制代码
以下是网络网络的一些镜像地点,可解决大多数的镜像拉取需求:
  1. {
  2.     "registry-mirrors": [ "https://docker.registry.cyou",
  3.         "https://docker-cf.registry.cyou",
  4.         "https://dockercf.jsdelivr.fyi",
  5.         "https://docker.jsdelivr.fyi",
  6.         "https://dockertest.jsdelivr.fyi",
  7.         "https://mirror.aliyuncs.com",
  8.         "https://dockerproxy.com",
  9.         "https://mirror.baidubce.com",
  10.         "https://docker.m.daocloud.io",
  11.         "https://docker.nju.edu.cn",
  12.         "https://docker.mirrors.sjtug.sjtu.edu.cn",
  13.         "https://docker.mirrors.ustc.edu.cn",
  14.         "https://mirror.iscas.ac.cn",
  15.         "https://docker.rainbond.cc",
  16.         "https://docker.hpcloud.cloud",
  17.         "https://docker.m.daocloud.io",
  18.         "https://docker.unsee.tech",
  19.         "https://docker.1panel.live",
  20.         "http://mirrors.ustc.edu.cn",
  21.         "https://docker.chenby.cn",
  22.         "http://mirror.azure.cn",
  23.         "https://dockerpull.org",
  24.         "https://dockerhub.icu",
  25.         "https://hub.rat.dev"]
  26. }
复制代码
镜像导出、导入脚本工具(v0.0.1 - 初版)

   提示:镜像导入、导出脚本工具可以将 docker 镜像完整的导出进行备份还原,节省新情况摆设镜像的时间。
  镜像导出脚本工具

  1. #!/bin/bash
  2. # 获取当前工作目录并设置为导出路径
  3. export_dir="$(pwd)/docker_imgs"
  4. # 创建导出根目录
  5. mkdir -p "$export_dir"
  6. # 获取所有镜像的仓库和标签
  7. image_names=$(docker images --format "{{.Repository}}:{{.Tag}}")
  8. # 检查是否有镜像
  9. if [ -z "$image_names" ]; then
  10.   echo "没有找到Docker镜像,脚本终止。"
  11.   exit 1
  12. fi
  13. # 循环导出每个镜像
  14. for image_name in $image_names; do
  15.   # 提取仓库名和标签
  16.   repository=$(echo "$image_name" | cut -d: -f1)   # 获取仓库名
  17.   tag=$(echo "$image_name" | cut -d: -f2)          # 获取标签
  18.   # 判断仓库名是否包含 '/'
  19.   if [[ "$repository" == *"/"* ]]; then
  20.     # 获取最后一个 '/' 之前的部分作为目录层级
  21.     repo_dir=$(echo "$repository" | sed 's/\(.*\)\/.*/\1/')
  22.     # 获取最后一个 '/' 之后的部分作为镜像名称
  23.     image_name_only=$(echo "$repository" | sed 's/.*\///')
  24.     # 将仓库名称中的 '/' 替换为目录分隔符
  25.     repo_path="$export_dir/$repo_dir"
  26.     # 创建目录结构
  27.     mkdir -p "$repo_path"
  28.     # 生成导出文件名,使用 -- 作为分隔符
  29.     output_file="$repo_path/$image_name_only--$tag.tar"
  30.   else
  31.     # 如果仓库名没有 '/',则直接作为镜像名称
  32.     repo_path="$export_dir"
  33.     image_name_only="$repository"
  34.    
  35.     # 生成导出文件名,使用 -- 作为分隔符
  36.     output_file="$repo_path/$image_name_only--$tag.tar"
  37.   fi
  38.   # 导出镜像
  39.   echo "正在导出镜像: $image_name"
  40.   if docker save -o "$output_file" "$image_name"; then
  41.     echo "成功导出: $image_name 到 $output_file"
  42.   else
  43.     echo "导出失败: $image_name"
  44.   fi
  45. done
  46. echo "所有镜像导出过程完成!"
复制代码
镜像导入脚本工具

  1. #!/bin/bash
  2. # 获取当前工作目录并设置为镜像 tar 文件的根目录
  3. import_dir="$(pwd)/docker_imgs"
  4. # 检查目录是否存在
  5. if [ ! -d "$import_dir" ]; then
  6.   echo "导入目录 $import_dir 不存在!"
  7.   exit 1
  8. fi
  9. # 递归查找目录中的所有 tar 文件并导入镜像
  10. find "$import_dir" -type f -name "*.tar" | while read tar_file; do
  11.   # 获取相对路径并构建镜像名称
  12.   rel_path=$(realpath --relative-to="$import_dir" "$tar_file")
  13.   
  14.   # 去掉 .tar 后缀,并将最后一个 -- 替换为 :
  15.   image_name=$(echo "$rel_path" | sed 's/\.tar$//' | sed 's/\(.*\)--/\1:/')
  16.   # 导入镜像
  17.   echo "正在导入镜像: $image_name"
  18.   if docker load -i "$tar_file"; then
  19.     echo "成功导入镜像: $image_name"
  20.   else
  21.     echo "导入失败: $image_name"
  22.     exit 1  # 如果导入失败,终止脚本执行
  23.   fi
  24. done
  25. echo "所有镜像导入过程完成!"
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

大号在练葵花宝典

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表