Files
workspace/code/docusaurus/docs/dev-tools/docker.md
T
2026-04-24 17:28:11 +08:00

310 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Docker(容器化平台)
Docker 是一个 容器化平台,可以让你把应用程序和它运行所需的环境打包在一起,形成一个独立的“容器”。
简单来说,它就像一个轻量级的虚拟机,但比虚拟机更快、更省资源。
## 概念
1. 镜像(Image)
- 镜像是一个 只读模板,包含应用程序和依赖环境。
- 可以理解为应用的快照,像“配方”。
2. 容器(Container)
- 容器是镜像的 运行实例,可以启动、停止、删除。
- 可以理解为根据配方做出来的“饭菜”。
3. Dockerfile
- 用来定义镜像内容的文件,相当于“配方清单”。
- 里面写明了基础镜像、依赖、环境变量、运行命令等。
4. Docker Hub
- 官方提供的镜像仓库,可以下载别人已经打包好的镜像,也可以上传自己的镜像。
## 快速安装
轩辕提供的安装脚本:
```bash
bash <(wget -qO- https://xuanyuan.cloud/docker.sh)
```
> 参考网站:https://zhuanlan.zhihu.com/p/24461370776
## 脚本安装
### 对于基于Debian的系统(如Ubuntu、Debian)
```bash
#!/bin/bash
# -------------------------
# 1️⃣ 卸载旧版本 Docker
# -------------------------
sudo apt-get remove -y \
docker \
docker-engine \
docker.io \
containerd \
runc \
docker-ce \
docker-ce-cli \
containerd.io \
docker-compose-plugin
# 可选:清理残留数据(慎用,会删除容器和镜像)
# sudo rm -rf /var/lib/docker /var/lib/containerd
echo "旧版本 Docker 已卸载(如果存在)"
# -------------------------
# 2️⃣ 更新软件包列表并安装必要依赖
# -------------------------
sudo apt-get update
sudo apt-get install -y ca-certificates curl software-properties-common lsb-release
# -------------------------
# 3️⃣ 创建密钥存储目录
# -------------------------
sudo install -m 0755 -d /etc/apt/keyrings
# -------------------------
# 4️⃣ 下载Docker官方GPG密钥
# -------------------------
sudo curl -fsSL https://download.docker.com/linux/$(. /etc/os-release; echo "$ID")/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# -------------------------
# 5️⃣ 添加 Docker 仓库
# -------------------------
if [ "$(lsb_release -is)" = "Ubuntu" ]; then
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
elif [ "$(lsb_release -is)" = "Debian" ]; then
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
fi
sudo apt-get update
echo "Docker 仓库已添加。"
# -------------------------
# 6️⃣ 安装 Docker 及相关组件
# -------------------------
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
echo "Docker 安装完成 ✅"
```
### 对于基于RHEL的系统(如CentOS、RHEL)
```bash
#!/bin/bash
# -------------------------
# 1️⃣ 卸载旧版本 Docker
# -------------------------
sudo yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-ce \
docker-ce-cli \
containerd.io \
docker-compose-plugin
echo "旧版本 Docker 已卸载(如果存在)"
# -------------------------
# 2️⃣ 安装 yum 配置管理工具
# -------------------------
sudo yum install -y yum-utils
# -------------------------
# 3️⃣ 检测系统发行版并添加 Docker 仓库
# -------------------------
if [ -f /etc/centos-release ]; then
# CentOS 系统
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
elif [ -f /etc/redhat-release ]; then
# RHEL 系统
# 注意:RHEL 用户需要启用订阅管理仓库
sudo yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
else
echo "未识别的发行版,脚本退出。"
exit 1
fi
# -------------------------
# 4️⃣ 更新 yum 缓存
# -------------------------
sudo yum makecache fast
echo "Docker 仓库已添加。"
# -------------------------
# 5️⃣ 安装 Docker 及相关组件
# -------------------------
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
echo "Docker 安装完成 ✅"
```
### 通用脚本
```bash
#!/bin/bash
set -e
# -------------------------
# 1️⃣ 卸载旧版本 Docker
# -------------------------
remove_old_docker() {
if command -v apt-get >/dev/null 2>&1; then
sudo apt-get remove -y docker docker-engine docker.io containerd runc docker-ce docker-ce-cli containerd.io docker-compose-plugin || true
elif command -v yum >/dev/null 2>&1; then
sudo yum remove -y docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine \
docker-ce \
docker-ce-cli \
containerd.io \
docker-compose-plugin || true
fi
echo "旧版本 Docker 已卸载(如果存在)"
}
# -------------------------
# 2️⃣ 安装 Docker(DEB 系统)
# -------------------------
install_docker_deb() {
local distro=$1
local codename=$2
sudo apt-get update
sudo apt-get install -y apt-transport-https ca-certificates curl software-properties-common lsb-release
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL "https://download.docker.com/linux/$distro/gpg" -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/$distro $codename stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable --now docker
}
# -------------------------
# 3️⃣ 安装 Docker(RPM 系统)
# -------------------------
install_docker_rpm() {
local distro=$1
if [ "$distro" = "fedora" ]; then
sudo dnf -y install dnf-plugins-core
else
sudo yum install -y yum-utils
fi
sudo yum-config-manager --add-repo "https://download.docker.com/linux/$distro/docker-ce.repo"
sudo yum makecache fast
sudo yum install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo systemctl enable --now docker
}
# -------------------------
# 4️⃣ 主流程
# -------------------------
remove_old_docker
# 检测 Linux 发行版
if [ -f /etc/os-release ]; then
. /etc/os-release
else
echo "无法确定您的 Linux 发行版。"
exit 1
fi
case $ID in
ubuntu|debian|raspbian)
echo "检测到 $ID $VERSION_CODENAME,开始安装 Docker..."
install_docker_deb $ID $VERSION_CODENAME
;;
centos|rhel|fedora|sles)
echo "检测到 $ID,开始安装 Docker..."
install_docker_rpm $ID
;;
*)
echo "不支持的 Linux 发行版:$ID"
exit 1
;;
esac
echo "Docker 及 Docker Compose 安装完成 ✅"
```
### 运行脚本
```bash
# 1.创建脚本
vim docker-script.sh
# 2.输入内容 i 进行编辑模式, :wq 保存
# 3.赋予权限
chmod +x docker-script.sh
# 4.运行脚本
./docker-script.sh
```
## 镜像设置
不设置镜像会导致拉取速度非常慢
访问 https://api.suoyinmulu.com/open/v1/docker-hub/seeded-up/lists 获取最新的docker镜像,将 list 中的内容拷贝到 docker 中的 registry-mirrors 中。
```bash
sudo vim /etc/docker/daemon.json
```
```json
{
"registry-mirrors": [
// list
]
}
```
刷新:
```bash
sudo systemctl daemon-reload && sudo systemctl restart docker
```
## 问题
### 权限不足
1. 添加docker用户组(默认有)
```
sudo groupadd docker
```
2. 添加当前用户到docker组中
```
sudo gpasswd -a $USER docker
```
3. 更新用户组
```
newgrp docker
```
4. 重启生效 或 提前执行(建议重启)
```
sudo chown root:docker /var/run/docker.sock
```