涵盖Docker核心概念、常用命令及实战技巧,助你成为容器化技术高手!

📖 目录

一、Docker核心概念

1.1 Docker架构

Docker采用客户端-服务器架构:

  • Docker客户端:用户通过命令行工具或API与Docker交互
  • Docker守护进程:管理容器、镜像、网络等核心对象
  • Docker镜像:只读模板,用于创建容器
  • Docker容器:镜像的运行实例
  • Docker仓库:存放镜像的仓库(Docker Hub、私有仓库)

1.2 Docker三大核心

  • 镜像(Image):容器的蓝图,分层存储结构
  • 容器(Container):镜像的运行实例
  • 仓库(Registry):镜像的集中存储和分发服务

二、镜像管理命令

2.1 镜像搜索与下载

# 搜索Docker Hub上的镜像
docker search nginx

# 拉取镜像(不指定标签默认为latest)
docker pull nginx
docker pull nginx:1.21-alpine

# 从私有仓库拉取镜像
docker pull registry.example.com/myapp:v1.0

2.2 镜像查看与管理

# 列出本地镜像
docker images
docker image ls

# 显示镜像详细信息
docker image inspect nginx:latest

# 查看镜像历史记录
docker history nginx

# 删除镜像
docker rmi nginx:latest
docker image rm nginx

# 强制删除(即使有容器在使用)
docker rmi -f nginx

# 清理悬空镜像(无标签)
docker image prune
docker image prune -a  # 删除所有未使用的镜像

# 给镜像打标签
docker tag nginx:latest mynginx:v1.0

2.3 镜像构建

# 构建镜像(当前目录下必须有Dockerfile)
docker build -t myapp:latest .

# 指定Dockerfile路径
docker build -f /path/to/Dockerfile -t myapp:v1 .

# 构建时不使用缓存
docker build --no-cache -t myapp:latest .

# 多阶段构建示例
docker build --target builder -t myapp:builder .

三、容器操作命令

3.1 容器生命周期管理

# 创建并启动容器(最常用)
docker run -d --name mynginx -p 8080:80 nginx:latest

# 常用参数说明:
# -d: 后台运行
# --name: 指定容器名称
# -p: 端口映射(主机端口:容器端口)
# -v: 挂载数据卷
# -e: 设置环境变量
# --network: 指定网络

# 启动已停止的容器
docker start mynginx

# 停止容器
docker stop mynginx
docker stop container_id

# 重启容器
docker restart mynginx

# 暂停容器
docker pause mynginx

# 恢复暂停的容器
docker unpause mynginx

# 删除容器
docker rm mynginx
docker rm -f mynginx  # 强制删除运行中的容器

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

3.2 容器交互与执行

# 进入容器(退出时容器停止)
docker attach container_id

# 在容器内执行命令(推荐方式)
docker exec -it mynginx /bin/bash
docker exec -it mynginx sh

# 执行单条命令
docker exec mynginx ls -la
docker exec -u root mynginx whoami

# 复制文件
docker cp local_file.txt mynginx:/tmp/
docker cp mynginx:/etc/nginx/nginx.conf ./nginx.conf.backup

3.3 容器监控与日志

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

# 查看容器详细信息
docker inspect mynginx

# 查看容器日志
docker logs mynginx
docker logs -f mynginx  # 实时跟踪日志
docker logs --tail 100 mynginx  # 查看最后100行
docker logs --since 10m mynginx  # 查看10分钟内的日志

# 查看容器资源使用情况
docker stats
docker stats --all  # 显示所有容器
docker stats --no-stream  # 只显示一次

# 查看容器内进程
docker top mynginx

四、网络管理命令

4.1 网络基本操作

# 列出网络
docker network ls

# 创建网络
docker network create mynetwork
docker network create --driver bridge --subnet 172.20.0.0/16 mybridge

# 查看网络详情
docker network inspect mynetwork

# 连接容器到网络
docker network connect mynetwork mynginx

# 从网络断开容器
docker network disconnect mynetwork mynginx

# 删除网络
docker network rm mynetwork
docker network prune  # 删除未使用的网络

4.2 网络类型与使用

# 创建不同驱动类型的网络
docker network create --driver bridge bridge_network
docker network create --driver overlay overlay_network
docker network create --driver macvlan macvlan_network

# 运行容器时指定网络
docker run -d --name web --network mynetwork nginx

# 运行容器时指定IP
docker run -d --name app --network mynetwork --ip 172.20.0.10 myapp

五、数据卷管理

5.1 数据卷操作

# 创建数据卷
docker volume create myvolume

# 列出数据卷
docker volume ls

# 查看数据卷详情
docker volume inspect myvolume

# 删除数据卷
docker volume rm myvolume
docker volume prune  # 删除未使用的数据卷

# 使用数据卷
docker run -d --name mysql \
  -v myvolume:/var/lib/mysql \
  -e MYSQL_ROOT_PASSWORD=secret \
  mysql:latest

5.2 绑定挂载

# 绑定挂载主机目录
docker run -d --name nginx \
  -v /host/path:/container/path \
  -v /host/config:/etc/nginx/conf.d \
  nginx:latest

# 只读挂载
docker run -d --name nginx \
  -v /host/config:/etc/nginx/conf.d:ro \
  nginx:latest

六、Docker Compose

6.1 Compose基本命令

# 启动服务
docker-compose up
docker-compose up -d  # 后台运行

# 停止服务
docker-compose down
docker-compose down -v  # 同时删除数据卷

# 查看服务状态
docker-compose ps

# 查看服务日志
docker-compose logs
docker-compose logs -f service_name

# 构建服务镜像
docker-compose build

# 执行命令
docker-compose exec service_name command

# 扩展服务实例
docker-compose up --scale web=3

6.2 Compose文件示例

version: '3.8'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - app-network
    depends_on:
      - db
  
  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: appdb
    volumes:
      - db-data:/var/lib/mysql
    networks:
      - app-network

volumes:
  db-data:

networks:
  app-network:
    driver: bridge

七、实用技巧与最佳实践

7.1 批量操作技巧

# 停止所有运行中的容器
docker stop $(docker ps -q)

# 删除所有停止的容器
docker rm $(docker ps -aq)

# 删除所有悬空镜像
docker rmi $(docker images -f "dangling=true" -q)

# 清理所有未使用的资源
docker system prune -a --volumes

# 批量打标签
for image in $(docker images --format "{{.Repository}}:{{.Tag}}"); do
  docker tag $image registry.example.com/$image
done

7.2 性能优化命令

# 查看Docker磁盘使用情况
docker system df

# 查看详细磁盘使用情况
docker system df -v

# 导出容器为镜像
docker export container_id > container.tar

# 导入镜像
docker import container.tar myimage:latest

# 保存镜像到文件
docker save -o nginx.tar nginx:latest

# 从文件加载镜像
docker load -i nginx.tar

7.3 安全最佳实践

# 使用非root用户运行容器
docker run -u 1000:1000 myapp

# 限制容器资源
docker run -d \
  --name limited \
  --memory="512m" \
  --cpus="1.5" \
  nginx:latest

# 设置容器重启策略
docker run -d \
  --name resilient \
  --restart=always \
  nginx:latest

# 只读根文件系统
docker run -d \
  --name secure \
  --read-only \
  -v /tmp:/tmp \
  nginx:latest

八、命令速查表

8.1 常用命令组合

场景命令
开发调试docker run -it --rm -v $(pwd):/app -p 3000:3000 node:14
数据库部署docker run -d --name mysql -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass mysql:8
Web服务docker run -d --name nginx -p 80:80 -v ./nginx.conf:/etc/nginx/nginx.conf nginx
日志分析docker logs --tail 50 -f container_name
容器调试docker exec -it container_name /bin/sh

8.2 故障排查命令

# 检查Docker服务状态
systemctl status docker

# 查看Docker版本信息
docker version
docker info

# 查看事件日志
docker events

# 检查容器健康状态
docker inspect --format='{{json .State.Health}}' container_name

# 性能诊断
docker stats --format "table {{.Name}}\t{{.CPUPerc}}\t{{.MemUsage}}"

💎 总结

掌握Docker命令是容器化技术的基础。本文涵盖了从基础到进阶的完整命令集,建议:

  1. 日常使用:熟练掌握镜像、容器、网络的基本操作
  2. 生产环境:关注资源限制、日志管理、网络配置
  3. 持续学习:关注Docker新版本特性,实践最佳安全实践

希望这份全面的Docker命令指南能帮助你在开发和运维工作中更加得心应手!


📌 标签:Docker、容器技术、DevOps、云原生、命令大全、运维开发

✨ 小贴士:使用 docker --helpdocker command --help 查看任何命令的详细帮助信息。随着Docker版本更新,建议定期查看官方文档获取最新特性信息!

更多推荐