docker部署springcloud
上篇博客docker网络配置已经教我们如何打jar部署成功一个eureka了,不知道如何部署的看我上篇博客:javascript:void(0)
今天就主要分享一下如何更改连接数据库的配置,也就是我们部署的项目是不能依赖本地数据库的,应该是连接我们docker容器的数据库
首先我们进入docker容器,拉取一个Mysql数据库镜像
docker pull mysql:版本号
我这里下载的是mysql:5.5的,后面就全部是以这个来的了
然后我们选用这个镜像创建一个容器,并且我们采用host模式,需要映射端口,命令如下
MYSQL_ROOT_PASSWORD 是设置 mysql root 账户的密码
docker run -p 3308:3306 --name db_0524 -e MYSQL_ROOT_PASSWORD=123 -d mysql:5.5
然后我们就可以用连接工具连接数据库了,启动容器
用我们虚拟机的地址加我们映射的地址连接
所以我们在打包我们jar包时候,连接数据库配置也需要改变
然后就没什么好说的了,我们把所有项目打成jar,放入我们创建好的数据卷容器里面(这个在上篇博客中都写了),然后每一个项目对应一个容器,一个个的打开就好了
使用host模式创建容器
docker run -di
–net=host
–name student-provider
–mount type=bind,source=/xuyang/docker/apps,target=/xuyang/docker/apps
3f4154a6c706(jre镜像的id)
进入容器
docker exec -it 容器ID或容器名 /bin/sh
进入jar包所在位置,运行项目
java -jar jia包名
我们最后要把我们所用的容器制作成一个镜像,然后一键启动所有容器,这才是最终把我们的springcloud项目部署完成
可以使用Dockerfile(或Maven)构建镜像,然后使用docker命令操作容器,例如docker run、docker stop等。然而,使用微服务架构的应用系统一般包含若干个微服务,每个微服务一般都会部署多个实例。如果每个微服务都要手动启停,那么效率之低、维护量之大可想而知。这时就需要使用Docker Compose了
使用docker-compose启动镜像
首先我们需要更改添加我们各个微服务的pom配置,添加我们compose启动所需依赖
<!-- Docker maven plugin -->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>1.0.0</version>
<configuration>
<imageName>simon/${project.artifactId}:${project.version}</imageName>
<!--<dockerDirectory>src/main/docker</dockerDirectory>-->
<forceTags>true</forceTags>
<baseImage>java</baseImage>
<!--安装镜像所需要的软件-->
<runs>
<!--同步 /etc/apt/sources.list 和 /etc/apt/sources.list.d 中列出的源的索引,这样才能获取到最新的软件包-->
<run>["apt-get","update"]</run>
<!--安装netcat-->
<run>["apt-get","-y","install","netcat"]</run>
</runs>
<entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.jar</include>
</resource>
</resources>
</configuration>
</plugin>
然后我们需要配置Docker Compose.yml文件,Docker Compose 文件使用格式版本需要与Docker版本对应可在官网内查找
https://docs.docker.com/compose/compose-file/compose-file-v2/#compose-and-docker-compatibility-matrix
创建compose-test目录,进入目录再改目录下创建文件
mkdir compose-test;cd compose
vim docker-compose.yml
# docker当前对应的Compose版本
version: '3'
# 容器组
services:
# 镜像容器服务标识
web:
# 指定构建镜像上下文的目录,“.”当前目录
build: .
# 映射容器的端口
ports:
- "8888:8888"
然后我们有多少个微服务就应该配置多少个服务
version: '3'
services:
eureka-server:
image: apps/eureka-server
ports:
- "2001:2001"
service-feign:
image: dan/service-feign
ports:
- "4001:4001"
links:
- eureka-server
最后执行命令启动镜像:
docker-compose up
所遇BUG
1、如果你的springcloud项目有公共项目,那么是不需要打包的,如果要打包,那么别加
<build>
<plugins>
<!--添加maven插件-->
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<!--添加自己的启动类路径!-->
<mainClass>com.javaxl.microservicestudentproviderhystrix.MicroserviceStudentProviderHystrixApplication</mainClass>
</configuration>
<executions>
<execution>
<goals>
<!--可以把依赖的包都打包到生成的Jar包中-->
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
不然你其他依赖它的项目都会报错
还有如果其他依赖它的项目打包不了,可以先把父工程打包,然后再clear一下conmon
2、当你的本地项目都能连接上mysql容器数据库时,当时打成jar就一直报错
比如:Cannot determine embedded database driver class for database type NONE
这种一看就根数据库配置有关的错误,那么前往别相信网上的解决方案,你直接打开你的jar包文件,看看是不是application.yml文件没有打包上来
如果是你可以选择手动copy上来,也可以选择用配置中心管理文件,全部重新打一个jar包
end…