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 就能跑。