Docker部署微服务(docker-compose)
系列文章CentOS 7下安装DockerDocker部署springboot+vue项目简介 Docker是一个很强大的容器化管理工具,诸多的优点(优点和解决方案)让它逐渐成为项目部署和持续集成的首选方案。 对于多个服务构成...
系列文章
简介
Docker是一个很强大的容器化管理工具,诸多的优点(优点和解决方案)让它逐渐成为项目部署和持续集成的首选方案。
对于多个服务构成的微服务而言,项目的统一启动、停止、重建等需求成为了选择部署工具的必要条件之一,针对这样的需求,dodcker提供了docker-compose。
docker-compose是用于定义和运行多容器Docker应用程序的工具,使用Compose基本上是一个三步过程:
- 定义每个环境自己的Dockerfile,以便在任何地方使用和复制
- 定义组成应用的服务,编写docker-compose.yml,以便容器可以在隔离的环境中一起运行
- 运行 docker-compose up,docker-compose会自动创建和启动容器
项目准备
server:
port: 10000
spring:
application:
name: fdfs-server
profiles: server-one
eureka:
client:
service-url:
defaultZone: http://fdfs-server-two:10001/eureka/
instance:
hostname: fdfs-server
prefer-ip-address: true
---
server:
port: 10001
spring:
application:
name: fdfs-server
profiles: server-two
eureka:
client:
service-url:
defaultZone: http://fdfs-server-one:10000/eureka/
instance:
hostname: fdfs-server
prefer-ip-address: true
1.我这里是单机eureka server服务集群,没需要的可以只要一个配置
zuul
server:
port: 10002
spring:
application:
name: fdfs-zuul
eureka:
client:
service-url:
defaultZone: http://fdfs-server-one:10000/eureka/
instance:
hostname: fdfs-zuul
prefer-ip-address: true
zuul:
#需要忽略的头部信息,不在传播到其他服务(跨域)
sensitive-headers: Access-Control-Allow-Origin
ignored-headers: Access-Control-Allow-Origin,H-APP-Id,Token,APPToken
routes:
api-f:
path: /api-f/**
service-id: fdfs-feign
ribbon:
ReadTimeout: 3000
ConnectTimeout: 3000
host:
connect-timeout-millis: 15000
socket-timeout-millis: 60000
hystrix:
command:
default:
execution:
isolation:
thread:
timeout-in-milliseconds: 3000
1.这里的服务ip要写服务在docker网桥里的名字(没定义默认是容器名),这里是fdfs-server-one
2.路由调用服务也要是服务在docker网桥里的名字(没定义默认是容器名),这里是fdfs-feign
feign
server:
port: 10005
spring:
application:
name: fdfs-feign
eureka:
client:
service-url:
defaultZone: http://fdfs-server-one:10000/eureka/
instance:
hostname: fdfs-feign
prefer-ip-address: true
feign:
hystrix:
enabled: true
upload
server:
port: 10003
spring:
application:
name: fdfs-upload
datasource:
druid:
url: jdbc:mysql://fdfs-mysql:3306/fastdfs?useUnicode=true&characterEncoding=utf-8&useSSL=false
username: root
password: 12345
driver-class-name: com.mysql.cj.jdbc.Driver
platform: mysql
type: com.alibaba.druid.pool.DruidDataSource
# 下面为连接池的补充设置,应用到上面所有数据源中
# 初始化大小,最小,最大
initialSize: 1
minIdle: 3
maxActive: 20
# 配置获取连接等待超时的时间
maxWait: 60000
# 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒
timeBetweenEvictionRunsMillis: 60000
# 配置一个连接在池中最小生存的时间,单位是毫秒
minEvictableIdleTimeMillis: 30000
validationQuery: select 'x'
testWhileIdle: true
testOnBorrow: false
testOnReturn: false
# 打开PSCache,并且指定每个连接上PSCache的大小
poolPreparedStatements: true
maxPoolPreparedStatementPerConnectionSize: 20
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙
filters: stat,wall,slf4j
# 通过connectProperties属性来打开mergeSql功能;慢SQL记录
connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
# 合并多个DruidDataSource的监控数据
#useGlobalDataSourceStat: true
jpa:
show-sql: true
#服务注册
eureka:
client:
service-url:
defaultZone: http://fdfs-server-two:10001/eureka/
instance:
hostname: fdfs-upload
prefer-ip-address: true
mybatis-plus:
mapper-locations: classpath:/mapper/*Mapper.xml
typeAliasesPackage: com.fastdfs.fastdfsupload.entity
错误一
公共模块的xxxx找不到或者公共模块找不到mainclass,删除公共模块以及父项目的打包插件spring-boot-maven-plugin
错误二
org.apache.maven.plugins:maven-surefire-plugin:xxxxx:这个插件找不到,报错模块的打包处添加:
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<skipTests>true</skipTests>
</configuration>
</plugin>
</plugins>
</build>
version: "3.7"
services:
mysql:
#容器启动镜像(这里一定要有mysql镜像)
image: mysql:5.7.29
#容器所在网络
networks:
- cloud
#容器映射端口
ports:
- "3306:3306"
#启动环境配置
environment:
- MYSQL_ROOT_PASSWORD=12345
- MYSQL_USER=root
#密码方式(不是必要)
command:
['--default-authentication-plugin=mysql_native_password']
#挂载目录
volumes:
#数据挂载
- /home/project/cloud/data/mysql:/var/lib/mysql
#同步系统时间
- /etc/localtime:/etc/localtime:ro
#容器名(一定要和项目连接数据库的配置名一样)
container_name: fdfs-mysql
#一直重启
restart: always
server-one:
#容器构建
build:
#容器构建相对路径/绝对路径
context: /home/project/cloud/server
#指定构建的Dockerfile
dockerfile: Dockerfile
#容器启动镜像
image: fdfs-server-one
#容器启动时自定义的容器名称(一定要和注册服务的配置名一样)
container_name: fdfs-server-one
#容器所在网络
networks:
- cloud
#容器映射端口
ports:
- "10000:10000"
#提高当前用户在容器里面的权限
privileged: true
#挂载目录
volumes:
#持续集成
- /home/project/cloud/server:/data
#入口配置(启动配置和多环境配置)
entrypoint: ["java","-Djava.security.edg=file:/dev/./urandom","-Dspring.profiles.active=server-one","-jar","/data/fastdfs-server.jar"]
server-two:
#容器构建
build:
#容器构建相对路径/绝对路径
context: /home/project/cloud/server
#指定构建的Dockerfile
dockerfile: Dockerfile
#容器启动镜像
image: fdfs-server-two
#容器启动时自定义的容器名称
container_name: fdfs-server-two
#容器所在网络
networks:
- cloud
#容器映射端口
ports:
- "10001:10001"
#提高当前用户在容器里面的权限
privileged: true
#挂载目录
volumes:
#持续集成
- /home/project/cloud/server:/data
#入口配置(启动配置和多环境配置)
entrypoint: ["java","-Djava.security.edg=file:/dev/./urandom","-Dspring.profiles.active=server-two","-jar","/data/fastdfs-server.jar"]
zuul:
#容器构建
build:
#容器构建相对路径/绝对路径
context: /home/project/cloud/zuul
#指定构建的Dockerfile
dockerfile: Dockerfile
#容器启动镜像
image: fdfs-zuul
##容器启动时自定义的容器名称
container_name: fdfs-zuul
#容器所在网络
networks:
- cloud
#容器映射端口
ports:
- "10002:10002"
#挂载目录
volumes:
#jar包挂载,持续集成
- /home/project/cloud/zuul:/data
#入口配置
entrypoint: ["java","-Djava.security.edg=file:/dev/./urandom","-jar","/data/fastdfs-zuul.jar"]
#依赖
depends_on:
- server-one
feign:
#容器构建
build:
#容器构建相对路径/绝对路径
context: /home/project/cloud/feign
#指定构建的Dockerfile
dockerfile: Dockerfile
#容器启动镜像
image: fdfs-feign
#容器启动时自定义的容器名称
container_name: fdfs-feign
#容器所在网络
networks:
- cloud
#映射端口
ports:
- "10005:10005"
#挂载目录
volumes:
- /home/project/cloud/feign:/data
#入口配置
entrypoint: ["java","-Djava.security.edg=file:/dev/./urandom","-jar","/data/fastdfs-feign.jar"]
#依赖
depends_on:
- server-one
upload:
#容器构建
build:
#容器构建相对路径/绝对路径
context: /home/project/cloud/client/upload
#指定构建的Dockerfile
dockerfile: Dockerfile
#容器启动镜像
image: fdfs-upload
container_name: fdfs-upload
networks:
- cloud
ports:
- "10003:10003"
volumes:
- /home/project/cloud/client/upload:/data
entrypoint: ["java","-Djava.security.edg=file:/dev/./urandom","-jar","/data/fastdfs-upload.jar"]
depends_on:
- mysql
- server-two
#定义网络
networks:
#网络名
cloud:
#有就使用,没有就会新建网络(默认bridge)
external: true
1.Mysql 的镜像版本一定要注意
2.自定义网络一定要先创建好网络,这里是cloud,否则,会默认新建一个 文件名_网络名 这样名字的网络
3.容器构建路径和挂载路径一定要对,一定要,一定要!!
4.注意你自己的容器名和微服务的名字,一定要对得上,最好容器名=微服务名
1. 将整个部署项目上传到服务器
2. 当前docker-compose.yml目录下运行:docker-compose up -d
3. 查看是否运行成功:docker ps -a
更多推荐
所有评论(0)