镜像管理
镜像操作流程图
常用命令详解
# ============ 搜索镜像 ============
# 在 Docker Hub 搜索镜像
docker search nginx
docker search python --filter=stars=100# 只显示星数超过100的
# ============ 拉取镜像 ============
# 拉取最新版镜像
docker pull nginx
# 拉取指定版本
docker pull nginx:1.24
docker pull nginx:alpine
docker pull nginx@sha256:abc123...# 拉取特定摘要的镜像
# ============ 查看镜像 ============
# 列出本地所有镜像
docker images
docker image ls
# 查看镜像详细信息
docker inspect nginx:latest
# 查看镜像历史(分层信息)
docker history nginx:latest
# ============ 删除镜像 ============
# 删除单个镜像
docker rmi nginx:latest
# 强制删除(即使有容器在使用)
docker rmi -f nginx:latest
# 删除所有悬虚镜像(dangling images)
docker image prune
# 删除所有未使用的镜像
docker image prune -a
# ============ 构建镜像 ============
# 从 Dockerfile 构建镜像
docker build -t myapp:v1.0 .
# 使用 Dockerfile 并指定构建参数
docker build \
--build-arg VERSION=1.0 \
--build-arg ENV=production \
-t myapp:v1.0 .
# ============ 标记和推送镜像 ============
# 为镜像打标签
docker tag myapp:v1.0 username/myapp:v1.0
docker tag myapp:v1.0 registry.example.com/myapp:v1.0
# 推送到 Docker Hub
docker push username/myapp:v1.0
# 推送到私有仓库
docker push registry.example.com/myapp:v1.0
# ============ 导出和导入镜像 ============
# 导出镜像到 tar 文件
docker save -o nginx.tar nginx:latest
docker save nginx:latest > nginx.tar
# 从 tar 文件导入镜像
docker load -i nginx.tar
docker load < nginx.tar
# ============ 镜像历史和清理 ============
# 查看镜像构建历史
docker history nginx:latest --no-trunc
# 清理所有未使用的镜像、容器、网络、构建缓存
docker system prune -a --volumes
3.2 容器管理
容器生命周期
容器管理命令大全
# ============ 创建和运行容器 ============
# 运行容器(最常用)
docker run nginx:latest
# 运行容器(后台模式)
docker run -d nginx:latest
# 运行容器(指定端口映射)
docker run -d -p 8080:80 nginx:latest
# 运行容器(指定名称)
docker run -d --name mynginx nginx:latest
# 运行容器(挂载卷)
docker run -d -v /host/path:/container/path nginx:latest
# 运行容器(环境变量)
docker run -d -e APP_ENV=production -e DB_HOST=mysql nginx:latest
# 运行容器(交互式)
docker run -it ubuntu:latest bash
# 运行容器(自动删除)
docker run --rm nginx:latest
# 创建但不启动容器
docker create --name mynginx nginx:latest
# ============ 查看容器 ============
# 列出运行中的容器
docker ps
# 列出所有容器(包括停止的)
docker ps -a
# 查看容器详细信息
docker inspect mynginx
# 查看容器日志
docker logs mynginx
# 实时查看日志
docker logs -f mynginx
# 查看最后100行日志
docker logs --tail 100 mynginx
# 查看带时间戳的日志
docker logs -t mynginx
# 查看容器内进程
docker top mynginx
# 查看容器资源使用
docker stats mynginx
# 查看所有容器的资源使用
docker stats
# ============ 容器控制 ============
# 启动容器
docker start mynginx
# 停止容器
docker stop mynginx
# 强制停止容器
docker kill mynginx
# 重启容器
docker restart mynginx
# 暂停容器
docker pause mynginx
# 恢复暂停的容器
docker unpause mynginx
# ============ 容器操作 ============
# 进入运行中的容器(推荐方式)
docker exec -it mynginx bash
docker exec -it mynginx /bin/sh
# 在容器中执行命令
docker exec mynginx nginx -v
# 从容器复制文件到主机
docker cp mynginx:/etc/nginx/nginx.conf ./nginx.conf
# 从主机复制文件到容器
docker cp ./nginx.conf mynginx:/etc/nginx/nginx.conf
# 查看容器文件系统变更
docker diff mynginx
# ============ 删除容器 ============
# 删除已停止的容器
docker rm mynginx
# 强制删除运行中的容器
docker rm -f mynginx
# 删除所有已停止的容器
docker container prune
# 删除所有容器(包括运行中的)
docker rm -f $(docker ps -aq)
# ============ 容器导出和导入 ============
# 导出容器为镜像
docker commit mynginx mynginx:new-image
# 导出容器为 tar 文件
docker export mynginx > mynginx.tar
# 从 tar 文件导入为镜像
docker import mynginx.tar mynginx:imported
# ============ 容器更新 ============
# 更新容器重启策略
docker update --restart=always mynginx
# 更新容器资源限制
docker update --memory="512m" --cpus=2 mynginx
# ============ 重启策略 ============
# no: 不自动重启(默认)
docker run --restart=no myapp
# on-failure: 只有在非正常退出时重启
docker run --restart=on-failure:5 myapp# 最多重启5次
# always: 总是重启
docker run --restart=always myapp
# unless-stopped: 总是重启,除非手动停止
docker run --restart=unless-stopped myapp
_________________________________
3.3 Docker 网络管理
网络模式
网络操作命令
# ============ 查看网络 ============
# 列出所有网络
docker network ls
# 查看网络详细信息
docker network inspect bridge
# ============ 创建网络 ============
# 创建 bridge 网络
docker network create mynetwork
# 创建指定子网的网络
docker network create \
--driver=bridge \
--subnet=172.20.0.0/16 \
--gateway=172.20.0.1 \
mynetwork
# 创建 overlay 网络(用于 Swarm)
docker network create --driver=overlay --attachable my-overlay
# ============ 连接容器到网络 ============
# 运行容器时指定网络
docker run --network=mynetwork --name container1 nginx
# 将已有容器连接到网络
docker network connect mynetwork existing_container
# 断开容器连接
docker network disconnect mynetwork existing_container
# ============ 端口映射 ============
# 映射单个端口
docker run -p 8080:80 nginx
# 映射多个端口
docker run -p 8080:80 -p 8443:443 nginx
# 绑定到特定接口
docker run -p 127.0.0.1:8080:80 nginx
# 随机端口映射
docker run -P nginx
# ============ 删除网络 ============
# 删除网络
docker network rm mynetwork
# 删除所有未使用的网络
docker network prune
网络模式详解
# ============ bridge 模式(默认)============
docker run --network=bridge nginx
# 特点:
# - 容器拥有独立 IP
# - 通过 NAT 访问外网
# - 端口映射才能从外部访问
# ============ host 模式 ============
docker run --network=host nginx
# 特点:
# - 共享主机网络栈
# - 无端口映射,直接使用主机端口
# - 网络性能最好
# 注意:Windows/Mac 不支持此模式
# ============ container 模式 ============
docker run --network=container:container1 nginx
# 特点:
# - 共享另一个容器的网络命名空间
# - localhost 可以访问共享容器的服务
# ============ none 模式 ============
docker run --network=none nginx
# 特点:
# - 完全网络隔离
# - 只有 lo 接口
# - 适合高度安全的场景
_____________________
3.4 数据持久化
Volume 操作
# ============ 创建卷 ============
# 创建命名卷
docker volume create mydata
# 列出所有卷
docker volume ls
# 查看卷详细信息
docker volume inspect mydata
# ============ 使用卷 ============
# 运行容器并挂载卷
docker run -d -v mydata:/data nginx
# 运行容器并挂载到多个卷
docker run -d \
-v mydata1:/data1 \
-v mydata2:/data2 \
nginx
# 只读挂载
docker run -d -v mydata:/data:ro nginx
# ============ 清理卷 ============
# 删除卷
docker volume rm mydata
# 删除所有未使用的卷
docker volume prune
# 查看卷占用空间
docker system df -v
Bind Mount 操作
# ============ 绝对路径挂载 ============
docker run -d -v /host/path:/container/path nginx
# ============ 相对路径挂载(不推荐)============
docker run -d -v ./data:/data nginx
# ============ 只读挂载 ============
docker run -d -v /host/path:/container/path:ro nginx
# ============ 挂载单个文件 ============
docker run -d -v /host/nginx.conf:/etc/nginx/nginx.conf:ro nginx
# ============ macOS/Windows 特殊注意事项 ============
# Docker Desktop 需要在设置中授权目录访问
# 推荐使用 /Users/username (macOS) 或 C:\Users\username (Windows)



