將自己的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遠程連接
-
搞定防火牆先
這里是將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 -
開放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
-
驗證是否可以訪問
如果返回一個json字符串表示可以正常訪問,不成功會報錯 [root@bogon ~]# curl http://localhost:2375/info {"ID":"SXMD:MGRC:RVMF:ZTRM:2QBG:RUG6:RG7Y:YARM:TL5I:GM.................... -
也可以在windows下通過瀏覽器訪問IP+端口號
如果curl可以訪問但是windows無法訪問,檢查一下防火牆關了沒有

2.2 新建SpringBoot項目
- 如圖所示

-
這里只用了一個web插件

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

-
新建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"; } } -
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上:
-
查看是否生成成功
吶,我們構建的就是那個叫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 -
啟動自己的項目
運行成功 [root@bogon ~]# docker run -d -p 8080:8080 44eb924f47a2 30317d2daaf2a76e9fc4cb9bf08a102ecd84db34f790f73d8e8cebb0c4bcfd0c -
測試成果:

