Docker项目部署(黑马商城项目为例)

1. 网络管理(容器互联)

复制代码
# 创建自定义网络(项目隔离)
docker network create hmall-net  //加入自定义网络的容器可以通过容器名互相访问

# 查看所有网络
docker network ls

# 将现有容器加入网络(如 MySQL)
docker network connect hmall-net mysql --alias db

2. MySQL 容器部署(数据持久化)

复制代码
# 启动 MySQL 容器
docker run -d \
  --name mysql \
  --network hmall-net \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  -v $PWD/mysql/data:/var/lib/mysql \
  -v $PWD/mysql/conf:/etc/mysql/conf.d \
  -v $PWD/mysql/init:/docker-entrypoint-initdb.d \
  mysql

这样就实现数据的持久保存了(即使你删除mysql容器后,他依然还存在,只需创建mysql容器时并指定之前定好的目录或文件)


3. Java项目构建与部署

root中只需要打包好的jar包与dockerfile文件

复制代码
# 在项目目录构建镜像(Dockerfile 所在目录)
docker build -t hmall .

# 运行 Java 应用容器
docker run -d \
  --name hmall \
  --network hmall-net \
  -p 8080:8080 \
  hmall                           
//第一个hmall的意思是容器名,第二个是加入的网络名称,第三个是使用之前build的hmall镜像

4. Nginx 容器部署(反向代理/静态资源)

复制代码
# 使用 volume 挂载静态资源
docker run -d \
  --name nginx \
  --network hmall-net \
  -p 80:80 \
  -v html:/usr/share/nginx/html \
  nginx

# 查看 volume 物理路径(修改静态资源)
docker volume inspect html

5. 容器管理常用命令

复制代码
# 强制删除容器(解决名称冲突)
docker rm -f [容器名]

# 查看容器详细 IP(网络调试)
docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' [容器名]

# 格式化查看容器列表
docker ps -a --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"

# 进入容器终端
docker exec -it [容器名] bash

6. 故障排查

复制代码
# 查看容器日志(重要!)
docker logs -f hmall

# 检查容器网络连通性
docker exec hmall ping mysql

完整部署流程建议:

  1. 创建网络 `hmall-net`
  2. 启动 MySQL 容器(自动初始化数据库)
  3. 构建 Java 应用镜像
  4. 启动 Java 容器(连接到同一网络)
  5. 部署 Nginx 作为前端代理

> **重要提示**:

> - 所有容器必须使用 `--network hmall-net` 加入同一网络

> - Java 应用中数据库连接地址应使用容器名(如 `jdbc:mysql://mysql:3306/db`)

> - 挂载卷使用绝对路径(`$PWD` 或完整路径),避免权限问题

> - 容器启动后立即检查日志:`docker logs -f [容器名]`