Files
2026-06-08 16:04:03 +08:00

424 lines
11 KiB
Markdown
Raw Permalink 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
## 常用命令速查
:::tip 高频命令
日常排查 Docker 问题时,优先看容器状态、日志、端口映射和磁盘占用。
:::
### 容器
```bash
# 查看正在运行的容器
docker ps
# 查看所有容器,包括已停止的
docker ps -a
# 启动 / 停止 / 重启容器
docker start 容器名或容器ID
docker stop 容器名或容器ID
docker restart 容器名或容器ID
# 删除容器
docker rm 容器名或容器ID
# 强制删除运行中的容器
docker rm -f 容器名或容器ID
```
### 镜像
```bash
# 查看本地镜像
docker images
# 拉取镜像
docker pull 镜像名:版本
# 删除镜像
docker rmi 镜像名或镜像ID
# 构建镜像
docker build -t 镜像名:版本 .
```
### 运行与进入容器
```bash
# 后台运行容器,并映射端口
docker run -d --name 容器名 -p 主机端口:容器端口 镜像名:版本
# 后台运行容器,并挂载目录
docker run -d --name 容器名 -v 主机目录:容器目录 镜像名:版本
# 进入正在运行的容器
docker exec -it 容器名或容器ID bash
# 如果容器内没有 bash,改用 sh
docker exec -it 容器名或容器ID sh
```
### 日志与排查
```bash
# 查看容器日志
docker logs 容器名或容器ID
# 实时查看容器日志
docker logs -f 容器名或容器ID
# 查看容器端口映射
docker port 容器名或容器ID
# 查看容器资源占用
docker stats
# 查看 Docker 磁盘占用
docker system df
```
### Docker Compose
```bash
# 启动 compose 服务
docker compose up -d
# 停止并删除 compose 服务
docker compose down
# 重新构建并启动
docker compose up -d --build
# 查看 compose 服务日志
docker compose logs -f
```
### 清理
:::warning 谨慎执行
清理命令可能删除未使用的容器、镜像、网络和缓存。生产环境执行前先确认影响范围。
:::
```bash
# 删除所有已停止的容器
docker container prune
# 删除未使用的镜像
docker image prune
# 删除未使用的容器、镜像、网络和构建缓存
docker system prune
# 更彻底清理,包括未被容器使用的镜像
docker system prune -a
```
## 脚本安装
### 对于基于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
```