一、容器生命周期管理(18个)
-
运行容器:
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限制
二、容器操作与调试(15个)
-
进入交互终端:
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
三、镜像管理(12个)
-
拉取镜像:
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
四、存储管理(10个)
-
创建匿名卷:
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
五、网络管理(12个)
-
查看网络列表:
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
六、生产运维实践(15个)
-
日志驱动设置:
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
七、集群与编排(10个
-
初始化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
八、系统维护与监控(8个)
-
查看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
(详细磁盘占用分析)
生产环境五大黄金法则
-
1. 镜像版本固化:禁止使用
latest
标签,必须明确版本号(如nginx:1.25.3
) -
2. 资源硬性限制:所有容器必须设置
--memory
和--cpus
限制 -
3. 日志轮转机制:通过
max-size
和max-file
防止日志撑爆磁盘 -
4. 非root用户运行:使用
--user
指定非特权用户(UID>1000) -
5. 只读文件系统:配合
tmpfs
实现写入路径最小化
重要提醒:永远不要在容器内存储重要数据!所有持久化数据必须通过:
• 绑定挂载(Bind Mounts)
• 命名卷(Named Volumes)
• 分布式存储(NFS/Ceph等)