Docker指令全指南:从入门到实战技巧 1. Docker指令全记录从入门到精通的完整指南刚接触Docker时最让我头疼的就是记不住那些看似相似却又功能各异的指令。每次遇到问题都要反复查阅文档效率极低。后来我养成了记录常用指令的习惯并整理成这份手册现在分享给同样被Docker指令困扰的你。这份指南不仅包含基础命令还涵盖了实际工作中最常遇到的20种场景解决方案。比如当容器莫名退出时如何查看日志如何清理占空间的镜像以及如何在不中断服务的情况下更新容器配置等实战技巧。无论你是刚安装Docker的新手还是已经使用过docker run这类基础命令的开发者都能在这里找到提升效率的秘诀。2. Docker环境准备与验证2.1 安装与基础配置在Ubuntu上安装Docker只需执行sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io安装完成后建议立即将当前用户加入docker组以避免频繁使用sudosudo usermod -aG docker $USER newgrp docker # 立即生效无需重启验证安装成功的黄金标准是运行docker run hello-world这个测试镜像会下载并运行输出欢迎信息后自动退出。如果看到Hello from Docker!说明环境一切正常。注意Windows/macOS用户推荐使用Docker Desktop但需确保BIOS中已开启虚拟化支持(VT-x/AMD-V)。若启动时报virtualisation support wasnt detected错误需要进入主板设置启用相关选项。2.2 配置国内镜像加速默认镜像仓库在国外建议配置国内镜像源提升下载速度。创建或修改/etc/docker/daemon.json{ registry-mirrors: [ https://hub-mirror.c.163.com, https://mirror.baidubce.com ] }重启服务生效sudo systemctl restart docker3. 核心指令详解与实战场景3.1 镜像管理四部曲搜索镜像- 查找官方仓库中的可用镜像docker search nginx拉取镜像- 下载镜像到本地建议始终指定版本标签docker pull nginx:1.21-alpine列出镜像- 查看已下载的镜像及占用空间docker images # 显示格式REPOSITORY TAG IMAGE ID CREATED SIZE删除镜像- 清理不再使用的镜像释放空间docker rmi IMAGE_ID # 强制删除docker rmi -f IMAGE_ID经验定期运行docker image prune -a清理悬空镜像可节省大量磁盘空间。我曾通过这个命令一次性清理出20GB空间。3.2 容器生命周期管理经典容器启停流程# 启动容器-d后台运行-p端口映射--name命名 docker run -d -p 8080:80 --name my_nginx nginx # 查看运行中的容器 docker ps # 停止容器 docker stop my_nginx # 再次启动已停止的容器 docker start my_nginx # 彻底删除容器 docker rm my_nginx调试运行中的容器# 进入容器内部bash环境退出时用exit docker exec -it my_nginx bash # 查看容器日志-f实时跟踪 docker logs -f my_nginx3.3 网络与存储配置自定义网络创建docker network create my_network docker run --networkmy_network --name app1 my_app docker run --networkmy_network --name app2 my_app这样app1和app2可以通过容器名直接互相访问无需知道IP地址。数据卷挂载# 创建命名卷 docker volume create my_volume # 挂载到容器 docker run -v my_volume:/app/data my_app # 主机目录直接挂载 docker run -v /host/path:/container/path my_app4. 高级操作与排错指南4.1 容器编排利器docker-compose编写docker-compose.yml文件version: 3 services: web: image: nginx:alpine ports: - 8000:80 volumes: - ./html:/usr/share/nginx/html db: image: postgres:13 environment: POSTGRES_PASSWORD: example常用操作命令# 启动所有服务 docker-compose up -d # 查看服务状态 docker-compose ps # 停止并移除所有资源 docker-compose down4.2 常见问题排查手册问题1端口冲突症状Error starting userland proxy: listen tcp4 0.0.0.0:8080: bind: address already in use 解决方案# 查找占用端口的进程 sudo lsof -i :8080 # 终止冲突进程或修改容器映射端口问题2权限拒绝症状Got permission denied while trying to connect to the Docker daemon socket 解决方案# 确保当前用户在docker组 groups # 若不在组中 sudo usermod -aG docker $USER newgrp docker问题3磁盘空间不足症状No space left on device 解决方案# 查看磁盘使用情况 docker system df # 一键清理无用资源 docker system prune -a5. 生产环境最佳实践5.1 镜像构建优化编写高效的Dockerfile# 多阶段构建示例 FROM golang:1.16 AS builder WORKDIR /app COPY . . RUN go build -o myapp . FROM alpine:latest WORKDIR /root/ COPY --frombuilder /app/myapp . CMD [./myapp]构建技巧使用.dockerignore文件排除无关文件合并RUN指令减少镜像层数尽量使用官方镜像作为基础5.2 容器安全加固基本安全措施# 以非root用户运行容器 docker run -u 1000 my_app # 限制资源使用 docker run --memory512m --cpus1 my_app # 只读文件系统 docker run --read-only my_app6. 性能监控与日志管理6.1 实时监控容器状态查看容器资源占用docker stats # 输出示例 CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS c3f279d17e12 my_nginx 0.01% 3MiB / 1GiB 0.29% 1kB / 0B 0B / 0B 2深入检查容器配置docker inspect my_nginx6.2 集中式日志方案配置json-file日志驱动默认docker run --log-driverjson-file --log-opt max-size10m --log-opt max-file3 my_app查看日志文件位置docker inspect --format{{.LogPath}} my_nginx7. 企业级应用场景7.1 CI/CD流水线集成在Jenkins中使用的典型脚本docker build -t myapp:$BUILD_NUMBER . docker tag myapp:$BUILD_NUMBER myrepo/myapp:latest docker push myrepo/myapp:latest7.2 多环境配置管理使用环境变量文件# env.list文件内容 DB_HOSTdb.prod.example.com DB_PORT5432 # 启动时加载 docker run --env-file env.list my_app8. 终极指令速查表场景指令示例批量停止所有容器docker stop $(docker ps -q)进入容器调试docker exec -it container bash查看容器IP地址docker inspect -f {{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}} container从容器复制文件到主机docker cp container:/path/to/file /host/path查看容器进程docker top container修改容器配置docker commit container new_image 重新创建容器查看镜像历史docker history image端口映射检查docker port container这份指南中的每个指令都经过我多年实践验证特别是在处理生产环境问题时这些命令组合能解决90%以上的常见状况。建议收藏本页遇到问题时按场景查找对应解决方案。