diff --git a/DockerInstallation.sh b/DockerInstallation.sh index 963523d..52514d6 100755 --- a/DockerInstallation.sh +++ b/DockerInstallation.sh @@ -1,6 +1,6 @@ #!/bin/bash ## Author: SuperManito -## Modified: 2025-04-10 +## Modified: 2025-05-12 ## License: MIT ## GitHub: https://github.com/SuperManito/LinuxMirrors ## Website: https://linuxmirrors.cn @@ -26,9 +26,11 @@ mirror_list_docker_ce=( ## Docker Registry 仓库列表 # 格式:"软件源名称@软件源地址" mirror_list_registry=( - "Docker Proxy(推荐)@dockerproxy.net" + "毫秒镜像@docker.1ms.run" + "轩辕镜像@docker.xuanyuan.me" + "Docker Proxy@dockerproxy.net" "道客 DaoCloud@docker.m.daocloud.io" - "AtomHub 可信镜像中心@hub.atomgit.com" + "1Panel 镜像@docker.1panel.live" "阿里云(杭州)@registry.cn-hangzhou.aliyuncs.com" "阿里云(上海)@registry.cn-shanghai.aliyuncs.com" "阿里云(青岛)@registry.cn-qingdao.aliyuncs.com" @@ -43,17 +45,17 @@ mirror_list_registry=( "阿里云(香港)@registry.cn-hongkong.aliyuncs.com" "阿里云(日本-东京)@registry.ap-northeast-1.aliyuncs.com" "阿里云(新加坡)@registry.ap-southeast-1.aliyuncs.com" - "阿里云(澳大利亚-悉尼)@registry.ap-southeast-2.aliyuncs.com" "阿里云(马来西亚-吉隆坡)@registry.ap-southeast-3.aliyuncs.com" "阿里云(印度尼西亚-雅加达)@registry.ap-southeast-5.aliyuncs.com" - "阿里云(印度-孟买)@registry.ap-south-1.aliyuncs.com" "阿里云(德国-法兰克福)@registry.eu-central-1.aliyuncs.com" "阿里云(英国-伦敦)@registry.eu-west-1.aliyuncs.com" "阿里云(美国西部-硅谷)@registry.us-west-1.aliyuncs.com" "阿里云(美国东部-弗吉尼亚)@registry.us-east-1.aliyuncs.com" "阿里云(阿联酋-迪拜)@registry.me-east-1.aliyuncs.com" "腾讯云@mirror.ccs.tencentyun.com" - "谷歌云@mirror.gcr.io" + "谷歌云(北美)@gcr.io" + "谷歌云(亚洲)@asia.gcr.io" + "谷歌云(欧洲)@eu.gcr.io" "官方 Docker Hub@registry.hub.docker.com" ) @@ -132,12 +134,17 @@ function main() { collect_system_info run_start choose_mirrors - choose_protocol - close_firewall_service - install_dependency_packages - configure_docker_ce_mirror - install_docker_engine - check_version + if [[ "${ONLY_REGISTRY}" == "true" ]]; then + only_change_docker_registry_mirror + else + choose_protocol + close_firewall_service + install_dependency_packages + configure_docker_ce_mirror + install_docker_engine + change_docker_registry_mirror + check_installed_result + fi run_end } @@ -157,6 +164,7 @@ function handle_command_options() { --install-latest 是否安装最新版本的 Docker Engine true 或 false --close-firewall 是否关闭防火墙 true 或 false --clean-screen 是否在运行前清除屏幕上的所有内容 true 或 false + --only-registry 仅更换镜像仓库模式 无 --ignore-backup-tips 忽略覆盖备份提示 无 --pure-mode 纯净模式,精简打印内容 无 @@ -295,6 +303,10 @@ function handle_command_options() { output_error "命令选项 ${BLUE}$1${PLAIN} 无效,请在该选项后指定 true 或 false !" fi ;; + ## 仅更换镜像仓库模式 + --only-registry) + ONLY_REGISTRY="true" + ;; ## 纯净模式 --pure-mode) PURE_MODE="true" @@ -600,7 +612,7 @@ function choose_mirrors() { [[ "${PURE_MODE}" != "true" ]] && print_title local mirror_list_name - if [[ -z "${SOURCE}" ]]; then + if [[ -z "${SOURCE}" ]] && [[ "${ONLY_REGISTRY}" != "true" ]]; then mirror_list_name="mirror_list_docker_ce" if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then sleep 1 >/dev/null 2>&1 @@ -815,55 +827,6 @@ function install_dependency_packages() { fi } -## 选择系统包管理器 -function get_package_manager() { - local command="yum" - case "${SYSTEM_JUDGMENT}" in - "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMALINUX}" | "${SYSTEM_RHEL}") - case "${SYSTEM_VERSION_ID_MAJOR}" in - 9 | 10) - command="dnf" - ;; - esac - ;; - "${SYSTEM_FEDORA}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}") - command="dnf" - ;; - esac - echo "${command}" -} - -## 卸载 Docker Engine 原有版本软件包 -function uninstall_original_version() { - if command -v docker &>/dev/null; then - # 先停止并禁用 Docker 服务 - systemctl disable --now docker >/dev/null 2>&1 - sleep 2s - fi - # 确定需要卸载的软件包 - local package_list - case "${SYSTEM_FACTIONS}" in - "${SYSTEM_DEBIAN}") - package_list='docker* podman podman-docker containerd runc' - ;; - "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}") - package_list='docker* podman podman-docker runc' - ;; - esac - # 卸载软件包并清理残留 - case "${SYSTEM_FACTIONS}" in - "${SYSTEM_DEBIAN}") - apt-get remove -y $package_list >/dev/null 2>&1 - apt-get autoremove -y >/dev/null 2>&1 - ;; - "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}") - local package_manager="$(get_package_manager)" - $package_manager remove -y $package_list >/dev/null 2>&1 - $package_manager autoremove -y >/dev/null 2>&1 - ;; - esac -} - ## 配置 Docker CE 源 function configure_docker_ce_mirror() { local commands=() @@ -949,6 +912,37 @@ function install_docker_engine() { rm -rf $DockerCEVersionFile $DockerCECLIVersionFile } + ## 卸载 Docker Engine 原有版本软件包 + function uninstall_original_version() { + if command -v docker &>/dev/null; then + # 先停止并禁用 Docker 服务 + systemctl disable --now docker >/dev/null 2>&1 + sleep 2s + fi + # 确定需要卸载的软件包 + local package_list + case "${SYSTEM_FACTIONS}" in + "${SYSTEM_DEBIAN}") + package_list='docker* podman podman-docker containerd runc' + ;; + "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}") + package_list='docker* podman podman-docker runc' + ;; + esac + # 卸载软件包并清理残留 + case "${SYSTEM_FACTIONS}" in + "${SYSTEM_DEBIAN}") + apt-get remove -y $package_list >/dev/null 2>&1 + apt-get autoremove -y >/dev/null 2>&1 + ;; + "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}") + local package_manager="$(get_package_manager)" + $package_manager remove -y $package_list >/dev/null 2>&1 + $package_manager autoremove -y >/dev/null 2>&1 + ;; + esac + } + ## 安装 function install_main() { local target_docker_version @@ -1050,55 +1044,6 @@ function install_docker_engine() { [ $? -ne 0 ] && output_error "安装 Docker Engine 失败!" } - ## 修改 Docker Registry 镜像仓库源 - function change_docker_registry_mirror() { - if [[ "${REGISTRY_SOURCEL}" == "registry.hub.docker.com" ]]; then - return - fi - if [ -d "${DockerDir}" ] && [ -e "${DockerConfig}" ]; then - if [ -e "${DockerConfigBackup}" ]; then - if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then - if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then - echo '' - interactive_select_boolean "${BOLD}检测到已备份的 Docker 配置文件,是否跳过覆盖备份?${PLAIN}" - if [[ "${_SELECT_RESULT}" == "false" ]]; then - echo '' - cp -rvf $DockerConfig $DockerConfigBackup 2>&1 - fi - else - local CHOICE_BACKUP=$(echo -e "\n${BOLD}└─ 检测到已备份的 Docker 配置文件,是否跳过覆盖备份? [Y/n] ${PLAIN}") - read -p "${CHOICE_BACKUP}" INPUT - [[ -z "${INPUT}" ]] && INPUT=Y - case $INPUT in - [Yy] | [Yy][Ee][Ss]) ;; - [Nn] | [Nn][Oo]) - echo '' - cp -rvf $DockerConfig $DockerConfigBackup 2>&1 - ;; - *) - echo -e "\n$WARN 输入错误,默认不覆盖!" - ;; - esac - fi - fi - else - echo '' - cp -rvf $DockerConfig $DockerConfigBackup 2>&1 - echo -e "\n$COMPLETE 已备份原有 Docker 配置文件" - fi - sleep 2s - else - mkdir -p $DockerDir >/dev/null 2>&1 - touch $DockerConfig - fi - echo -e '{\n "registry-mirrors": ["https://SOURCE"]\n}' >$DockerConfig - sed -i "s|SOURCE|${SOURCE_REGISTRY}|g" $DockerConfig - systemctl daemon-reload - if [[ $(systemctl is-active docker) == "active" ]]; then - systemctl restart docker - fi - } - ## 判断是否手动选择安装版本 if [[ -z "${INSTALL_LATESTED_DOCKER}" ]]; then if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then @@ -1144,17 +1089,164 @@ function install_docker_engine() { rm -rf $DockerVersionFile if [[ "${current_docker_version}" == "${latest_docker_version}" ]] && [[ "${INSTALL_LATESTED_DOCKER}" == "true" ]]; then echo -e "\n$TIP 检测到系统已安装 Docker Engine 且是最新版本,跳过安装" - change_docker_registry_mirror - return + else + uninstall_original_version + install_main + fi + else + uninstall_original_version + install_main + fi +} + +## 修改 Docker Registry 镜像仓库源 +function change_docker_registry_mirror() { + ## 使用官方 Docker Hub + if [[ "${REGISTRY_SOURCEL}" == "registry.hub.docker.com" ]]; then + if [ -s "${DockerConfig}" ]; then + ## 安装 jq + local package_manager="$(get_package_manager)" + $package_manager install -y jq + if command -v jq &>/dev/null; then + jq 'del(.["registry-mirrors"])' $DockerConfig >$DockerConfig.tmp && mv $DockerConfig.tmp $DockerConfig + # 重启服务 + systemctl daemon-reload + if [[ $(systemctl is-active docker) == "active" ]]; then + systemctl restart docker + fi + else + echo -e "\n${WARN} 请自行删除 $DockerConfig 中的 ${BLUE}registry-mirrors${PLAIN} 配置并重启服务 ${BLUE}systemctl daemon-reload && systemctl restart docker${PLAIN}\n" + fi + fi + return + fi + ## 备份原有配置文件 + if [ -d "${DockerDir}" ] && [ -e "${DockerConfig}" ]; then + if [ -e "${DockerConfigBackup}" ]; then + if [[ "${IGNORE_BACKUP_TIPS}" == "false" ]]; then + if [[ "${CAN_USE_ADVANCED_INTERACTIVE_SELECTION}" == "true" ]]; then + echo '' + interactive_select_boolean "${BOLD}检测到已备份的 Docker 配置文件,是否跳过覆盖备份?${PLAIN}" + if [[ "${_SELECT_RESULT}" == "false" ]]; then + echo '' + cp -rvf $DockerConfig $DockerConfigBackup 2>&1 + fi + else + local CHOICE_BACKUP=$(echo -e "\n${BOLD}└─ 检测到已备份的 Docker 配置文件,是否跳过覆盖备份? [Y/n] ${PLAIN}") + read -p "${CHOICE_BACKUP}" INPUT + [[ -z "${INPUT}" ]] && INPUT=Y + case $INPUT in + [Yy] | [Yy][Ee][Ss]) ;; + [Nn] | [Nn][Oo]) + echo '' + cp -rvf $DockerConfig $DockerConfigBackup 2>&1 + ;; + *) + echo -e "\n$WARN 输入错误,默认不覆盖!" + ;; + esac + fi + fi + else + echo '' + cp -rvf $DockerConfig $DockerConfigBackup 2>&1 + echo -e "\n$COMPLETE 已备份原有 Docker 配置文件" + fi + sleep 2s + else + mkdir -p $DockerDir >/dev/null 2>&1 + touch $DockerConfig + fi + + echo -e '{\n "registry-mirrors": ["https://'"${SOURCE_REGISTRY}"'"]\n}' >$DockerConfig + ## 重启服务 + systemctl daemon-reload + if [[ $(systemctl is-active docker) == "active" ]]; then + systemctl restart docker + fi +} + +## 仅修改 Docker Registry 镜像仓库源模式 +function only_change_docker_registry_mirror() { + ## 判定是否已安装 + case "${SYSTEM_FACTIONS}" in + "${SYSTEM_DEBIAN}") + dpkg -l | grep docker-ce-cli -q + ;; + "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}") + rpm -qa | grep docker-ce-cli -q + ;; + esac + if [ $? -ne 0 ]; then + ## 仅镜像仓库换源模式 + if [[ "${ONLY_REGISTRY}" == "true" ]]; then + output_error "当前尚未安装 Docker Engine,请取消设置 ${BLUE}--only-registry${PLAIN} 命令选项后重新执行脚本!" fi fi - uninstall_original_version - install_main - change_docker_registry_mirror + + [ -d "${DockerDir}" ] || mkdir -p "${DockerDir}" + if [ -s "${DockerConfig}" ]; then + ## 安装 jq + if ! command -v jq &>/dev/null; then + ## 更新软件源 + local package_manager + local commands=() + case "${SYSTEM_FACTIONS}" in + "${SYSTEM_DEBIAN}") + package_manager="apt-get" + commands+=("${package_manager} update") + ;; + "${SYSTEM_REDHAT}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}") + package_manager="$(get_package_manager)" + commands+=("${package_manager} makecache") + ;; + esac + if [[ "${PURE_MODE}" == "true" ]]; then + local exec_cmd="" + for cmd in "${commands[@]}"; do + if [[ -z "${exec_cmd}" ]]; then + exec_cmd="${cmd}" + else + exec_cmd="${exec_cmd} && ${cmd}" + fi + done + echo '' + animate_exec "${exec_cmd}" "${SYNC_MIRROR_TEXT}" + else + echo -e "\n$WORKING ${SYNC_MIRROR_TEXT}...\n" + for cmd in "${commands[@]}"; do + eval "${cmd}" + done + echo -e "\n$COMPLETE ${SYNC_MIRROR_TEXT}结束\n" + fi + if [ $? -ne 0 ]; then + output_error "${SYNC_MIRROR_TEXT}出错,请先解决系统原有软件源错误以确保 ${BLUE}${package_manager}${PLAIN} 软件包管理工具可用!" + fi + $package_manager install -y jq + if ! command -v jq &>/dev/null; then + output_error "软件包 ${BLUE}jq${PLAIN} 安装失败,请自行安装后重新运行脚本!" + fi + fi + [ -s "${DockerConfig}" ] || echo "{}" >$DockerConfig + jq '.["registry-mirrors"] = ["https://'"${SOURCE_REGISTRY}"'"]' $DockerConfig >$DockerConfig.tmp && mv $DockerConfig.tmp $DockerConfig + else + echo -e '{\n "registry-mirrors": ["https://'"${SOURCE_REGISTRY}"'"]\n}' >$DockerConfig + fi + + echo -e "\n${BLUE}\$${PLAIN} docker info --format '{{json .RegistryConfig.Mirrors}}'" + docker info --format '{{json .RegistryConfig.Mirrors}}' + ## 重启服务 + systemctl daemon-reload + if [[ $(systemctl is-active docker) == "active" ]]; then + systemctl restart docker + fi + if [[ "${PURE_MODE}" != "true" ]]; then + echo -e "\n$COMPLETE 已更换镜像仓库" + fi } ## 查看版本并验证安装结果 -function check_version() { +function check_installed_result() { if command -v docker &>/dev/null; then systemctl enable --now docker >/dev/null 2>&1 echo -en "\n当前安装版本:" @@ -1193,6 +1285,24 @@ function check_version() { fi } +## 选择系统包管理器 +function get_package_manager() { + local command="yum" + case "${SYSTEM_JUDGMENT}" in + "${SYSTEM_CENTOS_STREAM}" | "${SYSTEM_ROCKY}" | "${SYSTEM_ALMALINUX}" | "${SYSTEM_RHEL}") + case "${SYSTEM_VERSION_ID_MAJOR}" in + 9 | 10) + command="dnf" + ;; + esac + ;; + "${SYSTEM_FEDORA}" | "${SYSTEM_OPENEULER}" | "${SYSTEM_OPENCLOUDOS}" | "${SYSTEM_ANOLISOS}") + command="dnf" + ;; + esac + echo "${command}" +} + function interactive_select_mirror() { _SELECT_RESULT="" local options=("$@") diff --git a/README.md b/README.md index 4af8ef5..42cddf2 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@

-

GNU/Linux 更换系统软件源脚本及 Docker 安装脚本

+

GNU/Linux 更换系统软件源脚本及 Docker 安装与换源脚本

License: MIT Stars
diff --git a/docs/index.md b/docs/index.md index f832be4..8218f4a 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,6 +1,6 @@ --- title: 一键脚本使换源更简单 -description: GNU/Linux 更换系统软件源脚本及 Docker 安装脚本 +description: GNU/Linux 更换系统软件源脚本及 Docker 安装与换源脚本 comments: true glightbox: false comments_description: 该评论区仅用于展示项目使用评价和经验分享,反馈问题或提出建议请前往社区 @@ -19,7 +19,7 @@ hide: LinuxMirrors LinuxMirrors -

GNU/Linux 更换系统软件源脚本及 Docker 安装脚本
+
GNU/Linux 更换系统软件源脚本及 Docker 安装与换源脚本
一键脚本使换源更简单
diff --git a/docs/other/index.md b/docs/other/index.md index 83b5553..c1c1712 100644 --- a/docs/other/index.md +++ b/docs/other/index.md @@ -7,9 +7,9 @@ hide: > 如果觉得这个项目不错对您有所帮助的话,请点击仓库右上角的 Star 并分享给更多的朋友 :octicons-heart-fill-24:{ .heart style="color: red" } -!!! tip inline end "本项目脚本已被众多开源项目使用,广受社区用户好评" +!!! tip inline end "本项目已被众多流行项目使用,广受社区用户好评" -## :simple-docker:{style="color: #1d63ed"} Docker 安装脚本 +## :simple-docker:{style="color: #1d63ed"} Docker 安装与换源脚本 @@ -84,18 +84,59 @@ hide: bash <(curl -sSL https://cdn.jsdelivr.net/gh/SuperManito/LinuxMirrors@main/DockerInstallation.sh) ``` -集成安装 [`Docker Engine`](https://docs.docker.com/engine) 和 [`Docker Compose (插件)`](https://docs.docker.com/compose/install/linux),支持选择或更换软件源以及镜像仓库、安装指定版本、重装等功能,支持 ARM 架构处理器 +集成安装 [`Docker Engine`](https://docs.docker.com/engine) 和 [`Docker Compose (插件)`](https://docs.docker.com/compose/install/linux),支持选择或更换软件源以及镜像仓库、安装指定版本、重装等功能,支持 ARM 架构 -脚本参考 [官方文档](https://docs.docker.com/engine/install) 采用官方提供的方法使用系统包管理工具进行安装,这意味着可安装的版本是由官方仓库决定的,本脚本不存在兼容性等问题。 +脚本参考 [_Docker 官方文档_](https://docs.docker.com/engine/install) 使用系统包管理工具进行安装,不存在兼容性、安全性等问题,可安装的版本由 Docker CE 仓库决定。 -> 注:Docker Compose 自 V2 版本起开始作为 Docker CLI 的一部分,不再需要单独安装,请使用 `docker compose` 命令替代 `docker-compose` +脚本支持仅更换镜像加速器用于解决当前使用镜像源的失效问题,具体详见下方[仅更换镜像仓库](#仅更换镜像仓库) !!! node "软件源说明" `Docker CE` 软件仓库,全称 Docker Community Edition(Docker 社区版),用于下载并安装 Docker 相关软件包 `Docker Registry` 镜像仓库,用于控制拉取镜像的默认来源存储仓库,又称镜像加速器,默认为官方的 Docker Hub 仓库 - 由于一些不可抗力的因素,目前国内网络环境一般无法正常访问 Docker Hub 因此无法拉取镜像,使用推荐的镜像源勉强能够使用不过速度可能会很慢 + 由于一些不可抗力的因素,目前国内网络环境一般无法正常访问 Docker Hub 因此无法拉取镜像,建议使用下方提到的国内可用镜像加速器 + +!!! tip "关于 Docker Compose" + + 默认自动安装,Docker Compose 自 V2 版本起开始作为 Docker CLI 的一部分,不再需要单独安装,请使用 `docker compose` 命令替代 `docker-compose` + +!!! quote "项目内置的镜像仓库源" + +
+
国内可用
+ + | 站点名称 | 地址 | 说明 | + | :--: | :--: | :-- | + | 毫秒镜像 | [docker.1ms.run](https://1ms.run "docker.1ms.run") | 速度快,支持付费定制 | + | 轩辕镜像 | [docker.xuanyuan.me](https://xuanyuan.me "docker.xuanyuan.me") | 专为科研提供,支持付费定制 | + | Docker Proxy | [dockerproxy.net](https://dockerproxy.net "dockerproxy.net") | 由 ghproxy 创建,可用性高但速度很慢,支持企业付费加速 | + | 道客 DaoCloud | [docker.m.daocloud.io](https://docker.m.daocloud.io "docker.m.daocloud.io") | 老牌企业镜像,速度较快,白名单模式 | + | 1Panel 镜像 | [docker.1panel.live](https://1panel.cn "docker.1panel.live") | 企业产品自用镜像 | + +
本开源项目不适合采集个人自建的镜像加速器,如有需要请搭配命令选项自行使用
+ +
其它
+ + | 站点名称 | 地址 | 站点名称 | 地址 | + | :- | :-: | :- | :-: | + | 阿里云(杭州) | [registry.cn-hangzhou.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.cn-hangzhou.aliyuncs.com") | 阿里云(日本-东京) | [registry.ap-northeast-1.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.ap-northeast-1.aliyuncs.com") | + | 阿里云(上海) | [registry.cn-shanghai.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.cn-shanghai.aliyuncs.com") | 阿里云(新加坡) | [registry.ap-southeast-1.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.ap-southeast-1.aliyuncs.com") | + | 阿里云(青岛) | [registry.cn-qingdao.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.cn-qingdao.aliyuncs.com") | 阿里云(马来西亚-吉隆坡) | [registry.ap-southeast-3.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.ap-southeast-3.aliyuncs.com") | + | 阿里云(北京) | [registry.cn-beijing.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.cn-beijing.aliyuncs.com") | 阿里云(印度尼西亚-雅加达) | [registry.ap-southeast-5.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.ap-southeast-5.aliyuncs.com") | + | 阿里云(张家口) | [registry.cn-zhangjiakou.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.cn-zhangjiakou.aliyuncs.com") | 阿里云(德国-法兰克福) | [registry.eu-central-1.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.eu-central-1.aliyuncs.com") | + | 阿里云(呼和浩特) | [registry.cn-huhehaote.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.cn-huhehaote.aliyuncs.com") | 阿里云(英国-伦敦) | [registry.eu-west-1.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.eu-west-1.aliyuncs.com") | + | 阿里云(乌兰察布) | [registry.cn-wulanchabu.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.cn-wulanchabu.aliyuncs.com") | 阿里云(美国西部-硅谷) | [registry.us-west-1.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.us-west-1.aliyuncs.com") | + | 阿里云(深圳) | [registry.cn-shenzhen.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.cn-shenzhen.aliyuncs.com") | 阿里云(美国东部-弗吉尼亚) | [registry.us-east-1.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.us-east-1.aliyuncs.com") | + | 阿里云(河源) | [registry.cn-heyuan.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.cn-heyuan.aliyuncs.com") | 阿里云(阿联酋-迪拜) | [registry.me-east-1.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.me-east-1.aliyuncs.com") | + | 阿里云(广州) | [registry.cn-guangzhou.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.cn-guangzhou.aliyuncs.com") | 谷歌云(北美) | [gcr.io](https://cloud.google.com/artifact-registry/docs/transition/gcr-repositories?hl=zh-cn "https://gcr.io") | + | 阿里云(成都) | [registry.cn-chengdu.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.cn-chengdu.aliyuncs.com") | 谷歌云(亚洲) | [asia.gcr.io](https://cloud.google.com/artifact-registry/docs/transition/gcr-repositories?hl=zh-cn "https://asia.gcr.io") | + | 阿里云(香港) | [registry.cn-hongkong.aliyuncs.com](https://help.aliyun.com/zh/acr/user-guide/accelerate-the-pulls-of-docker-official-images "https://registry.cn-hongkong.aliyuncs.com") | 谷歌云(欧洲) | [eu.gcr.io](https://cloud.google.com/artifact-registry/docs/transition/gcr-repositories?hl=zh-cn "https://eu.gcr.io") | + | 腾讯云 | [mirror.ccs.tencentyun.com](https://cloud.tencent.com/document/product/1207/45596 "https://mirror.ccs.tencentyun.com") | Docker Hub 官方 | [registry.hub.docker.com](https://hub.docker.com/ "registry.hub.docker.com") | + +
国内云计算企业的镜像仓库仅针对其业务,境内实例仍无法访问 Docker Hub
+ +
- ### 命令选项(高级用法) @@ -114,6 +155,7 @@ hide: --install-latest 是否安装最新版本的 Docker Engine true 或 false --close-firewall 是否关闭防火墙 true 或 false --clean-screen 是否在运行前清除屏幕上的所有内容 true 或 false + --only-registry 仅更换镜像仓库模式 无 --ignore-backup-tips 忽略覆盖备份提示 无 --pure-mode 纯净模式,精简打印内容 无 ``` @@ -129,6 +171,7 @@ hide: | `--install-latest` | 是否安装最新版本的 Docker Engine | `true` 或 `false` | | `--close-firewall` | 是否关闭防火墙 | `true` 或 `false` | | `--clean-screen` | 是否在运行前清除屏幕上的所有内容 | `true` 或 `false` | + | `--only-registry` | 仅更换镜像仓库模式 | 无 | | `--ignore-backup-tips` | 忽略覆盖备份提示(即不覆盖备份) | 无 | | `--pure-mode` | 纯净模式,精简打印内容 | 无 | @@ -147,6 +190,61 @@ hide: bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --source-registry registry.example.com ``` + - #### 仅更换镜像仓库 + + === "使用脚本一键替换" + + 仅更换镜像加速器,当检测到未安装 Docker 时会报错跳出 + + ``` { .bash .no-copy } + bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --only-registry + ``` + + === "手动替换" + + - 安装 `jq` 软件包 + + === "Debian 系 / openKylin" + + ``` bash + apt-get install -y jq + ``` + + > `Debian`   `Ubuntu`   `Kali`   `Linux Mint`   `Deepin`   `Zorin OS`   `Armbian`   `Proxmox VE`   `Raspberry Pi OS`   `openKylin` + + 新装系统需要先执行一遍更新 `apt-get update` + + === "RedHat 系 / openEuler / OpenCloudOS / Anolis OS" + + ``` bash + dnf install -y jq || yum install -y jq + ``` + + > `Red Hat Enterprise Linux`   `CentOS`   `Rocky Linux`   `AlmaLinux`   `Fedora`   `openEuler`   `OpenCloudOS`   `Anolis OS` + + - 指定镜像仓库地址 + + > 请手动替换 `` 为镜像仓库地址后在执行,详见上方 “项目内置的镜像仓库源” 表格中的地址列 + + ``` bash + SOURCE_REGISTRY='"https://"' + ``` + 还可以指定多个镜像仓库,例如 `SOURCE_REGISTRY='"https://example.registry.com","https://test.registry.com"'`,注意用英文逗号分割 + + - 替换镜像仓库地址 + + ``` bash + [ -s "/etc/docker/daemon.json" ] || echo "{}" >/etc/docker/daemon.json + jq '.["registry-mirrors"] = ['"${SOURCE_REGISTRY}"']' /etc/docker/daemon.json >/etc/docker/daemon.json.tmp && mv /etc/docker/daemon.json.tmp + ``` + + - 重启 Docker 服务 + + ``` bash + systemctl daemon-reload + [[ $(systemctl is-active docker) == "active" ]] && systemctl restart docker || systemctl enable --now docker + ``` + - #### 指定 Docker CE 软件源仓库 脚本默认会自动判断一般无需指定,除非你有特殊需求 diff --git a/requirements.txt b/requirements.txt index 3ea3887..b24d6b9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,4 +1,4 @@ -mkdocs-material==9.6.12 +mkdocs-material==9.6.13 mkdocs-glightbox==0.4.0 mkdocs-exclude-search==0.6.6 mkdocs-minify-plugin==0.8.0