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

先记住 runpslogsexeccompose up/down 这五个高频动作,Docker 就能上手干活了。