Java 0、基于Idea和Docker的SprintBoot项目一键化部署实现 “JDK 11版“

1、参考环境

  1. 阿里云服务器一台(CentOS 8)
  2. Idea开发环境软件(2020.2.3)

2、SSH部署服务器

标注:ssh root@ip -p port

2.1 Docker安装

Docker官方文档:前往查看

2.2 远程访问Docker

2.2.1 配置文件
vim /usr/lib/systemd/system/docker.service

添加的内容:-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
在这里插入图片描述

2.2.2 配置生效
systemctl daemon-reload
systemctl restart docker
2.2.3 验证是否成功
curl http://localhost:2375/version

在这里插入图片描述

2.2.4 配置服务器的防火墙

阿里云控制平台防火墙和CentOS 的防火墙两种:

firewall-cmd --zone=public --add-port=2375/tcp --permanent 
firewall-cmd --reload
firewall-cmd --zone=public --list-ports

在这里插入图片描述

2.2.5 远程测试

测试返回的有参数即可!

curl http://ip:2375/version

2.3 配置国内加速服务

阿里云加速服务:前往查看

3、创建SpringBoot项目

参考博客:前往查看
标注:推荐使用Brew安装Maven:Brew命令安装

4、配置Idea的Docker插件

4.1 安装Docker插件

在这里插入图片描述

4.2 配置Docker参数

提示:更改IP就可以了
在这里插入图片描述

4.3 Docker操作窗口

在这里插入图片描述

5、配置POM文件

5.1 添加配置信息

注意点

  1. baseImage的指定(java的版本)
  2. dockerHost的指定(部署的服务器)
  3. javax.activation的依赖添加(jdk11删除的包)
<build>
        <finalName>${project.artifactId}</finalName>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>

            <!-- 跳过单元测试 -->
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>

            <!--使用docker-maven-plugin插件-->
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <!--将插件绑定在某个phase执行-->
                <executions>
                    <execution>
                        <id>build-image</id>
                        <!--用户只需执行mvn package ,就会自动执行mvn docker:build-->
                        <phase>package</phase>
                        <goals>
                            <goal>build</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <!--指定生成的镜像名-->
                    <imageName>${project.artifactId}</imageName>
                    <!--指定标签-->
                    <imageTags>
                        <imageTag>latest</imageTag>
                    </imageTags>
                    <!--指定基础镜像jdk11-->
                    <baseImage>openjdk:11-jdk</baseImage>
                    <!--镜像制作人本人信息-->
                    <maintainer>192119741@qq.com</maintainer>
                    <!--切换到ROOT目录-->
                    <workdir>/ROOT</workdir>
                    <cmd>["java", "-version"]</cmd>
                    <entryPoint>["java", "-jar", "/${project.build.finalName}.jar"]</entryPoint>
                    <!--指定远程 docker api地址-->
                    <dockerHost>http://139.224.30.102:2375</dockerHost>
                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <!--jar 包所在的路径  此处配置的 即对应 target 目录-->
                            <directory>${project.build.directory}</directory>
                            <!--用于指定需要复制的文件 需要包含的 jar包 ,这里对应的是 Dockerfile中添加的文件名 -->
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>javax.activation</groupId>
                        <artifactId>javax.activation-api</artifactId>
                        <version>1.2.0</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

5.2 Maven打包上传

在这里插入图片描述

6 项目容器启动

6.1 查看容器

docker images

在这里插入图片描述

6.2 启动容器

注意:当更改为:-p 80:8080,这样访问时就可以默认80端口访问了

docker run -di --name contract-manage -p 8080:8080 contract-manage

在这里插入图片描述

6.3 Docker窗口查看启动日志

在这里插入图片描述

6.4 远程访问

http://ip:port/

在这里插入图片描述

7 踩过的坑

  1. 国内服务器需要配置Docker的加速服务

  2. Docker容器间默认数据不共享问题:ip link 网桥 compose这四种方法
    最终采用的是业务部署在另一个服务器上(由于Docker部署了MySql、redis、ES、FastDFS这些容器)

  3. docker-maven-plugin里jdk11的声明方式

  4. jdk11相比jdk8缺少javax.activation依赖

8、自动化部署思考

存在问题:每次需要重新建立启动容器来应对内容的更新!
问题思考:既然已经一键化打包了,有办法能解决Docker自动监控镜像更新然后加载新的内容这种方式吗?
解决思路:Jenkins 那一套通过git、maven等来实现,后续再了解吧

相关项目参考contract-manage
注意:该项目的设计有欠安全方面的思考!仅作为功能实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值