一、Docker 开发高频命令速查表1. 环境校验docker-v# 查看Docker版本dockerinfo# 查看引擎全局信息2. 镜像操作dockerpull[镜像名:tag]# 拉取镜像如docker pull nginx:1.23dockerimages# 列出本地镜像dockerrmi[镜像ID/镜像名]# 删除镜像dockerrmi$(dockerimages-q)# 清空全部镜像dockerbuild-t镜像名:版本.# 构建镜像末尾.不可丢dockersave-oxxx.tar 镜像名# 导出镜像包dockerload-ixxx.tar# 导入镜像包3. 容器生命周期# 标准启动模板dockerrun-d--name容器名-p宿主机端口:容器端口-v宿主机目录:容器目录 镜像名dockerps# 查看运行中容器dockerps-a# 查看所有容器含停止dockerstop 容器名/ID# 停止容器dockerstart 容器名/ID# 启动已存在容器dockerrestart 容器名/ID# 重启dockerrm容器名/ID# 删除已停止容器dockerrm$(dockerps-aq)# 清空所有容器4. 进入容器、日志、资源dockerexec-it容器名 /bin/bash# 交互式进入容器dockerlogs 容器名# 查看日志dockerlogs-f--tail200容器名# 实时滚动最后200行日志dockerstats# 实时查看容器CPU/内存占用5. 文件拷贝宿主机 ↔ 容器# 宿主机文件复制到容器dockercp./index.html nginx-demo:/usr/share/nginx/html/# 容器文件复制到宿主机dockercpnginx-demo:/etc/nginx/nginx.conf ./conf/6. 数据卷 Volumedockervolumels# 查看数据卷dockervolume create 卷名# 创建持久卷dockervolumerm卷名# 删除卷7. Docker Compose 整套服务docker-composeup-d# 后台启动所有服务docker-composelogs-f# 实时查看全部服务日志docker-composeps# 查看编排容器状态docker-composerestart# 重启所有服务docker-composestop# 停止容器保留数据docker-composedown# 删除容器、网络保留卷docker-composedown-v# 删除容器网络数据卷谨慎docker-composebuild# 重新构建镜像二、通用前后端项目模板Vue 前端 SpringBoot 后端 MySQL Nginx Redis 前端 npm 安全构建命令目录结构project/ ├── docker-compose.yml ├── frontend/ │ └── Dockerfile # Vue npm构建安全优化 ├── backend/ │ └── Dockerfile # SpringBoot ├── nginx/ │ └── nginx.conf ├── mysql-data/ └── redis-data/ # Redis持久化目录1、docker-compose.ymlversion:3.8services:# MySQL数据库mysql:image:mysql:8.0container_name:project-mysqlrestart:alwaysenvironment:MYSQL_ROOT_PASSWORD:root123456MYSQL_DATABASE:demo_dbMYSQL_USER:devMYSQL_PASSWORD:dev123volumes:# 数据卷-./mysql-data:/var/lib/mysqlports:-3306:3306networks:-app-net# Redis缓存redis:image:redis:7-alpinecontainer_name:project-redisrestart:alwayscommand:redis-server--requirepass redis123456# 设置redis密码volumes:-./redis-data:/dataports:-6379:6379networks:-app-net# SpringBoot后端服务backend:build:./backendcontainer_name:project-backendrestart:alwaysports:-8080:8080depends_on:-mysql-redisenvironment:# MySQL连接SPRING_DATASOURCE_URL:jdbc:mysql://mysql:3306/demo_db?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiSPRING_DATASOURCE_USERNAME:rootSPRING_DATASOURCE_PASSWORD:root123456# Redis连接SPRING_REDIS_HOST:redisSPRING_REDIS_PORT:6379SPRING_REDIS_PASSWORD:redis123456networks:-app-net# Vue前端frontend:build:./frontendcontainer_name:project-frontendrestart:alwaysnetworks:-app-net# Nginx反向代理nginx:image:nginx:1.23-alpinecontainer_name:project-nginxrestart:alwaysports:-80:80volumes:-./nginx/nginx.conf:/etc/nginx/conf.d/default.conf# 直接挂载前端打包产物-./frontend/dist:/usr/share/nginx/htmldepends_on:-backend-frontendnetworks:-app-netnetworks:app-net:driver:bridge2、frontend/Dockerfile 优化npm 安全构建替换不安全 npm install优化点使用 npm ci 锁定版本避免版本漂移分阶段构建、不存源码、减小镜像体积使用 alpine 轻量基础镜像减少漏洞面不使用 root 运行构建进程安全降级用户# 构建阶段node alpineFROM node:18-alpine AS build# 创建普通用户不使用root操作RUN addgroup-g1001-Snodejsadduser-Snodeuser-u1001WORKDIR /app# 授权目录权限给普通用户RUNchown-Rnodeuser:nodejs /appUSERnodeuser# 仅复制依赖文件缓存依赖层COPY--chownnodeuser:nodejs package.json package-lock.json ./# npm ci 严格匹配lock文件比npm install更安全稳定RUNnpmci# 复制全部源码并打包COPY--chownnodeuser:nodejs..RUNnpmrun build# 运行阶段轻量化nginxFROM nginx:1.23-alpine# 删除默认页面RUNrm-rf/usr/share/nginx/html/*# 从构建阶段拷贝打包产物COPY--frombuild /app/dist /usr/share/nginx/html EXPOSE80CMD[nginx,-g,daemon off;]3、backend/Dockerfile原轻量化多阶段# 构建阶段FROM maven:3.8-openjdk-17 AS builder WORKDIR /app COPY pom.xml.COPY src ./src RUN mvn clean package-DskipTests# 运行阶段FROM openjdk:17-jre-slim WORKDIR /app COPY--frombuilder /app/target/*.jar app.jar EXPOSE8080ENTRYPOINT[java,-jar,app.jar]4、nginx/nginx.conf 反向代理配置server{listen80;server_name localhost;root/usr/share/nginx/html;index index.html;# Vue history模式 刷新404兜底 location/{try_files $uri $uri//index.html;}# 后端接口转发 location/api/{proxy_pass http://backend:8080/api/;proxy_set_header Host $host;proxy_set_headerX-Real-IP$remote_addr;# SpringBoot 后端获取客户端真实IP、登录会话、跨域、鉴权经常依赖这3个头缺失会出现各种异常 proxy_set_headerX-Forwarded-For $proxy_add_x_forwarded_for;proxy_set_headerX-Forwarded-Proto $scheme;proxy_set_headerX-Forwarded-Host $host;# 超时配置 proxy_connect_timeout 60s;proxy_read_timeout 60s;}}配套操作命令# 构建并后台启动全部服务(mysqlredis后端前端nginx)docker-composeup-d--build# 查看全部服务日志docker-composelogs-f# 单独查看redis日志docker-composelogs-fredis# 停止服务docker-composestop# 删除容器保留持久化数据docker-composedown# 彻底删除容器redis/mysql持久数据测试清理用docker-composedown-v