Docker 安装与换源脚本#
一键执行命令#
实时同步、无延迟,国内网络环境下推荐使用
同步存在1小时延迟
集成安装 Docker Engine
和 Docker Compose
,支持选择或更换软件源(Docker 软件仓库)以及镜像仓库、安装指定版本、重装等功能,支持 ARM 架构
脚本参考官方文档使用系统包管理工具进行安装,不存在兼容性、安全性等问题,可安装的版本由 Docker CE 仓库决定
-
完全替代官方安装脚本
与 get.docker.com 逻辑一致,融合了本项目换源架构以及特性
-
支持国产衍生操作系统
兼容大量不受官方安装脚本支持的衍生操作系统
-
功能强大、无以伦比
全网最实用的开源运维脚本之一,性能卓越
-
精妙绝伦的交互设计
易于理解和使用的交互式命令行界面,遥遥领先
Docker Compose 不再需要独立安装
Docker Compose 自 V2 版本起开始作为 Docker CLI(命令行)的一部分,脚本默认集成安装该插件,请使用 docker compose
命令替代 docker-compose
软件源说明
-
Docker CE 软件仓库
Docker CE 全称 Docker Community Edition(Docker 社区版),是 Docker Engine 的别称,该仓库用于下载并安装 Docker 相关软件包
-
Docker Registry 镜像仓库
用于控制拉取镜像的默认来源存储仓库,又称镜像加速器,默认为官方容器镜像仓库 Docker Hub
由于一些不可抗力的因素,国内网络环境下目前无法访问 Docker Hub 因此不能正常拉取镜像,建议使用下方提到的国内可用镜像仓库源
注:脚本内的指定 Web 协议交互仅用于控制 Docker CE
软件源,Docker Registry
强制使用 HTTPS
协议
内置的镜像仓库源
站点名称 | 地址 | 说明 |
---|---|---|
毫秒镜像 | docker.1ms.run | 企业镜像站,CDN智能分发速度极快,支持付费定制,推荐使用 |
Docker Proxy | dockerproxy.net | 由 ghproxy 创建,可用性高但速度很慢,支持企业镜像付费加速 |
DaoCloud 道客 | docker.m.daocloud.io | 老牌企业镜像站,可用性高且速度快,现为白名单模式 |
1Panel 镜像 | docker.1panel.live | 企业产品自用镜像 |
本开源项目不适合采集个人自建的镜像加速器,如有需要可搭配命令选项自行使用
注:国内云计算企业的镜像仓库源仅针对其业务,境内实例可能仍无法访问 Docker Hub
命令选项(高级用法)#
名称 | 含义 | 选项值 |
---|---|---|
--source |
指定 Docker CE 源地址(域名或IP) |
地址 |
--source-registry |
指定 Docker 镜像仓库地址(域名或IP) |
地址 |
--branch |
指定 Docker CE 软件源仓库(路径) |
仓库名(详见下方文档) |
--branch-version |
指定 Docker CE 软件源仓库版本 |
版本号(详见下方文档) |
--designated-version |
指定 Docker Engine 安装版本 |
版本号(详见下方文档) |
--codename |
指定 Debian 系操作系统的版本代号 |
代号名称 |
--protocol |
指定 Docker CE 源的 Web 协议 |
http 或 https |
--use-intranet-source |
是否优先使用内网 Docker CE 软件源地址 |
true 或 false |
--install-latest |
是否安装最新版本的 Docker Engine |
true 或 false |
--close-firewall |
是否关闭防火墙 | true 或 false |
--clean-screen |
是否在运行前清除屏幕上的所有内容 | true 或 false |
--lang |
指定脚本输出的语言 | 语言ID(详见下方文档) |
--only-registry |
仅更换镜像仓库模式 | 无 |
--ignore-backup-tips |
忽略覆盖备份提示(即不覆盖备份) | 无 |
--pure-mode |
纯净模式,精简打印内容 | 无 |
--help |
查看帮助菜单 | 无 |
软件源完整格式
<WEB协议>://<软件源地址(域名或IP)>/<软件源仓库(路径)>
-
指定镜像仓库地址#
-
仅更换镜像仓库#
-
安装
jq
软件包 -
指定镜像仓库地址
请手动替换
<example.registry.com>
为镜像仓库地址后在执行,详见上方 “项目内置的镜像仓库源” 表格中的地址列SOURCE_REGISTRY='"https://example.registry.com","https://test.registry.com"'
,注意用英文逗号分割 -
替换镜像仓库地址
-
重启 Docker 服务
-
-
指定 Docker CE 软件源地址#
注意该地址路径需要包含镜像站的 Docker CE 软件源仓库路径即
docker-ce
-
指定 Docker CE 软件源仓库#
脚本默认会自动判断一般无需指定,除非你有特殊需求
仓库名是固定的,目前只有
centos
debian
fedora
raspbian
rhel
sles
static
ubuntu
这几个
具体详见 官方安装文档 和 Docker CE 官方仓库还可以指定仓库版本号bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ --branch centos \ --branch-version 9
可以使用该选项来控制安装软件包的兼容性(仅适用于红帽系操作系统),具体详见对应仓库目录中代表版本号的路径名称(正整数)。
-
指定 Docker Engine 安装版本#
指定安装版本时会忽略
是否安装最新版本
的命令选项,格式为主版本.次版本.补丁版本
,例如28.4.1
。如果指定的版本不存在或者不支持当前系统,届时脚本会报错跳出
-
国际化(I18n)#
脚本提供多语言支持,当前内置
简体中文
、繁體中文
、English
共三种显示语言,默认为简体中文
-
无人值守(自动化)#
不通过交互完成安装操作,至少需要使用如下命令选项来实现,建议熟悉后再使用
参考命令bash <(curl -sSL https://linuxmirrors.cn/docker.sh) \ --source mirror.example.com/docker-ce \ --source-registry registry.hub.docker.com \ --protocol http \ --use-intranet-source false \ --install-latest true \ --close-firewall true \ --ignore-backup-tips
如果报错
命令选项无效
那么请检查选项合法性以及空格字符编码,在示例中一行写一个选项是为了提高命令的可读性 -
纯净模式#
推出该功能是为了便于开发以及运维人员使用,启用后会精简脚本内容输出,建议搭配其它命令选项无交互使用
滚动输出的命令日志可能存在无法预料的显示问题,不过目前暂未发现异常
常见问题#
-
关于服务报错无法启动#
非新装环境可能会在运行脚本后遇到
Docker
服务无法启动的情况,建议重新安装来解决,卸载不会删除本地镜像和容器数据卸载命令如下:
卸载完成后重新执行脚本安装即可
-
关于不支持的操作系统#
如果提示不支持那么请使用系统自带的包管理工具进行安装。因为这些软件包由 Linux 发行版的软件包维护者构建和维护,可能存在配置差异或由修改后的源代码构建。
最佳实践#
适用于企业产品部署以及 CI/CD 等自动化运维场景的代码示例(展开查看)
如果你不想让用户进行任何交互,请使用 完全自动化
示例
-
完全自动化(推荐)#
# !/bin/bash function install_docker() { if command -v docker &>/dev/null; then return fi # script options local script_host="linuxmirrors.cn" # official host (CDN), more host see official site local script_lang="zh-hans" # script display language: zh-hans / zh-hant / en / auto local close_firewall="true" # close firewalld service and selinux (redhat systems need) # mirrors options local source_docker_ce_address="mirrors.tencent.com/docker-ce" # global high availability address local source_docker_ce_protocol="https" # https or http local source_docker_registry_address="registry.hub.docker.com" # judge network environment local region_code="$(curl -s ipinfo.io/country)" if [[ "${region_code}" == "CN" ]]; then local source_intranet_address="" # use intranet source if possible if [ -s "/sys/class/dmi/id/sys_vendor" ]; then local sys_vendor="$(cat /sys/class/dmi/id/sys_vendor)" if [[ "${sys_vendor}" == *"Alibaba"* ]]; then source_intranet_address="mirrors.cloud.aliyuncs.com/docker-ce" elif [[ "${sys_vendor}" == *"Huawei"* ]]; then source_intranet_address="mirrors.myhuaweicloud.com/docker-ce" elif [[ "${sys_vendor}" == *"Tencent"* ]]; then source_intranet_address="mirrors.tencentyun.com/docker-ce" elif [[ "${sys_vendor}" == *"Inspur"* ]]; then source_intranet_address="mirrors.ivolces.com/docker-ce" fi else cat /etc/motd | grep "Alibaba Cloud " -q if [ $? -eq 0 ]; then source_intranet_address="mirrors.cloud.aliyuncs.com/docker-ce" fi fi # check connectivity if [ -n "${source_intranet_address}" ]; then if ping -c1 -W1 "${source_intranet_address%%/*}" >/dev/null 2>&1; then source_docker_ce_address="${source_intranet_address}" source_docker_ce_protocol="http" fi fi # registry mirror (best choice for Chinese mainland) source_docker_registry_address="docker.1ms.run" else # use official source source_docker_ce_address="download.docker.com" source_docker_registry_address="registry.hub.docker.com" fi # install docker engine bash <(curl -sSL https://${script_host}/docker.sh) \ --source "${source_docker_ce_address}" \ --source-registry "${source_docker_registry_address}" \ --protocol "${source_docker_ce_protocol}" \ --close-firewall "${close_firewall}" \ --install-latest true \ --ignore-backup-tips \ --lang "${script_lang}" \ --pure-mode } install_docker
-
简易方式#
# !/bin/bash function install_docker() { if command -v docker &>/dev/null; then return fi bash <(curl -sSL https://${script_host}/docker.sh) \ --install-latest true \ --ignore-backup-tips \ --lang auto if command -v docker &>/dev/null; then echo -e "\n# Docker installation successful.\n# Please run this script again manually after installation." exit 0 else echo -e "\n# Docker installation failed.\n# Please check the error message above." exit 1 fi } install_docker
注:不指定
Docker CE 源
以及镜像仓库源
则会交由用户进行交互选择,届时会自动清屏$ clear
,从而导致你脚本的运行日志被清除