Docker容器操作命令大全
一、容器生命周期管理
- 运行容器:docker run -d --name web nginx:latest 后台启动Nginx容器
- 启动已停止容器:docker start web
- 停止运行中容器:docker stop web(发送SIGTERM信号)
- 强制停止容器:docker kill web(发送SIGKILL信号)
- 重启容器:docker restart web
- 暂停容器进程:docker pause web(冻结进程树)
- 恢复暂停容器:docker unpause web
- 删除停止的容器:docker rm web
- 强制删除运行中容器:docker rm -f web(生产环境慎用)
- 批量删除停止容器:docker container prune
- 创建容器不启动:docker create --name temp alpine sleep 3600
- 容器重命名:docker rename old_name new_name
- 更新运行参数:docker update --memory 512m web 动态调整内存限制
- 设置重启策略:docker run --restart=always nginx 崩溃后自动重启
- 容器自愈检测:docker run --health-cmd=“curl -f http://localhost || exit 1” --health-interval=30s nginx
- 查看健康状态:docker inspect --format=‘{{.State.Health.Status}}’ web
- 资源限制(CPU):docker run --cpus=1.5 app 限制使用1.5核CPU
- 资源限制(内存):docker run -m 2g --memory-swap=3g app 内存+Swap限制
二、容器操作与调试
- 进入交互终端:docker exec -it web /bin/bash
- 后台执行命令:docker exec -d web touch /tmp/test.log
- 查看实时日志:docker logs -f --tail 100 web(追踪最后100行)
- 查看进程列表:docker top web
- 容器详情查看:docker inspect web | jq .(配合jq解析JSON)
- 端口映射检查:docker port web
- 文件复制到容器:docker cp app.conf web:/etc/nginx/conf.d/
- 从容器复制文件:docker cp web:/var/log/nginx/error.log ./
- 查看资源统计:docker stats --no-stream(显示当前状态)
- 实时监控资源:docker stats web mysql(监控特定容器)
- 容器差异检查:docker diff web(查看文件系统变更)
- 容器提交为镜像:docker commit -c ‘CMD [“nginx”]’ web nginx:v2(慎用,推荐Dockerfile)
- 容器导出快照:docker export web > web.tar
- 挂载调试工具:docker run --cap-add SYS_PTRACE --security-opt seccomp=unconfined debug_tool
- 使用nsenter调试:nsenter --target $(docker inspect -f {{.State.Pid}} web) --mount --uts --ipc --net --pid
三、镜像管理
- 拉取镜像:docker pull alpine:3.18(指定版本避免latest风险)
- 查看本地镜像:docker images --filter “dangling=false”(过滤悬空镜像)
- 删除镜像:docker rmi alpine:3.17
- 强制删除镜像:docker rmi -f redis(被容器使用时需加-f)
- 清理悬空镜像:docker image prune
- 导出镜像存档:docker save -o nginx.tar nginx:latest
- 导入镜像存档:docker load -i nginx.tar
- 查看镜像历史:docker history nginx
- 镜像标签管理:docker tag nginx:latest myreg.com/nginx:v1
- 推送镜像到仓库:docker push myreg.com/nginx:v1
- 构建镜像:docker build -t myapp:v1 --build-arg ENV=prod .
- 多阶段构建:Dockerfile中:COPY --from=builder /app/bin /usr/bin
四、存储管理
- 创建匿名卷:docker run -v /data mysql(自动创建)
- 绑定主机目录:docker run -v /host/path:/container/path nginx
- 创建命名卷:docker volume create app_data
- 使用命名卷:docker run -v app_data:/var/lib/mysql mysql
- 查看卷详情:docker volume inspect app_data
- 清理未使用卷:docker volume prune
- 查看挂载点:docker inspect -f ‘{{ .Mounts }}’ web
- 临时文件系统:docker run --tmpfs /tmp:size=100m app
- 只读挂载:docker run -v /conf:/etc/nginx:ro nginx(生产安全必备)
- 共享存储卷:docker run --volumes-from db_storage backup_tool
五、网络管理
- 查看网络列表:docker network ls
- 创建自定义网络:docker network create --driver bridge my_net
- 指定容器网络:docker run --network=my_net web
- 容器别名访问:docker run --network=my_net --name web --network-alias website nginx
- 查看网络详情:docker network inspect my_net
- 连接运行中容器:docker network connect my_net existing_container
- 断开容器网络:docker network disconnect my_net container
- 端口随机映射:docker run -P nginx(自动绑定随机主机端口)
- 指定端口映射:docker run -p 8080:80 -p 443:443 nginx
- 主机模式网络:docker run --network=host nginx(共享主机网络栈)
- 容器间直连:docker run --link redis:db app(传统方式,推荐使用自定义网络)
- DNS配置覆盖:docker run --dns 8.8.8.8 --dns-search example.com alpine
六、生产运维实践
- 日志驱动设置:docker run --log-driver=json-file --log-opt max-size=10m nginx
- 日志标签添加:docker run --log-opt tag=“{{.Name}}/{{.ID}}” nginx
- 环境变量注入:docker run -e TZ=Asia/Shanghai -e APP_ENV=prod app
- 时区同步配置:docker run -v /etc/localtime:/etc/localtime:ro app
- 容器自启策略:docker run --restart=on-failure:5 app(失败时最多重启5次)
- 内核参数调整:docker run --sysctl net.core.somaxconn=1024 app
- 容器资源限制:docker run --cpus=“.5” -m 500m --blkio-weight=500 app
- OOM优先级设置:docker run --oom-score-adj=500 app(值越高越易被kill)
- 容器用户隔离:docker run --user 1000:1000 app(避免root运行)
- 只读文件系统:docker run --read-only app(需配合tmpfs使用)
- 能力控制:docker run --cap-add NET_ADMIN --cap-drop SYS_ADMIN app
- 安全加固:docker run --security-opt no-new-privileges app(禁止提权)
- AppArmor配置:docker run --security-opt apparmor=my_profile app
- SELinux标签:docker run --security-opt label=type:container_t app
- 设备访问授权:docker run --device=/dev/snd:/dev/snd:rw audio_app
七、集群与编排
- 初始化Swarm:docker swarm init --advertise-addr 192.168.1.100
- 加入Swarm集群:docker swarm join --token SWMTKN… 192.168.1.100:2377
- 部署Stack服务:docker stack deploy -c docker-compose.yml myapp
- 查看服务列表:docker service ls
- 服务伸缩操作:docker service scale web=5
- 滚动更新配置:docker service update --image nginx:1.23 web
- 回滚服务版本:docker service rollback web
- 查看服务日志:docker service logs -f web
- 节点状态检查:docker node ls
- 服务约束部署:docker service create --constraint ‘node.role==worker’ nginx
八、系统维护与监控
- 查看Docker版本:docker version
- 系统全局信息:docker info
- 磁盘空间清理:docker system prune -af(慎用!清理所有未用资源)
- 事件实时监控:docker events --filter ‘event=die’(捕获容器退出事件)
- 构建缓存清理:docker builder prune
- 检查容器配置:docker config ls(Swarm模式)
- 容器漏洞扫描:docker scan nginx:latest(需登录Docker Hub)
- 资源使用报告:docker system df -v(详细磁盘占用分析)
生产环境五大黄金法则
- 镜像版本固化:禁止使用latest标签,必须明确版本号(如nginx:1.27.5)(内网不影响)
- 资源硬性限制:所有容器必须设置–memory和–cpus限制
- 日志轮转机制:通过max-size和max-file防止日志撑爆磁盘
- 非root用户运行:使用–user指定非特权用户(UID>1000)
- 只读文件系统:配合tmpfs实现写入路径最小化
重要提醒:永远不要在容器内存储重要数据!所有持久化数据必须通过:
• 绑定挂载(Bind Mounts)
• 命名卷(Named Volumes)
• 分布式存储(NFS/Ceph等)
✅ 容器即不可变基础设施(Immutable Infrastructure)
✅ 日志输出到stdout/stderr而非文件
✅ 单容器单进程模型(Sidecar模式除外)
✅ 镜像构建遵循最小化原则(如Alpine基础镜像)
记住: 最危险的Docker命令不是rm -f,而是缺乏生产级意识的随意操作。