Docker 是初级运维绕不开的工具。搞懂下面四个概念,其余都是查命令。
一、四个核心概念
| 概念 | 类比 | 说明 |
|---|---|---|
| 镜像 Image | 程序安装包/模板 | 只读,包含运行环境+代码 |
| 容器 Container | 跑起来的进程 | 镜像的运行实例,隔离的 |
| 卷 Volume | 外接硬盘 | 持久化数据,容器删了数据还在 |
| 网络 Network | 局域网 | 容器之间、容器与宿主机通信 |
一句话:用镜像 run 出容器,数据放卷里,容器间用网络通信。
二、常用命令
docker pull nginx:alpine # 拉镜像
docker images # 看镜像
docker ps # 运行中的容器
docker ps -a # 所有容器(含已停止)
# 运行一个 nginx
docker run -d --name web \
-p 80:80 \
-v /home/ubuntu/site:/usr/share/nginx/html:ro \
--restart unless-stopped \
nginx:alpine
docker logs -f web # 看日志
docker exec -it web sh # 进容器
docker stop/start/restart web
docker rm web # 删容器
docker rmi nginx:alpine # 删镜像
参数速记:
-d:后台运行-p 宿主机:容器:端口映射-v 宿主机:容器:挂载目录(:ro只读)--name:命名--restart unless-stopped:开机自启(除非手动停)
三、Dockerfile:把应用打包成镜像
Dockerfile:
FROM nginx:alpine
COPY ./dist /usr/share/nginx/html
EXPOSE 80
构建:
docker build -t my-web:1.0 .
docker run -d -p 8080:80 my-web:1.0
常用指令:FROM(基础镜像)、COPY(复制文件)、RUN(构建时执行命令)、CMD(容器启动命令)、EXPOSE(声明端口)。
四、Compose:一次管多个容器
docker-compose.yml:
services:
web:
image: nginx:alpine
restart: unless-stopped
ports:
- "80:80"
volumes:
- ./public:/usr/share/nginx/html:ro
db:
image: mysql:8
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: "rootpass"
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
docker compose up -d # 启动
docker compose ps # 看状态
docker compose logs -f web
docker compose down # 停止并删除(数据卷默认保留)
docker compose restart
五、一个完整部署(以本站为例)
Hugo 构建 + Nginx 服务,全容器化:
# 1. 构建静态站点
docker run --rm -v "$PWD/site":/src -w /src hugomods/hugo:latest hugo --minify
# 2. 用 Compose 起 Nginx 对外服务
cd deploy && docker compose up -d
小结
| 想做什么 | 用什么 |
|---|---|
| 跑一个服务 | docker run -d -p -v --restart |
| 打包自己的应用 | Dockerfile + docker build |
| 跑多个关联服务 | docker-compose.yml + docker compose up -d |
| 看问题 | docker logs + docker exec -it |
先记住 run、ps、logs、exec、compose up/down 这五个高频动作,Docker 就能上手干活了。