一 新建docker项目部署目录
如下图所示:
其中gateway代表网关模块,mysql代表mysql数据库,nginx代表代理服务器,service代表服务api,redis代表缓存服务器
docker-compose.yml为最终部署文件
二配置项目运行环境
- 数据库
主要包含四个文件,conf(数据软件相关配置),data(数据存储目录),init(数据库数据初始化),dokcer-compose,代表单独运行docker环境
如下图所示:
- redis
主要包含四个文件,conf(redis相关配置),data(数据存储目录),log(redis的日志),dokcer-compose,代表单独运行docker环境
如下图所示:
- nacos(注册中心)
主要包含四个文件,data(数据存储目录),log(redis的日志),dokcer-compose,代表单独运行docker环境,nacos.env代表环境配置参数
- nginx(代理服务)
html前端打包目录,logs(nginx运行日志文件)
三docker 打包镜像
1.service (微服务模块)service.env
主要三个文件,Dockerfile(docker打包文件),service.env(微服务配置参数),sevice-0.0.1-SNAPSHOT.jar(微服务jar包)
如下图所示
打包命令
docker build -t clouddemo-service
2.gateway(网关服务)
主要三个文件,Dockerfile(docker打包文件),gateway.env(微服务配置参数),gateway-0.0.1-SNAPSHOT.jar(微服务jar包)
如下图所示
打包命令
docker build -t clouddemo-gateway .
四 整合容器
总配置文件如下:
version: '3'
services:
nginx: #服务名称,用户自定义
image: nginx:latest #镜像版本
container_name: nginx
ports:
- 80:80 #暴露端口
restart: always
volumes: #挂载
- ./nginx/html:/usr/share/nginx/html
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/logs:/var/log/nginx
privileged: true #解决nginx的文件调用权限问题
networks:
my-overlay-network:
aliases:
- nginx-service
service:
image: clouddemo-service
build: # 表示以当前目录下的Dockerfile开始构建镜像
context: . #代表上下文当前目录
dockerfile: service/Dockerfile #DockerFile的文件名字
restart: always
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: on-failure
ports:
- "9001:9001"
networks:
my-overlay-network:
aliases:
- service-user
env_file:
- service/service.env
volumes: #挂载
- ./service/logs:/log/service
depends_on: # 依赖与mysql、redis,其实可以不填,默认已经表示可以
- mysql
- redis
- nacos
mysql:
image: mysql
container_name: db_mysql
ports:
- 3306:3306
restart: always
volumes:
- ./mysql/conf:/etc/mysql/conf.d
- ./mysql/init:/docker-entrypoint-initdb.d
- ./mysql/data:/var/lib/mysql
command:
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--default-authentication-plugin=mysql_native_password
networks:
my-overlay-network:
aliases:
- mysql-service
environment: # 指定用户root的密码
MYSQL_ROOT_PASSWORD: 'root'
MYSQL_DATABASE: 'ajgl'
nacos:
image: nacos/nacos-server:v2.0.3
container_name: nacos
env_file:
- nacos/nacos.env
volumes:
- ./nacos/logs:/home/nacos/logs
- ./nacos/data:/home/nacos/data
ports:
- 8848:8848
networks:
my-overlay-network:
aliases:
- nacos-service
restart: always
gateway:
image: clouddemo-gateway
container_name: gateway
build: # 表示以当前目录下的Dockerfile开始构建镜像
context: . #代表上下文当前目录
dockerfile: gateway/Dockerfile #DockerFile的文件名字
restart: always
deploy:
mode: replicated
replicas: 1
restart_policy:
condition: on-failure
ports:
- "9000:9000"
networks:
my-overlay-network:
aliases:
- gateway-service
env_file:
- gateway/gateway.env
volumes: #挂载
- ./gateway/logs:/log/gateway
depends_on: # 依赖与mysql、redis,其实可以不填,默认已经表示可以
- mysql
- redis
- nacos
redis:
image: redis:5.0.3
container_name: db_redis
ports:
- 6333:6379
restart: always
volumes: #挂载
- ./redis/conf/redis.conf:/usr/local/etc/redis/redis.conf
- ./redis/data:/data:rw
- ./redis/logs:/logs
networks:
my-overlay-network:
aliases:
- redis-service
command: redis-server /usr/local/etc/redis/redis.conf
networks:
my-overlay-network:
external: true
driver: overlay
五 运行
docker-compose up