---
theme: channing-cyan
---
容器化早已是后端开发的「基本功」。本文以 Nginx 为例,把 Docker 最常用的几条命令串成一条完整链路:**拉镜像 → 配加速 → 跑容器 → 挂端口 / 挂目录 → 管容器与数据卷**。建议边看边敲。
从仓库下载镜像:
```
docker pull docker.io/library/nginx:latest
```
一条完整镜像地址由三部分组成:
| 片段 | 含义 |
| ----------- | --------------------------------------------------- |
| `docker.io` | 注册表(Registry)地址,即 Docker Hub 官方仓库 |
| `library` | 命名空间,官方镜像的命名空间(`nginx`、`redis` 等都在 `library` 下,可省略) |
| `:latest` | 标签(Tag),指定版本号,不写时默认 `latest` |
- **Docker Hub 站点**:[https://hub.docker.com](https://hub.docker.com/)
- **镜像(加速)站点**:[https://docker.fxxk.dedyn.io](https://docker.fxxk.dedyn.io/)
> `docker.io/library/nginx` 中,只要镜像来自官方仓库,`docker.io/library/` 这一段都可以省略,直接写 `docker pull nginx` 等价。
直连 Docker Hub 往往很慢,配置镜像加速器能显著提升 `pull` 速度。
编辑配置文件(注意文件名是 `daemon.json`,不是目录):
```
sudo vi /etc/docker/daemon.json
```
写入加速器列表(`registry-mirrors` 是**数组**):
```
{
"registry-mirrors": [
"https://docker.m.daocloud.io",
"https://docker.1panel.live",
"https://hub.rat.dev"
]
}
```
重启 Docker 使配置生效,再重新拉取:
```
sudo service docker restart
sudo docker pull nginx
```
```
# 查看本地镜像列表
docker images
# 删除镜像(用仓库名或镜像 ID)
docker rmi <repository/image-id>
```
如果机器上有多种 CPU 架构(如 ARM 的 Mac 跑 x86 镜像),可指定平台拉取:
```
docker pull --platform=amd64 nginx
```
```
# 最基本的运行(前台,Ctrl+C 即停)
docker run nginx
```
常用参数:
| 参数 | 作用 |
| ---- | -------------------------- |
| `-d` | 后台运行容器(detached 模式) |
| `-p` | 端口映射,格式 `宿主机端口:容器端口` |
| `-v` | 绑定目录 / 数据卷,格式 `宿主机目录:容器目录` |
端口映射示例(把容器内 80 端口映射到宿主机 80):
```
docker run -p 80:80 nginx
```
把宿主机的静态页面目录挂载进 Nginx,实现「改文件即生效」:
```
sudo docker run -d -p 80:80 -v /website/html:/usr/share/nginx/html nginx
```
```
# 查看正在运行的容器
docker ps
# 查看所有容器(含已停止)
docker ps -a
# 删除容器
docker rm <container-id>
# 强制删除正在运行的容器
docker rm -f <container-id>
```
用数据卷可以解耦「容器」与「数据」,容器删了数据还在。
```
# 查看挂载卷的详细信息
sudo docker volume inspect nginx_html
# 列出所有数据卷
sudo docker volume list
# 删除指定数据卷
docker volume rm nginx_html
# 清理所有没有被容器使用的数据卷
sudo docker volume prune -a
```
一条主线记住即可:
1. **配加速**:改 `daemon.json`(数组)→ 重启 Docker;
1. **拉镜像**:`docker pull`(官方镜像可省 `docker.io/library/`);
1. **跑容器**:`docker run -d -p 宿主端口:容器端口 -v 宿主目录:容器目录 镜像`;
1. **管容器**:`docker ps` 看、`docker rm [-f]` 删;
1. **管数据卷**:`volume list / inspect / rm / prune`。
把这几组命令用熟,日常开发里 80% 的 Docker 操作就够用了。后面可以接着玩 `docker commit`、`Dockerfile`、`docker-compose`,逐步进阶。