Docker
约 1589 字大约 5 分钟
2025-03-18
前置知识
- Linux命令
使用别人写好的软件/工具最大的障碍是什么——必然是配环境。配环境带来的折磨会极大地消解你对软件、编程本身的兴趣。虚拟机可以解决配环境的一部分问题,但它庞大笨重,且为了某个应用的环境配置好像也不值得模拟一个全新的操作系统。
Docker 的出现让环境配置变得(或许)不再折磨。简单来说 Docker 使用轻量级的“容器”(container)而不是整个操作系统去支持一个应用的配置。应用自身连同它的环境配置被打包为一个个 image 可以自由运行在不同平台的一个个 container 中,这极大地节省了所有人的时间成本。
如何学习docker
Docker 官方文档当然是最好的初学教材,但最好的导师一定是你自己——尝试去使用 Docker 才能享受它带来的便利。Docker 在工业界发展迅猛并已经非常成熟,你可以下载它的桌面端并使用图形界面。
当然,如果你像我一样,是一个疯狂的造轮子爱好者,那不妨自己亲手写一个迷你 Docker 来加深理解。
KodeKloud Docker for the Absolute Beginner 全面的介绍了 Docker 的基础功能,并且有大量的配套练习,同时提供免费的云环境来完成练习。其余的云相关的课程如 Kubernetes 需要付费,但个人强烈推荐:讲解非常仔细,适合从 0 开始的新手;有配套的 Kubernetes 的实验环境,不用被搭建环境劝退。
安装Docker CE
docker拉取失败解决方案
配置daemon.json文件:参考 magic 配置docker代理
自动安装
Docker 提供了一个自动配置与安装的脚本,支持 Debian、RHEL、SUSE 系列及衍生系统的安装。请注意,Docker 官方不建议在生产环境使用此脚本安装 Docker CE。
以下内容假定
您为 root 用户,或有 sudo 权限,或知道 root 密码; 您系统上有 curl 或 wget
export DOWNLOAD_URL="https://mirrors.cernet.edu.cn/docker-ce"
# 如您使用 curl
curl -fsSL https://raw.githubusercontent.com/docker/docker-install/master/install.sh | sudo -E sh
# 如您使用 wget
wget -O- https://raw.githubusercontent.com/docker/docker-install/master/install.sh | sudo -E sh
Debian/Ubuntu/Raspbian
Debian Ubuntu Raspberry Pi OS
以下内容根据 官方文档 修改而来。
如果你过去安装过 docker,先删掉:
for pkg in docker.io docker-doc docker-compose podman-docker containerd runc; do sudo apt-get remove $pkg; done
安装依赖
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
信任 Docker 的 GPG 公钥并添加仓库:
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.cernet.edu.cn/docker-ce/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.cernet.edu.cn/docker-ce/linux/ubuntu \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/raspbian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://mirrors.cernet.edu.cn/docker-ce/linux/raspbian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
Fedora
Fedora
以下内容根据 官方文档 修改而来。
如果你之前安装过 docker,请先删掉
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
安装依赖,下载 repo 文件,并把软件仓库地址替换为镜像站:
sudo dnf -y install dnf-plugins-core
sudo dnf-3 config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
sudo sed -i 's+https://download.docker.com+https://mirrors.cernet.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
最后安装:
sudo dnf install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
CentOS/RHEL
以下内容根据 官方文档 修改而来。
CentOS RockyLinux AlmaLinux
如果你之前安装过 docker,请先删掉
sudo dnf remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
安装依赖,下载 repo 文件,并把软件仓库地址替换为CERNET联合镜像站:
sudo yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo sed -i 's+https://download.docker.com+https://mirrors.cernet.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
sudo yum install -y yum-utils
yum-config-manager --add-repo https://download.docker.com/linux/rhel/docker-ce.repo
sudo sed -i 's+https://download.docker.com+https://mirrors.cernet.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo
最后安装:
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
OpenMediaVault
OpenMediaVault
Open Media Vault 是一款基于 Debian 的 NAS 操作系统。
omv-env set OMV_DOCKER_APT_REPOSITORY_URL "https://mirrors.cernet.edu.cn/docker-ce/linux/debian"
迁移Docker数据
备份原数据
首先,停止 Docker 服务,以确保在修改配置时不会发生数据损坏。
sudo systemctl stop docker
假设迁移到
/opt/docker-images
中,则需要先备份,创建文件夹并给予权限
sudo mkdir -p /opt/docker-images
sudo chmod -R 755 /opt/docker-images
使用rsync协议同步复制原docker数据卷
sudo rsync -aP /var/lib/docker/ /opt/docker-images/
删除旧数据(可选)
sudo rm -rf /var/lib/docker
配置daemon.json
在 Linux 系统上,Docker 的配置文件通常位于 /etc/docker/daemon.json
。如果该文件不存在,可以手动创建。
sudo nano /etc/docker/daemon.json
{
"data-root": "/opt/docker-images",
"registry-mirrors": [
"https://docker.1panel.live",
"https://image.cloudlayer.icu",
"https://dockerpull.cn"
]
}
Ctrl + X 保存
重启docker
sudo systemctl start docker
验证配置
docker info | grep "Docker Root Dir"
输出结果应该为 Docker Root Dir: /opt/docker-images
容器网络
Docker 的网络功能非常强大,支持多种网络模式。以下是 Docker 支持的几种网络模式:
- bridge:默认网络模式,Docker 会为每个容器分配一个虚拟网卡,并将其连接到一个虚拟交换机上。容器之间可以通过 IP 地址进行通信。
- host:容器与宿主机共享网络栈,容器中的应用可以直接使用宿主机的网络接口。
- overlay:用于跨主机的容器网络,适用于 Docker Swarm 集群。
- macvlan:允许容器拥有自己的 MAC 地址,可以直接与物理网络进行通信。
- none:容器没有网络连接。
- container:容器与另一个容器共享网络栈。
- ipvlan:类似于 macvlan,但使用不同的网络模型。
贡献者
更新日志
febfb
-docs(begin.md): update interaction instructions for comments section于