1. 前言
在现代软件开发中,微服务架构逐渐成为主流,而合理的部署方案至关重要。本教程介绍基于 Docker Compose 的混合部署方案,以实现高效、可扩展、易维护的服务架构。
意思就是一个docker容器里面包含后端、mysql、redis、nginx等环境,这样管理非常轻便。
2. 项目架构分析
我们的架构包含以下组件:
组件 | 端口 | 说明 |
MySQL | 1001:3306 | 数据库 |
Redis | 6377:6379 | 缓存服务 |
Java 服务 | 1002:20101 | 核心业务逻辑 |
Nginx | 80:80, 443:443 | 反向代理与负载均衡 |
3. 本地开发环境 - Docker Compose 部署
对于本地开发环境,我们使用 Docker Compose 进行快速部署。
3.1 编写Dockerfile
不知道Dockerfile是啥的宝宝们看这个
(1)创建 Dockerfile
,用于构建 Java 服务的 Docker 镜像。
FROM openjdk:8-jdk-alpine
VOLUME /temp
EXPOSE 20101
ADD fire-flight-admin.jar fire-flight-admin.jar
ENTRYPOINT ["java","-jar","/fire-flight-admin.jar"]
(2)打包成jar包,注意打包前先clean再package
(3)将jar包移动到DockerFile指定位置
3.2 下载需要的docker镜像
3.3 编写docker-compose文件并配置docker网络
version: '3'
services:
mysql:
image: mysql:8 # 使用的镜像
container_name: fire-fight-mysql # 启动的实例名称
environment:
MYSQL_ROOT_PASSWORD: 123456 # root 用户密码
ports:
- "1001:3306" # 端口映射
volumes:
- ./.mysql-data:/var/lib/mysql # 将数据目录挂载到本地目录以进行持久化
- ./sql:/docker-entrypoint-initdb.d # 自动执行启动脚本
restart: always # 崩溃后自动重启
networks:
mynetwork:
ipv4_address: 172.20.0.10
redis:
image: redis:6
container_name: fire-fight-redis
ports:
- "6377:6379"
networks:
mynetwork:
ipv4_address: 172.20.0.11
volumes:
- ./.redis-data:/data # 持久化数据
fire-fight-service:
container_name: fire-fight-service
build: # 使用当前目录下的 Dockerfile 构建
context: . # 构建上下文
dockerfile: Dockerfile # 指定 Dockerfile 文件
ports:
- "1002:20101" # 端口映射
networks:
mynetwork:
ipv4_address: 172.20.0.12
nginx:
image: nginx:latest
container_name: fire-fight-nginx
ports:
- "80:80" # 将主机的80端口映射到容器的80端口
- "443:443" # 如果需要的话,也可以映射443端口
volumes:
- ./.nginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro # 挂载主配置文件
- ./.nginx/conf/conf.d:/etc/nginx/conf.d:ro # 挂载conf.d目录
- ./.nginx/html:/etc/nginx/html:ro # 如果有静态文件目录
- ./.nginx/logs:/var/log/nginx:rw # 挂载日志目录
networks:
mynetwork:
ipv4_address: 172.20.0.13
restart: always
networks:
mynetwork: # 自定义网络,实现网络互通和隔离
driver: bridge
ipam:
driver: default
config:
- subnet: 172.20.0.0/16
该网络的结构逻辑如下:
3.4 启动docker容器
在 docker-compose.yml
文件所在目录,执行:
docker-compose up -d
-d
选项表示 后台运行。
查看运行状态
docker ps
如果所有容器都正常运行,你会看到类似:
CONTAINER ID IMAGE STATUS PORTS
abcd1234 mysql:8 Up X seconds 0.0.0.0:1001->3306/tcp
efgh5678 redis:6 Up X seconds 0.0.0.0:6377->6379/tcp
ijkl9012 my-java-app Up X seconds 0.0.0.0:1002->20101/tcp
mnop3456 nginx:latest Up X seconds 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp
然后我们的混合容器就启动啦!