網站首頁 編程語言 正文
前言
從安裝docker到多種方式打包發布,編譯,鏡像,容器等問題,遇到種種問題,終于不負所望,一步步解決,本文我會比較大跨度的來說明一切解決辦法。
第一:環境
1.虛擬機安裝的centos7。
2.docker已安裝好,不會的可以參看我的docker安裝文章。
3。搞一個很簡單的springboot項目即可,先搞定發布編譯再說。
第二:開始描述從搞項目到docker發布:
1.springboot項目代碼:
層次圖:
哈哈,紅叉叉忽略就行了,我的環境問題,無所謂。
代碼:pom.xml
4.0.0 org.springframework.boot spring-boot-starter-parent2.2.0.BUILD-SNAPSHOT com.king springdocker 0.0.1-SNAPSHOT springdocker Demo project for Spring Boot UTF-8 UTF-8 springdemo 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat provided org.springframework.boot spring-boot-starter org.springframework.boot spring-boot-starter-test test org.junit.vintage junit-vintage-engine junit junit org.springframework.boot spring-boot-maven-plugin com.spotify docker-maven-plugin 0.4.3 ${docker.image.prefix}/${project.artifactId} src/main/docker / ${project.build.directory} ${project.build.finalName}.jar spring-snapshots Spring Snapshots https://repo.spring.io/snapshot true spring-milestones Spring Milestones https://repo.spring.io/milestone spring-snapshots Spring Snapshots https://repo.spring.io/snapshot true spring-milestones Spring Milestones https://repo.spring.io/milestone
2:Dockerfile文件
FROM java:8 VOLUME /tmp ADD springdocker-0.0.1-SNAPSHOT.jar app.jar RUN sh -c 'touch /app.jar' ENV JAVA_OPTS="" ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
文件解釋:
VOLUME指定了臨時文件目錄為/tmp。其效果是在主機/var/lib/docker目錄下創建了一個臨時文件,并鏈接到容器的/tmp。改步驟是可選的,
如果涉及到文件系統的應用就很有必要了。/tmp目錄用來持久化到 Docker 數據文件夾,因為 Spring Boot 使用的內嵌 Tomcat 容器默認使用/tmp作為工作目錄
項目的 jar 文件作為 “app.jar” 添加到容器的
ENTRYPOINT執行項目 app.jar。為了縮短Tomcat 啟動時間,添加一個系統屬性指向 “/dev/urandom” 作為 Entropy Source
3:其余代碼:
package com.king.springdocker.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @RestController @RequestMapping(value="/demo") public class helloController { @RequestMapping(value="/hello") public String hello() { return "hello king!!!!!!"; } } ========applicationProperties======== server.port=80 server.servlet.context-path=/king ============================= package com.king.springdocker; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class SpringdockerApplication { public static void main(String[] args) { SpringApplication.run(SpringdockerApplication.class, args); } } =====================================
第三:
1.xhell進入服務器,我是在/home/下創建文件夾king,本地用開發工具將項目打包,將所打jar包和Dockerfile,放入king目錄下。如圖所示:
2.執行如下命令:
docker build -t hellodocker .
命令解釋:hellodocker名字隨你喜歡,鏡像名自己起,-t就是代表要構建的鏡像tag。
不要忘記點,點是代表是在當前目錄,也就是現在Dockerfile文件所在的目錄。
[root@localhost king]# docker build -t hellodocker . Sending build context to Docker daemon 17.36MB Step 1/6 : FROM java:8 8: Pulling from library/java 5040bd298390: Pull complete fce5728aad85: Pull complete 76610ec20bf5: Pull complete 60170fec2151: Pull complete e98f73de8f0d: Pull complete 11f7af24ed9c: Pull complete 49e2d6393f32: Pull complete bb9cdec9c7f3: Pull complete Digest: sha256:c1ff613e8ba25833d2e1940da0940c3824f03f802c449f3d1815a66b7f8c0e9d Status: Downloaded newer image for java:8 ---> d23bdf5b1b1b Step 2/6 : VOLUME /tmp ---> Running in a6293dd37995 Removing intermediate container a6293dd37995 ---> 08f10f02092e Step 3/6 : ADD springdocker-0.0.1-SNAPSHOT.jar app.jar ---> c4eaf809b297 Step 4/6 : RUN sh -c 'touch /app.jar' ---> Running in 6c8a30b4220f Removing intermediate container 6c8a30b4220f ---> dba5ee5d2d27 Step 5/6 : ENV JAVA_OPTS="" ---> Running in 25f5b705eb27 Removing intermediate container 25f5b705eb27 ---> e1982350619d Step 6/6 : ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"] ---> Running in f98b4cc2f63b Removing intermediate container f98b4cc2f63b ---> 1d881201c9c5 Successfully built 1d881201c9c5 Successfully tagged hellodocker:latest
3.docker images,查看如下圖:
hellodocker成功出現。現在開始執行,打開瀏覽器,ip端口地址訪問,哎呦喂,不行哦,看下咋回事。
發現原來是我開啟的是80端口,所以說網上各種教程例子,看多了容易照搬,還是自己思考好。
改為:docker run -d -p 80:80 hellodocker。
嗯,重新訪問地址,好,搞定,成功打印:hello king!!!!!!
第四:各種錯誤教訓集合。
之前網上找資料,這個博客,那個博客,結果呢,不是這種就是那種錯,哎,也怨不得別人,誰能說那么詳細呢。總結下:
錯誤一:Dockerfile文件為:
FROM frolvlad/alpine-oraclejdk8:slim VOLUME /tmp ADD springdocker-0.0.1-SNAPSHOT.jar app.jar RUN sh -c 'touch /app.jar' ENV JAVA_OPTS="" ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
報錯如下:
Sending build context to Docker daemon ?17.36MB
Step 1/6 : FROM frolvlad/alpine-oraclejdk8:slim
pull access denied for frolvlad/alpine-oraclejdk8, repository does not exist or may require 'docker login'
也是無語了,FROM換了好多沒搞定,又是搞各種鏡像,又是配置的,最后反正是改為:FROM java:8,搞定了,這個呢,看下docker命令介紹,好好理解下用法:
docker概念
1、docker:最早是dotCloud公司出品的一套容器管理工具,但后來Docker慢慢火起來了,連公司名字都從dotCloud改成Docker。
2、dockerfile:它是Docker鏡像的描述文件,可以理解成火箭發射的A、B、C、D……的步驟。
3、docker鏡像:通過Dockerfile做出來的,包含操作系統基礎文件和軟件運行環境,它使用分層的存儲方式。
4、docker容器:是運行起來的鏡像,簡單理解,Docker鏡像相當于程序,容器相當于進程。
dockerfile指令
Dockerfile由多條指令組成,每條指令在編譯鏡像時執行相應的程序完成某些功能,由指令+參數組成,以逗號分隔,#作為注釋起始符,雖說指令不區分大小寫,但是一般指令使用大些,參數使用小寫
錯誤2:
之前還用過將項目整體放到服務器,然后用命令:mvn package docker:build,去打包編譯,結果報錯,其實也是由于Dockerfile的from來源不對。報錯如下:
原文鏈接:https://www.cnblogs.com/emperorking/articles/11244253.html
相關推薦
- 2022-11-10 rust延遲5秒鎖屏的實現代碼_相關技巧
- 2022-09-16 C#中C/S端實現WebService服務_C#教程
- 2022-06-18 Python周期任務神器之Schedule模塊使用詳解_python
- 2023-05-23 Numpy中扁平化函數ravel()和flatten()的區別詳解_python
- 2022-04-21 Tomcat解決catalina.out文件過大的問題_Tomcat
- 2022-10-05 C語言各種符號的使用介紹下篇_C 語言
- 2023-04-19 SQLSERVER?的?truncate?和?delete?區別解析_MsSql
- 2022-11-30 Cenots7?離線安裝部署PostgreSQL?的詳細過程_PostgreSQL
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支