mirror of
https://gitee.com/SuperManito/LinuxMirrors
synced 2025-11-03 07:50:28 +08:00
更新 Docker 脚本软件源并新增命令选项
This commit is contained in:
@@ -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=("$@")
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
</picture>
|
||||
</a>
|
||||
</p>
|
||||
<p align="center">GNU/Linux 更换系统软件源脚本及 Docker 安装脚本</p>
|
||||
<p align="center">GNU/Linux 更换系统软件源脚本及 Docker 安装与换源脚本</p>
|
||||
<p align="center">
|
||||
<a href="https://github.com/SuperManito/LinuxMirrors/blob/main/LICENSE"><img src="https://shields.io/github/license/SuperManito/LinuxMirrors?color=%23007bff" alt="License: MIT"></a>
|
||||
<a href="https://github.com/SuperManito/LinuxMirrors"><img src="https://img.shields.io/github/stars/SuperManito/LinuxMirrors?color=%23007bff&style=flat-square" alt="Stars"></a><br>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
---
|
||||
title: 一键脚本使换源更简单
|
||||
description: GNU/Linux 更换系统软件源脚本及 Docker 安装脚本
|
||||
description: GNU/Linux 更换系统软件源脚本及 Docker 安装与换源脚本
|
||||
comments: true
|
||||
glightbox: false
|
||||
comments_description: 该评论区仅用于展示项目使用评价和经验分享,反馈问题或提出建议请前往<a href="/community">社区</a>
|
||||
@@ -19,7 +19,7 @@ hide:
|
||||
</div>
|
||||
<img src="/assets/images/brand/light/2.png#only-light" alt="LinuxMirrors" style="width: 300px" />
|
||||
<img src="/assets/images/brand/dark/2.png#only-dark" alt="LinuxMirrors" style="width: 300px" />
|
||||
<figcaption>GNU/Linux 更换系统软件源脚本及 Docker 安装脚本</figcaption>
|
||||
<figcaption>GNU/Linux 更换系统软件源脚本及 Docker 安装与换源脚本</figcaption>
|
||||
<figcaption>一键脚本使换源更简单</figcaption>
|
||||
</figure>
|
||||
<figure class="home-cmd" style="margin: 0; display: flex; flex-direction: column; justify-content: center" markdown>
|
||||
|
||||
@@ -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 安装与换源脚本
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
@@ -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 "项目内置的镜像仓库源"
|
||||
|
||||
<div style="text-align: center" markdown>
|
||||
<div style="font-size: 0.8rem"><strong>国内可用</strong></div>
|
||||
|
||||
| 站点名称 | 地址 | 说明 |
|
||||
| :--: | :--: | :-- |
|
||||
| 毫秒镜像 | [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") | 企业产品自用镜像 |
|
||||
|
||||
<blockquote style="border-left: none !important">本开源项目不适合采集个人自建的镜像加速器,如有需要请搭配命令选项自行使用</blockquote>
|
||||
|
||||
<div style="font-size: 0.8rem; margin-top: 1rem"><strong>其它</strong></div>
|
||||
|
||||
| 站点名称 | 地址 | 站点名称 | 地址 |
|
||||
| :- | :-: | :- | :-: |
|
||||
| 阿里云(杭州) | [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") |
|
||||
|
||||
<blockquote style="border-left: none !important">国内云计算企业的镜像仓库仅针对其业务,境内实例仍无法访问 Docker Hub</blockquote>
|
||||
|
||||
</div>
|
||||
|
||||
- ### 命令选项(高级用法)
|
||||
|
||||
@@ -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`
|
||||
|
||||
- 指定镜像仓库地址
|
||||
|
||||
> 请手动替换 `<example.registry.com>` 为镜像仓库地址后在执行,详见上方 “项目内置的镜像仓库源” 表格中的地址列
|
||||
|
||||
``` bash
|
||||
SOURCE_REGISTRY='"https://<example.registry.com>"'
|
||||
```
|
||||
还可以指定多个镜像仓库,例如 `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 软件源仓库
|
||||
|
||||
脚本默认会自动判断一般无需指定,除非你有特殊需求
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user