docker部署springcloud项目

docker部署springcloud

上篇博客docker网络配置已经教我们如何打jar部署成功一个eureka了,不知道如何部署的看我上篇博客:https://blog.csdn.net/qq_43517653/article/details/103389057

今天就主要分享一下如何更改连接数据库的配置,也就是我们部署的项目是不能依赖本地数据库的,应该是连接我们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…

发布了142 篇原创文章 · 获赞 909 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/qq_43517653/article/details/103721453