DOCKER_CHEATSHEET

Docker 常用命令参考

镜像管理

bash 复制代码
# 查看所有镜像
docker images

# 搜索镜像
docker search <名称>

# 拉取镜像
docker pull <镜像名>:<标签>

# 删除镜像
docker rmi <镜像ID或名>

# 删除所有未被容器使用的镜像
docker image prune

# 查看镜像历史
docker history <镜像名>

# 将镜像保存为 tar 文件
docker save -o <文件名.tar> <镜像名>

# 从 tar 文件加载镜像
docker load -i <文件名.tar>

# 给镜像打标签
docker tag <源镜像> <新镜像名>:<标签>

镜像标签示例

bash 复制代码
docker pull nginx:latest
docker pull mysql:8.0
docker pull openjdk:17-jdk-slim
docker save -o nginx.tar nginx:latest
docker load -i nginx.tar

容器生命周期

bash 复制代码
# 创建并启动容器
docker run <选项> <镜像名> <命令>

# 启动已停止的容器
docker start <容器ID或名>

# 停止容器
docker stop <容器ID或名>

# 重启容器
docker restart <容器ID或名>

# 强制停止
docker kill <容器ID或名>

# 删除容器
docker rm <容器ID或名>

# 强制删除运行中的容器
docker rm -f <容器ID或名>

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

docker run 常用选项

选项 作用
-d 后台运行(detach)
-it 交互式终端
--name <名> 指定容器名
-p 主机端口:容器端口 端口映射
-v 宿主机路径:容器路径 挂载卷
-e KEY=VALUE 环境变量
--restart always 自动重启
--network <网络名> 指定网络
--rm 容器停止后自动删除

docker run 示例

bash 复制代码
# 后台运行 nginx,映射端口
docker run -d --name my-nginx -p 8080:80 nginx:latest

# 运行 MySQL,设置密码和挂载数据
docker run -d --name mysql8 \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=root123 \
  -v /data/mysql:/var/lib/mysql \
  mysql:8.0

# 交互式运行并进入容器
docker run -it --name ubuntu-test ubuntu:22.04 bash

# 容器停止后自动删除(适合测试)
docker run --rm -it alpine sh

容器管理

bash 复制代码
# 查看运行中的容器
docker ps

# 查看所有容器(包括已停止的)
docker ps -a

# 查看容器日志
docker logs <容器ID或名>

# 实时跟踪日志
docker logs -f <容器ID或名>

# 查看最近 N 条日志
docker logs --tail 100 <容器ID或名>

# 进入容器内部
docker exec -it <容器ID或名> bash
# 如果容器没有 bash 用 sh
docker exec -it <容器ID或名> sh

# 在容器内执行命令
docker exec <容器ID或名> <命令>

# 查看容器详情(JSON)
docker inspect <容器ID或名>

# 查看容器资源使用
docker stats

# 查看容器进程
docker top <容器ID或名>

# 从容器复制文件到宿主机
docker cp <容器ID>:<容器内路径> <宿主机路径>

# 从宿主机复制文件到容器
docker cp <宿主机路径> <容器ID>:<容器内路径>

# 重命名容器
docker rename <旧名> <新名>

Dockerfile 构建

dockerfile 复制代码
# 基础镜像
FROM openjdk:17-jdk-slim

# 维护者
LABEL author="your-name"

# 设置工作目录
WORKDIR /app

# 复制文件到镜像
COPY target/app.jar app.jar

# 挂载卷声明
VOLUME /tmp

# 暴露端口
EXPOSE 8080

# 启动命令
ENTRYPOINT ["java", "-jar", "app.jar"]
bash 复制代码
# 构建镜像
docker build -t <镜像名>:<标签> <Dockerfile目录>

# 指定 Dockerfile 构建
docker build -f <Dockerfile路径> -t <镜像名>:<标签> .

# 构建时不使用缓存
docker build --no-cache -t <镜像名>:<标签> .

# 多阶段构建示例(用 alpine 缩小体积)
docker build --target <阶段名> -t <镜像名>:<标签> .

构建示例

bash 复制代码
docker build -t my-app:1.0.0 .
docker build -f Dockerfile.prod -t my-app:prod .

网络管理

bash 复制代码
# 查看网络列表
docker network ls

# 创建网络
docker network create <网络名>

# 创建指定驱动的网络
docker network create --driver bridge <网络名>

# 查看网络详情
docker inspect <网络名>

# 将容器连接到网络
docker network connect <网络名> <容器ID>

# 断开容器网络
docker network disconnect <网络名> <容器ID>

# 删除网络
docker network rm <网络名>

# 删除所有未使用的网络
docker network prune

网络模式

模式 说明
bridge 默认,容器间通过网桥通信
host 容器直接使用宿主机网络
none 无网络
overlay 跨宿主机通信(Swarm)

网络示例

bash 复制代码
# 创建自定义网络,容器间通过容器名通信
docker network create my-network
docker run -d --name mysql --network my-network mysql:8.0
docker run -d --name app --network my-network my-app:latest
# app 容器里可以直接用 hostname "mysql" 访问数据库

数据卷管理

bash 复制代码
# 创建数据卷
docker volume create <卷名>

# 查看所有数据卷
docker volume ls

# 查看数据卷详情
docker volume inspect <卷名>

# 删除数据卷
docker volume rm <卷名>

# 删除所有未使用的数据卷
docker volume prune

# 使用 bind mount(挂载宿主机目录)
docker run -v /宿主机/路径:/容器/路径 <镜像>

# 使用数据卷
docker run -v <卷名>:/容器/路径 <镜像>

# 只读挂载
docker run -v /宿主机/路径:/容器/路径:ro <镜像>

数据卷示例

bash 复制代码
docker volume create mydata
docker run -d --name mysql \
  -v mydata:/var/lib/mysql \
  mysql:8.0

Docker Compose

yaml 复制代码
# docker-compose.yml 示例
version: '3.8'

services:
  mysql:
    image: mysql:8.0
    container_name: mysql
    restart: always
    ports:
      - "3306:3306"
    environment:
      MYSQL_ROOT_PASSWORD: root123
    volumes:
      - mysql-data:/var/lib/mysql

  app:
    build: .
    container_name: my-app
    restart: always
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/db
    depends_on:
      - mysql

volumes:
  mysql-data:
bash 复制代码
# 启动所有服务(后台)
docker-compose up -d

# 启动指定服务
docker-compose up -d mysql

# 查看服务状态
docker-compose ps

# 查看日志
docker-compose logs -f

# 停止服务
docker-compose stop

# 停止并删除容器
docker-compose down

# 停止并删除容器、网络、数据卷
docker-compose down -v

# 重新构建后启动
docker-compose up -d --build

# 查看配置
docker-compose config

# 重启服务
docker-compose restart

清理维护

bash 复制代码
# 查看磁盘使用
docker system df

# 清理所有未使用的资源(容器、网络、镜像、构建缓存)
docker system prune

# 包括数据卷一起清理
docker system prune -a --volumes

# 清理所有停止的容器
docker container prune

# 清理所有未使用的镜像
docker image prune

# 清理所有未使用的镜像(包括没有标签的)
docker image prune -a

# 清理所有未使用的数据卷
docker volume prune

# 清理构建缓存
docker builder prune

日志与调试

bash 复制代码
# 查看 Docker 系统事件
docker events

# 查看 Docker 系统信息
docker info

# 查看容器日志(带时间戳)
docker logs -t <容器ID>

# 查看容器改动文件
docker diff <容器ID>

# 导出容器文件系统
docker export <容器ID> -o <文件名.tar>

# 从快照导入镜像
docker import <文件名.tar> <镜像名>:<标签>

常用组合技巧

bash 复制代码
# 删除所有容器(包括运行中的)
docker rm -f $(docker ps -aq)

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

# 停止所有容器
docker stop $(docker ps -q)

# 批量删除名称包含关键字的容器
docker rm -f $(docker ps -a | grep <关键字> | awk '{print $1}')

容器内常用技巧

bash 复制代码
# 进入容器后查看 Alpine 包
apk add <包名>

# 进入容器后查看 Ubuntu/Debian 包
apt-get update && apt-get install -y <包名>

# 容器内查看网络
ip addr  # 或 ifconfig

# 容器内测试网络连通
ping <目标地址>
telnet <目标地址> <端口>
curl <URL>

# 容器内查看进程
ps aux

常见问题排查

bash 复制代码
# 容器启动后立即退出
docker logs <容器ID>  # 查看错误日志

# 端口被占用
netstat -ano | findstr :<端口号>  # Windows
lsof -i :<端口号>  # Linux

# 磁盘空间不足
docker system df
docker system prune -a

# 容器无法删除
docker rm -f <容器ID>  # 强制删除

# 查看容器启动命令
docker inspect <容器ID> | grep Cmd
相关推荐
xixingzhe21 小时前
SSH隧道连接服务器、数据库
运维·ssh
颜淡慕潇1 小时前
低成本搭建鸿蒙PC运行环境:基于 Docker 的 x86_64 服务器
服务器·docker·harmonyos
SilentSamsara1 小时前
Python 与 Docker:多阶段构建、最小镜像与健康检查
运维·开发语言·python·docker·中间件·容器
左心房的默白,,,2 小时前
17:FDC数据采集与数据分析基础(EAP进阶)
运维·数据分析·自动化
小猿姐2 小时前
三种 MongoDB Operator 实测对比:Community、Percona 与 KubeBlocks,谁更适合团队落地?
运维·mongodb·kubernetes
情绪总是阴雨天~2 小时前
Dockerfile 完全指南:从指令详解到实战构建
docker
V搜xhliang02462 小时前
告别SPSS卡顿:用AI智能体自动跑回归、生存曲线、生成方法学段落
运维·人工智能·数据挖掘·回归·机器人·自动化·飞书
财经三剑客2 小时前
蔚来公司5月交付37,705台,同比增长62.3%
运维
IT策士2 小时前
第 38 篇 k8s之RBAC 与 ServiceAccount 实战
云原生·容器·kubernetes