1 概念
Docker 是一个开源的容器化平台,它允许开发者将应用程序及其依赖打包到一个轻量级、可移植的容器中,然后可以在几乎任何环境中运行,而无需担心环境差异带来的问题。
1. 容器(Container)
容器是 Docker 的核心。它是一个轻量级、独立、可执行的软件包,包含:
- 应用程序代码
- 运行时环境(如 Python、Java、Node.js 等)
- 系统工具和库
- 配置文件
- 容器与虚拟机不同,它不包含完整的操作系统,而是共享宿主机的内核,因此更加轻便、启动更快、资源占用更少。
2. 镜像(Image)
镜像是容器的只读模板,用来创建容器。
比如,你可以有一个 "Ubuntu + Python + Flask" 的镜像,每次基于这个镜像启动的容器都会有一致的运行环境。
镜像是分层存储的,可以继承和复用,提高构建效率。
3. Dockerfile
用于定义如何构建 Docker 镜像的文本文件,包含一系列指令,比如:
FROM python:3.9
WORKDIR /app
COPY . /app
RUN pip install -r requirements.txt
CMD ["python", "app.py"]
通过 docker build命令可以根据 Dockerfile 构建出镜像。
4. Docker 引擎(Docker Engine)
Docker 的核心后台服务,负责管理镜像、容器、网络和存储等。
包括:Docker Daemon(服务端)、Docker Client(命令行工具)、REST API。
5. Docker Hub
官方的镜像仓库,类似于 GitHub,但存放的是 Docker 镜像。
你可以从 Docker Hub 上拉取(pull)公共镜像,比如 nginx、mysql、ubuntu,也可以将自己的镜像推送(push)上去。
2 安装docker
1. 卸载旧版本(如果有)
sudo apt-get remove docker docker-engine docker.io containerd runc
这一步是为了避免旧版本冲突,如果之前没装过,可以跳过。
2. 安装必要的依赖包
这些包允许 apt 通过 HTTPS 使用仓库:
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
3. 添加 Docker 的官方 GPG 密钥
sudo mkdir -p /etc/apt/keyrings
curl -fsSL download.docker.com/linux/ubunt... | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
4. 设置 Docker 的稳定版仓库
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] download.docker.com/linux/ubunt... \
$(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
对于 jammy,$(lsb_release -cs)会自动返回 jammy。
5. 更新 apt 包索引
sudo apt-get update
6. 安装 Docker 引擎
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
这里安装了:
- docker-ce:Docker 社区版引擎
- docker-ce-cli:Docker 命令行客户端
- containerd.io:容器运行时
- docker-buildx-plugin:构建工具插件
- docker-compose-plugin:Docker Compose(作为插件形式)
7. 验证 Docker 是否安装成功
运行一个测试容器:
sudo docker run hello-world
如果看到类似如下信息,说明 Docker 已经成功安装并运行:
Hello from Docker!
This message shows that your installation appears to be working correctly.
...
3 基本设置
3.1 开机启动
sudo systemctl enable docker
3.2 加入用户组
默认情况下,使用 Docker 命令需要 sudo。如果你不想每次都输入 sudo,可以把你的用户加入 docker用户组:
⚠️ 注意:docker组拥有类似 root 的权限,请谨慎操作。
sudo usermod -aG docker $USER
4 国内镜像加速
4.1 配置 daemon.json
编辑 Docker 配置文件(没有就新建):
sudo mkdir -p /etc/docker
sudo nano /etc/docker/daemon.json
写入以下内容(推荐几个国内可用镜像源):
{
"registry-mirrors": [
"docker.mirrors.huaweicloud.com",
]
}
4.2 重启 Docker 服务
sudo systemctl daemon-reexec
sudo systemctl restart docker
4.3 验证是否生效
docker info
正常情况应该能看到类似:

4.4 拉取镜像报错
docker pull nginx

原因:虽然 docker info 已经能看到 Registry Mirrors,但 docker pull nginx 还是直连 registry-1.docker.io,这说明 Docker 版本 20+ 之后 registry mirror 的机制发生了变化。
从 Docker 20.10 开始,官方的解释是:
- registry-mirrors 只会对 docker.io 的流量做镜像加速
- 但需要通过 mirror 实现代理功能(如 Docker Hub 代理),而不是直接换源
- 部分国内镜像站已经不再提供 完整 Docker Hub 代理,所以即使配置了,也可能 fallback 回 registry-1.docker.io
4.5 优化方案
方法一:使用真正的「Docker Hub 代理」
比如:
Docker Proxy(官方推荐社区维护的代理)
- daocloud:docker.m.daocloud.io
尝试更新 /etc/docker/daemon.json:
{
"registry-mirrors": [
]
}
然后重启:
sudo systemctl daemon-reexec
sudo systemctl restart docker
方法二:直接拉取「代理仓库」中的镜像
比如腾讯云的 nginx:
docker pull mirror.ccs.tencentyun.com/library/nginx:latest
这相当于手动指定代理,而不是依赖 Docker daemon 自动切换。
方法三:自己搭建 Docker Hub Mirror(进阶)
如果你有一台国外服务器,可以用 registry mirror 搭建一个本地代理,再把它填到 daemon.json,这样 100% 可控。
4. 6 最终结果

终于做到了~