將自己的SpringBoot應用打包發布到Linux下Docker中


將自己的SpringBoot應用打包發布到Linux下Docker中

1. 環境介紹

  • Java開發環境:Windows10 64位

maven3.6

jdk1.8

IDEA2018.3

  • 服務器:Linux Centos7 64位
  • Docker版本:Docker version 1.13.1, build b2f74b2/1.13.1

2. 開始前的准備

2.1 開啟docker遠程連接

  1. 搞定防火牆先

    這里是將centos的防火牆關閉了,只是為了方便演示,如果要保障安全,可以在部署完后打開防火牆,並開啟特定端口:

    以80端口為例
    添加
    firewall-cmd --zone=public --add-port=80/tcp --permanent (--permanent永久生效,沒有此參數重啟后失效)
    重新載入
    firewall-cmd --reload
    查看
    firewall-cmd --zone= public --query-port=80/tcp
    刪除
    firewall-cmd --zone= public --remove-port=80/tcp --permanent

    關閉防火牆
    systemctl stop firewalld
    開機禁用防火牆
    systemctl disable firewalld
    
  2. 開放docker遠程訪問

    我在樹莓派上這樣配置並不行,暫時沒找到解決方案

    vi命令編輯docker啟動:
    vi /usr/lib/systemd/system/docker.service
    修改ExecStart處的參數
    -H tcp://0.0.0.0:2375  -H unix:///var/run/docker.sock \
    

有些朋友可能需要追加這個參數(將上面那句話改成下面這句話):
/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock \


我的配置修改后是這樣子的:

> <font color="red">注意這只是我截取的一小塊,並不是全部,更不要把我的文件復制過去</font>

~~~bash
[Unit]
Description=Docker Application Container Engine
Documentation=http://docs.docker.com
After=network.target
Wants=docker-storage-setup.service
Requires=docker-cleanup.timer

[Service]
Type=notify
NotifyAccess=main
EnvironmentFile=-/run/containers/registries.conf
EnvironmentFile=-/etc/sysconfig/docker
EnvironmentFile=-/etc/sysconfig/docker-storage
EnvironmentFile=-/etc/sysconfig/docker-network
Environment=GOTRACEBACK=crash
Environment=DOCKER_HTTP_HOST_COMPAT=1
Environment=PATH=/usr/libexec/docker:/usr/bin:/usr/sbin
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock \
       --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current \
       --default-runtime=docker-runc \
       --exec-opt native.cgroupdriver=systemd \
       --userland-proxy-path=/usr/libexec/docker/docker-proxy-current \
       --init-path=/usr/libexec/docker/docker-init-current \
~~~



3. 重啟docker服務

```bash
systemctl daemon-reload 
systemctl restart docker
  1. 驗證是否可以訪問

    如果返回一個json字符串表示可以正常訪問,不成功會報錯
    [root@bogon ~]# curl http://localhost:2375/info
    {"ID":"SXMD:MGRC:RVMF:ZTRM:2QBG:RUG6:RG7Y:YARM:TL5I:GM....................
    
  2. 也可以在windows下通過瀏覽器訪問IP+端口號

    如果curl可以訪問但是windows無法訪問,檢查一下防火牆關了沒有

2.2 新建SpringBoot項目

  1. 如圖所示

  1. 這里只用了一個web插件

  2. 項目路徑為E:\IdeaProjects\Tea\docker-abc

  3. 新建kim.nzxy.dockerabc.controller.DemoController

    package kim.nzxy.dockerabc.controller;
    
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    /**
     * @Author: Xiaoyan
     * @Date: 2019/3/29 16:08
     */
    @RestController
    public class DemoController {
        @RequestMapping("/")
        public String abc() {
            return "abc";
        }
    }
    
  4. SpringBoot運行結果如下:

3. 開始構建我們的Springboot應用

3.1 在pom.xml中添加Maven插件

第一個是用來創建docker容器用的

第二個如果不加上的話無法運行jar包

<plugins>
    <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
    <!-- 添加docker-maven-plugin插件 -->
    <plugin>
        <groupId>com.spotify</groupId>
        <artifactId>docker-maven-plugin</artifactId>
        <version>1.2.0</version>
        <configuration>
            <!-- 配置docker server 位置,否則默認127.0.0.1 -->
            <dockerHost>http://192.168.0.169:2375</dockerHost>
            <!-- imageName冒號前面為容器名,后面是容器版本號 -->
            <imageName>${project.artifactId}:${project.version}</imageName>
            <!-- Dockerfile 文件位置 -->
            <dockerDirectory>${project.basedir}</dockerDirectory>
            <resources>
                <resource>
                    <targetPath>/</targetPath>
                    <directory>${project.build.directory}</directory>
                    <include>${project.build.finalName}.jar</include>
                </resource>
            </resources>
        </configuration>
    </plugin>
</plugins>

3.2 新建Dockerfile文件

位置:

內容:(這里與圖不符,圖中少了個‘’-‘’)

FROM openjdk:8
VOLUME /tmp
# docker-abc-0.0.1-SNAPSHOT.jar為maven項目project.artifactId-project.version
ADD docker-abc-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8761
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

如果新建的沒錯的話,IDEA是可以識別的

3.3 配置運行方式

4. 構建-運行

4.1 構建

這里就不文字解釋了,點擊運行等它完成就行了

4.2 運行我們的項目

以上如果報錯了請檢查步驟是否正確,或者Maven配置是否有問題

現在轉移陣地到Centos上:

  1. 查看是否生成成功

    吶,我們構建的就是那個叫docker-abc的東西啦

    如果成功這里將會生成一個
    [root@bogon ~]# docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    docker-abc          0.0.1-SNAPSHOT      44eb924f47a2        7 minutes ago       659 MB
    docker.io/openjdk   8                   b8d3f94869bb        33 hours ago        625 MB
    
  2. 啟動自己的項目

    運行成功
    [root@bogon ~]# docker run -d -p 8080:8080 44eb924f47a2
    30317d2daaf2a76e9fc4cb9bf08a102ecd84db34f790f73d8e8cebb0c4bcfd0c
    
  3. 測試成果:


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM