Docker 命令总是记了忘忘了查,干脆整理一份备忘。

安装

Arch Linux 上直接用 pacman:

sudo pacman -S docker docker-compose
sudo systemctl enable --now docker

# 把当前用户加入 docker 组,避免每次都 sudo
sudo usermod -aG docker $USER
# 需要重新登录才生效

镜像操作

# 搜索镜像
docker search nginx

# 拉取镜像
docker pull nginx
docker pull nginx:1.25   # 指定版本

# 查看本地镜像
docker images

# 删除镜像
docker rmi nginx
docker rmi $(docker images -q)   # 删除所有镜像

容器操作

# 运行容器
docker run nginx                        # 前台运行
docker run -d nginx                     # 后台运行
docker run -d -p 8080:80 nginx          # 映射端口
docker run -d -p 8080:80 --name web nginx  # 命名容器

# 进入容器
docker exec -it web bash
docker exec -it web sh    # 如果没有 bash

# 查看容器
docker ps                 # 运行中的容器
docker ps -a              # 所有容器(含已停止)

# 停止 / 启动 / 删除
docker stop web
docker start web
docker rm web
docker rm -f web          # 强制删除(运行中也能删)

# 查看日志
docker logs web
docker logs web -f        # 实时跟踪
docker logs web --tail 50 # 最后 50 行

数据卷

容器删了数据就没了,用 volume 持久化:

# 挂载目录(bind mount)
docker run -d -v /host/path:/container/path nginx

# 创建命名卷
docker volume create mydata
docker run -d -v mydata:/var/lib/mysql mysql

# 查看卷
docker volume ls
docker volume inspect mydata

Docker Compose

多个容器配合用 Compose 管理更方便。docker-compose.yml 示例:

services:
  web:
    image: nginx:alpine
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - app

  app:
    build: .
    environment:
      - DB_HOST=db
    depends_on:
      - db

  db:
    image: postgres:16
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - pgdata:/var/lib/postgresql/data

volumes:
  pgdata:

常用命令:

docker compose up -d       # 后台启动所有服务
docker compose down        # 停止并删除容器
docker compose logs -f     # 查看所有服务日志
docker compose ps          # 查看服务状态
docker compose restart web # 重启某个服务

清理空间

用久了镜像和容器会占不少空间:

# 删除所有停止的容器
docker container prune

# 删除未使用的镜像
docker image prune

# 一键清理所有无用资源
docker system prune -a

compose 文件建议用 git 管理起来,换机器直接 clone 然后 docker compose up -d 就能跑。