docker常用指令和技巧 文章目录特性最常用指令镜像管理容器生命周期调试类操作常用指令镜像构建与优化网络管理数据卷与持久化Docker Compose多容器编排常见用法和技巧1. 多阶段构建减小镜像体积2. 更快的容器“内执行”方式3. 灵活使用环境变量文件4. 定期清理磁盘空间5. 利用 Alias 提升命令效率6. 端口映射的最佳实践7. 镜像加速与私有仓库8. 使用健康检查增强容器可靠性特性Docker 作为一个轻量级的容器化平台具备以下核心特性轻量隔离容器共享宿主机内核启动时间在毫秒级远小于虚拟机。每个容器拥有独立的命名空间进程、网络、文件系统资源占用极低。分层镜像镜像采用 Union FS 分层存储一次构建多次复用。公共的基础镜像层可以被不同容器项目共享大幅节省存储空间和构建时间。可移植性通过 Dockerfile 描述运行环境保证了“Build once, run anywhere”。开发、测试、生产环境的一致性得到根本保障。版本控制与回滚镜像可以像 Git 一样打标签tag快速回退到任意历史版本。配合 CI/CD 流水线实现可靠的金丝雀发布和蓝绿部署。生态丰富Docker Hub 拥有数十万公开镜像涵盖数据库、缓存、消息队列、编程语言运行时等开发者可以快速搭建复杂的技术栈。最常用指令掌握以下指令是使用 Docker 的基础也是日常开发中出现频率最高的操作。镜像管理# 搜索镜像dockersearch nginx# 拉取镜像默认 latest 标签dockerpull nginx:1.25# 列出本地镜像dockerimages# 查看镜像详细信息dockerinspect nginx:1.25# 删除镜像需先停止并删除关联容器dockerrmi nginx:1.25容器生命周期# 创建并启动容器常用参数-d 后台运行-p 端口映射-v 挂载卷--name 命名dockerrun-d-p8080:80--namemy-nginx nginx# 查看运行中的容器dockerps# 查看所有容器包括已停止dockerps-a# 停止容器dockerstop my-nginx# 启动已停止的容器dockerstart my-nginx# 重启容器dockerrestart my-nginx# 删除容器dockerrmmy-nginx# 强制删除运行中的容器dockerrm-fmy-nginx调试类操作# 查看容器输出日志-f 持续跟踪dockerlogs-fmy-nginx# 进入正在运行的容器dockerexec-itmy-nginx /bin/bash# 从宿主机向容器拷贝文件dockercp./local.txt my-nginx:/usr/share/nginx/html/常用指令除了上述最常用的命令下面这些指令在应用开发、镜像构建、资源编排等场景中非常实用。镜像构建与优化# 使用当前目录下的 Dockerfile 构建镜像-t 指定标签dockerbuild-tmyapp:v1.# 构建时使用 build-arg 传递参数如版本号dockerbuild --build-argAPP_VERSION1.2.3-tmyapp:v1.# 不缓存地重新构建所有层dockerbuild --no-cache-tmyapp:v1.# 多阶段构建的典型用法详见后续技巧# 生成镜像后查看构建历史dockerhistorymyapp:v1网络管理# 查看现有网络dockernetworkls# 创建自定义网络推荐 bridge 类型支持容器间 DNS 解析dockernetwork create mynet# 将容器连接到指定网络dockernetwork connect mynet my-nginx# 断开网络连接dockernetwork disconnect mynet my-nginx# 查看网络详情含连接容器的 IPdockernetwork inspect mynet数据卷与持久化# 创建命名卷dockervolume create mysql_data# 启动时挂载命名卷dockerrun-d-vmysql_data:/var/lib/mysql--namemysql mysql:8# 绑定挂载宿主机目录常用于开发环境热更新dockerrun-d-v/host/path:/container/path myapp# 查看卷列表dockervolumels# 删除无用卷慎用dockervolume pruneDocker Compose多容器编排# docker-compose.yml 示例version:3services:web:build:.ports:-8000:8000volumes:-.:/appdepends_on:-dbdb:image:postgres:15environment:POSTGRES_PASSWORD:examplevolumes:-pgdata:/var/lib/postgresql/datavolumes:pgdata:常用 Compose 命令# 启动所有服务-d 后台运行docker-composeup-d# 重新构建并启动docker-composeup--build-d# 查看运行状态docker-composeps# 查看日志docker-composelogs-fweb# 停止并移除服务、网络docker-composedown# 同时删除数据卷谨慎docker-composedown-v常见用法和技巧下面总结一些提升开发效率和容器性能的实战技巧。1. 多阶段构建减小镜像体积对于 Go、Java 等需要编译的语言分离构建环境和运行环境可以显著减小镜像尺寸。# 第一阶段构建可执行文件 FROM golang:1.21 AS builder WORKDIR /app COPY go.mod go.sum ./ RUN go mod download COPY . . RUN CGO_ENABLED0 go build -o main . # 第二阶段最小化运行镜像 FROM alpine:3.18 RUN apk add --no-cache ca-certificates WORKDIR /app COPY --frombuilder /app/main . EXPOSE 8080 CMD [./main]最终镜像仅包含二进制文件和最小的运行时库体积从 800MB 降至约 15MB。2. 更快的容器“内执行”方式如果只需要在容器内执行单个命令不需要进入完整 Shell# 执行单条命令并退出dockerexecmy-nginxls/usr/share/nginx/html/# 使用 --rm 创建一个一次性容器任务结束自动删除dockerrun--rm-v$(pwd):/data alpinetar-czf/data/archive.tar.gz /data/src3. 灵活使用环境变量文件避免在命令行暴露敏感信息推荐使用--env-file# .env 文件内容DB_PASSWORDsecret123API_KEYabcdef# 启动容器时加载dockerrun-d--env-file ./.env myapp4. 定期清理磁盘空间Docker 会在 /var/lib/docker 积累无用镜像、容器、卷和构建缓存定期清理很有必要。# 一键删除所有停止的容器、未使用的网络、悬空镜像和构建缓存dockersystem prune-a--volumes# 查看磁盘占用详情dockersystemdf建议将清理命令设置为定时任务但确保不在生产环境误删正在使用的对象。5. 利用 Alias 提升命令效率在~/.bashrc或~/.zshrc中添加别名aliasddockeraliasdpsdocker ps --format table {{.Names}}\t{{.Status}}\t{{.Ports}}aliasdcudocker-compose up -daliasdcddocker-compose down这样可以用dps快速查看关键信息省去冗长的参数。6. 端口映射的最佳实践仅在必要时将端口映射到宿主机的0.0.0.0可使用127.0.0.1:8080:80绑定到本地回环提高安全性。使用-p 8080-8082:80批量映射一段端口。7. 镜像加速与私有仓库国内用户可配置镜像加速器如阿里云、华为云编辑/etc/docker/daemon.json{registry-mirrors:[https://your-id.mirror.aliyuncs.com]}重启 Docker 服务生效。8. 使用健康检查增强容器可靠性HEALTHCHECK --interval30s --timeout3s --retries3 \ CMD curl -f http://localhost/ || exit 1启用健康检查后docker ps会显示健康状态配合编排工具可自动重启不健康的容器。掌握以上常用指令和实战技巧能够大幅提升容器化开发与运维的流畅度。在实际项目中不断实践你还会发现更多 Docker 的巧妙用法。