zoukankan      html  css  js  c++  java
  • 在CentOS下的docker容器中部署spring boot应用的两种方式

     

     

     

    我们通常在 windows 环境下开发 Java,而通常是部署在Linux的服务器中,而CentOS通常是大多数企业的首选,基于Docker的虚拟化容器技术,多数Java应用选择这种方式部署服务。本文章通过模拟这种场景部署一个Java的spring boot应用。

        

    2. 环境

                安装Docker的CentOS 7虚拟机,虚拟机安装和使用可以参照:https://www.linuxidc.com/Linux/2014-10/108013.htm

           3. 工具

        远程连接服务器工具:xshell5,xftp5,xshell可以通过命令远程操作Linux服务器,跟终端输入命令效过一样,xftp可以远程传输文件。这两款工具的安装和使用可以百度搜索

     下载安装

    4.操作过程

      1. xshell5 和 xftp5 配置

          Xshell:

           打开xshell主面板,点击新建,弹出会话配置面板,按如下填上连接信息

           

           填完连接信息之后,点击连接,输入连接linux的用户名和密码即可登录虚拟机系统。xshell出现一个命令行窗口

           

           可在命令行窗口输入Linux命令操作该Linux系统。如果连接不上请检查CentOS防火墙有没有开放22端口(一般默认开放),有没有运行

           sshd服务。

           XFTP5:

              打开xftp主面板,文件下新建一个会话,如图配置相关连接信息,注意协议选择 sftp和22端口

              

           打开选项卡【选项】,勾选“使用UTF-8”编码,迁移类型选择 Binary,(注意这里不能选择ASCII,这是一个大坑,选择该项传输jar包时会丢失class文件,

     编者曾试过这血的教训),最后点击确定建立连接(配置好之后重启一下该工具,不重启可能某些配置不起作用),这样我们就可以通过鼠标拖曳的方式传输文件了。

        2. 创建一个 spring-boot 应用,接口可以返回“Hello world”信息,制定服务端口8040

            

        3. 服务部署

           3.1 以maven插件的方式部署

                   3.1.1.确保docker服务开启和防火墙开放2375端口

                      相关命令

    #查看端口 成功返回yes
    firewall-cmd --query-port=2375/tcp
    #查看防火墙状态
    systemctl status firewalld.serice
    #开启防火墙
    systemctl start firewalld.services
    #解锁防火墙进程
    systemctl unmask firewalld.service
    #开放服务端口firewall-cmd --add-port=2375/tcp

                         3.1.2.在工程maven中加入如下插件,并填写相关配置信息

     <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
            <docker.image.prefix>springboot</docker.image.prefix>
        </properties>

                       

    <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>1.0.0</version>
                    <configuration>
                        <dockerDirectory>src/main/docker</dockerDirectory>
                        <dockerHost>http://192.168.42.210:2375</dockerHost>
                        <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                        <imageTags>
                            <imageTag>${project.version}</imageTag>
                            <imageTag>latest</imageTag>
                        </imageTags>
                        <entryPoint>["java","-jar","/${project.build.finalName}.mvnjar"]</entryPoint>
                        <exposes>8040</exposes>
                        <resources>
                            <resource>
                                <targetPath>/</targetPath>
                                <directory>${project.build.directory}</directory>
                                <include>${project.build.finalName}.jar</include>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>

                           3.1.3 在 工程 src/main/docker 目录下新建Dockerfile 文件

        

    FROM java
    VOLUME /tmp
    ADD hello-world-0.0.1-SNAPSHOT.jar app.jar
    RUN bash -c 'touch /app.jar'
    ENV JAVA_OPTS=""
    ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]

                             3.1.4 项目完成后,在控制台执行 在pom.xml根目录下执行

                                        

    mvn clean package docker:build

                           3.1.5 执行完命令后,在xshell中查看docker镜像,会出现两个springboot/hello-word 的镜像(其实是同一个)

                   

                            接着,我们在xshell中执行启动命令

    sudo docker run -d -p 8040:8040 --name hello-world 7c4a665ed17d

                           我们可以执行 命令查看是否启动成功

    sudo docker ps

           

               我们可以执行命令查看日志:

               

    sudo docker logs hello-world

              3.1.6 我们在windows主机访问该服务接口(参照3.1.1开放8040端口)

       

              3.2 通过 本地构建的方式部署应用。

                   3.2.1 首先我们将打包好的 jar 包和Dockerfile文件通过xftp工具远程传输到CentOS上放在同一个目录中

                   3.2.2 通过命令cd到该目录执行如下命令构建镜像

    sudo docker build -t helloworld .

                          注意不要漏掉最后的“.",表市当前路径,helloworld是镜像名

                  3.3.3 然后通过该镜像可构建我们的容器、开放服务端口,方法同3.1中的操作

           PS:测试过程中可能使用到的命令

    #关闭容器
    sudo docker stop 容器名|容器ID
    #查看运行的容器
    sudo docker ps
    # 查看所有的容器,包括停止的
    sudo docker ps -a
    # 删除容器
    sudo docker rm 容器名|容器ID
    #删除镜像
    sudo docker rmi 镜像名:标签 | 镜像ID

               

  • 相关阅读:
    基于Maven的MyBatis Generator逆向工程
    JQuery对象调用reset方法:Uncaught TypeError: $(...).reset is not a function
    死锁编码及定位分析
    线程池的简介及底层原理
    转载:Mysql8.0忘记 root 密码, 如何修改?
    synchronized 和 Lock 有什么区别?
    java 中的阻塞队列及生产者-消费者中的简单应用
    java 中 CountDownLatch、CyclicBarrier 和 Semaphore 的简单使用
    java中的公平锁、非公平锁、可重入锁、递归锁、自旋锁、独占锁和共享锁
    Java 集合类的线程安全问题及解决方法
  • 原文地址:https://www.cnblogs.com/yumiaoxia/p/10076214.html
Copyright © 2011-2022 走看看