目錄
一、dockerfile概述
1、dockerfile基礎
2、Docker執行Dockerfile的大致流程
3、映像、容器、dockerfile的關係式
二、dockerfile常用保留字
1、FROM
2、MAINTAINER與LABEL
3、RUN
4、EXPOSE
5、WORKDIR
6、USER
7、ENV
8、ADD
9、COPY
10、VOLUME
11、CMD
12、ENTRYPOINT
三、使用dockerfile构建一个自带jdk的centos
1、下载jdk并上传至linux
3、编写Dockerfile
3、构建Dockerfile
4、运行一下试试
四、虚悬镜像
1、制造一个虚悬镜像
五、docker运行springboot项目
1、准备一个springboot项目
2、手动构建jar包
4、构建镜像
5、运行容器
6、访问测试
首頁 Java java教程 怎麼使用dockerfile部署springboot項目

怎麼使用dockerfile部署springboot項目

May 15, 2023 pm 11:55 PM
springboot dockerfile

一、dockerfile概述

Dockerfile是用來建構Docker映像的文字文件,是由一條條建構鏡像所需的指令和參數所構成的腳本。

1、dockerfile基礎

1:每個保留字指令都必須為大寫字母且後面要跟隨至少一個參數
2:指令按照從上到下,順序執行
3:#表示註解
4:每個指令都會建立一個新的映像層並對映像進行提交

2、Docker執行Dockerfile的大致流程

(1)docker從基礎映像執行一個容器
(2)執行一條指令並對容器作出修改
(3)執行類似docker commit的操作提交一個新的映像層
(4 )docker再基於剛提交的映像運行一個新容器
(5)執行dockerfile中的下一指令直到所有指令都執行完成

怎麼使用dockerfile部署springboot項目

3、映像、容器、dockerfile的關係式

從應用軟體的角度來看,Dockerfile、Docker映像與Docker容器分別代表軟體的三個不同階段,

  • Dockerfile是軟體的原料

  • Docker鏡像是軟體的交付品

  • #Docker容器則可以認為是軟體映像的運行態,也即依照映像運行的容器實例
    Dockerfile面向開發,Docker映像成為交付標準,Docker容器則涉及部署與維,三者缺一不可,合力充當Docker體系的基石。

1 Dockerfile,需要定義一個Dockerfile,Dockerfile定義了流程所需的一切。 Dockerfile涉及的內容包括執行程式碼或檔案、環境變數、依賴套件、執行階段環境、動態連結庫、作業系統的發行版、服務行程和核心行程(當應用程式需要和系統服務和核心行程打交道,這時需要考慮如何設計namespace的權限控制)等等;
2 Docker映像,在用Dockerfile定義一個檔案之後,docker build時會產生一個Docker映像,當執行Docker映像時會真正開始提供服務;
3 Docker容器,容器是直接提供服務的。

基本建置步驟:(1)編寫Dockerfile檔案(2)docker build指令建構映像(3)docker run依映像運行容器實例

二、dockerfile常用保留字

1、FROM

基礎鏡像,目前新鏡像是基於哪個鏡像的,指定一個已經存在的鏡像作為模板,第一個命令必須是FROM

# 命令格式
FROM [--platform=<platform>] <image> [AS <name>]
FROM [--platform=<platform>] <image>[:<tag>] [AS <name>]
FROM [--platform=<platform>] <image>[@<digest>] [AS <name>]
# 实例:
FROM centos:7.0
登入後複製

2、MAINTAINER與LABEL

鏡像維護者的姓名和郵件地址

# 命令格式
MAINTAINER <name>
登入後複製

該指令已經廢棄了。建議使用LABEL,它可以設定您需要的任何元資料。

# 命令格式
LABEL <key>=<value> <key>=<value> <key>=<value> ...

LABEL "com.example.vendor"="ACME Incorporated"
LABEL com.example.label-with-value="foo"
LABEL version="1.0"
LABEL description="This text illustrates \
that label-values can span multiple lines."
登入後複製

3、RUN

容器建置時需要執行的指令,RUN是在docker build時執行

(1)shell格式(常用)

# <命令行命令> 等同于,在终端操作的shell命令
RUN <命令行命令>
登入後複製

(2)exec格式

# 录入:RUN ["./test.php", "dev", "offline"] 等价于RUN ./test.php dev offline
RUN ["可执行文件", "param1", "param2"]
登入後複製

4、EXPOSE

目前容器對外暴露出的連接埠

EXPOSE 80
EXPOSE 80/tcp
EXPOSE 80/udp
登入後複製

5、WORKDIR

#指定在建立容器後,終端預設登陸的進來工作目錄,一個落腳點

WORKDIR /path/to/workdir
登入後複製

6、USER

指定該映像以什麼樣的使用者去執行,如果都不指定,預設是root

# 命令格式
USER <user>[:<group>]
USER <UID>[:<GID>]

# 实例
USER cxf
登入後複製

7、ENV

用於在建構鏡像過程中設定環境變數

# 命令格式
ENV <key>=<value> ...

# 实例
ENV MY_PATH /usr/mytest
#这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量,
#比如:WORKDIR $MY_PATH
登入後複製

8、ADD

將宿主機目錄下的檔案拷貝進鏡像且會自動處理URL和解壓tar壓縮包

ADD a.tar.gz /mydir/
登入後複製

9、COPY

#類似ADD,拷貝檔案和目錄到鏡像中。
將從建置上下文目錄中<來源路徑> 的檔案/目錄複製到新的一層的映像內的<目標路徑> 位置

COPY src dest
COPY ["src", "dest"]
<src源路径>:源文件或者源目录
<dest目标路径>:容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建。
登入後複製

10、VOLUME

容器資料卷,用於資料保存和持久化工作

11、CMD

指定容器啟動後的要乾的事情

注意! Dockerfile 中可以有多個 CMD 指令,但只有最後一個生效,CMD 會被 docker run 之後的參數取代

CMD ["executable","param1","param2"]
CMD ["param1","param2"]
CMD command param1 param2

# 覆盖默认的CMD,不会启动tomcat
docker exec -it comcat /bin/bash
登入後複製

CMD是在docker run 時執行。 RUN是在 docker build時運行。

12、ENTRYPOINT

也是用來指定一個容器啟動時要執行的指令。

類似於CMD 指令,但是ENTRYPOINT不會被docker run後面的指令覆寫,而且這些指令列參數會被當作參數送給ENTRYPOINT 指令指定的程式

# 命令格式
ENTRYPOINT ["executable", "param1", "param2"]
ENTRYPOINT command param1 param2
登入後複製

ENTRYPOINT可以和CMD一起用,一般是變參才會使用CMD ,這裡的CMD 等於是在給ENTRYPOINT 傳參。
當指定了ENTRYPOINT後,CMD的含義就發生了變化,不再是直接運行其命令而是將CMD的內容作為參數傳遞給ENTRYPOINT指令,他兩個組合會變成:

FROM ubuntu
ENTRYPOINT ["top", "-b"] # 定参
CMD ["-c"] # 变参
# 最终执行top -c,而如果使用命令行指定 -H,会替换CMD的-c
登入後複製

在執行docker run的時候可以指定ENTRYPOINT 運行所需的參數。如果 Dockerfile 中如果存在多個 ENTRYPOINT 指令,僅最後一個生效。

三、使用dockerfile构建一个自带jdk的centos

1、下载jdk并上传至linux

2、编写Dockerfile

# 注意大写字母D
vi Dockerfile
登入後複製
# 指定基础镜像,需要保证本地有这个镜像
FROM centos
# 指定作者邮箱
MAINTAINER cxf
# 工作目录
ENV MYPATH /usr/local
WORKDIR $MYPATH
# 准备工作
RUN cd /etc/yum.repos.d/
RUN sed -i &#39;s/mirrorlist/#mirrorlist/g&#39; /etc/yum.repos.d/CentOS-*
RUN sed -i &#39;s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g&#39; /etc/yum.repos.d/CentOS-*
RUN yum makecache
RUN cd /usr/local
#安装vim编辑器
RUN yum -y install vim
#安装ifconfig命令查看网络IP
RUN yum -y install net-tools
#安装java8及lib库
RUN yum -y install glibc.i686
RUN mkdir /usr/local/java
#ADD 是相对路径jar,把jdk-8u351-linux-x64.tar.gz添加到容器中,安装包必须要和Dockerfile文件在同一位置
ADD jdk-8u351-linux-x64.tar.gz /usr/local/java/
#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_351
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
EXPOSE 80
CMD echo $MYPATH
CMD echo "success--------------ok"
CMD /bin/bash
登入後複製

3、构建Dockerfile

注意!本目录下只有一个Dockerfile并且包含jdk安装包

怎麼使用dockerfile部署springboot項目

# 构建新镜像命令格式 。注意,上面TAG后面有个空格,有个点
docker build -t 新镜像名字:TAG .
# 构建我们的镜像,等一会就会构建成功
docker build -t centosjava8:1.0 .

[root@localhost myfile]# docker images
REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
centosjava8                   1.0       4dbff0755585   34 seconds ago   747MB
centos                        latest    5d0da3dc9764   19 months ago    231MB
登入後複製

4、运行一下试试

docker run -it 4dbff0755585 /bin/bash

#我们发现,新的镜像携带着vim、ifconfig和java环境了!
登入後複製

四、虚悬镜像

仓库名、标签都是的镜像,俗称dangling image

1、制造一个虚悬镜像

(1)创建Dockerfile

FROM centos
CMD echo &#39;action is success&#39;
登入後複製

(2)构建

docker build .
登入後複製

(3)查看

[root@localhost xu]# docker images
REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
centosjava8                   1.0       4dbff0755585   31 minutes ago   747MB
<none>                        <none>    9818ccf3738e   19 months ago    231MB
centos                        latest    5d0da3dc9764   19 months ago    231MB

# 查看所有虚悬镜像
[root@localhost xu]# docker image ls -f dangling=true
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
<none>       <none>    9818ccf3738e   19 months ago   231MB
登入後複製

(4)删除

# 删除虚悬镜像
docker image prune
登入後複製

虚悬镜像已经失去存在价值,可以删除

五、docker运行springboot项目

1、准备一个springboot项目

编写一个测试Controller,以供测试。

@RestController
@RequestMapping
public class TestController {

    @GetMapping("/test")
    public String test(){
        return "启动成功 ===================test";
    }
}
登入後複製

2、手动构建jar包

我们使用maven package命令手动打包并上传到服务器上。

[root@localhost ~]# cd mydocker/
[root@localhost mydocker]# ll
total 17084
-rw-r--r--. 1 root root 17491177 Apr  9 14:18 demo-0.0.1-SNAPSHOT.jar
登入後複製

注!通常来说这一步可以使用jenkins自动构建。

3、编写Dockerfile

# 基础镜像使用java
FROM centosjava8:1.0
# 作者
MAINTAINER cxf
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为cxf_docker.jar
ADD demo-0.0.1-SNAPSHOT.jar /cxf_docker.jar
# 运行jar包
RUN bash -c &#39;touch /cxf_docker.jar&#39;
ENTRYPOINT ["java","-jar","/cxf_docker.jar"]
#暴露6001端口作为微服务
EXPOSE 8088
登入後複製

4、构建镜像

docker build -t mydemo:1.0 .

[root@localhost mydocker]# docker images
REPOSITORY                    TAG       IMAGE ID       CREATED          SIZE
mydemo                        1.0       7124eca083ad   26 seconds ago   764MB
centosjava8                   1.0       4dbff0755585   7 hours ago      747MB
登入後複製

5、运行容器

docker run -d -p 8088:8088 7124eca083ad
登入後複製

6、访问测试

访问服务器我们的接口,发现测试成功!

以上是怎麼使用dockerfile部署springboot項目的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1325
25
PHP教程
1272
29
C# 教程
1252
24
Springboot怎麼整合Jasypt實現設定檔加密 Springboot怎麼整合Jasypt實現設定檔加密 Jun 01, 2023 am 08:55 AM

Jasypt介紹Jasypt是一個java庫,它允許開發員以最少的努力為他/她的專案添加基本的加密功能,並且不需要對加密工作原理有深入的了解用於單向和雙向加密的高安全性、基於標準的加密技術。加密密碼,文本,數字,二進位檔案...適合整合到基於Spring的應用程式中,開放API,用於任何JCE提供者...添加如下依賴:com.github.ulisesbocchiojasypt-spring-boot-starter2. 1.1Jasypt好處保護我們的系統安全,即使程式碼洩露,也可以保證資料來源的

怎麼在SpringBoot中使用Redis實現分散式鎖 怎麼在SpringBoot中使用Redis實現分散式鎖 Jun 03, 2023 am 08:16 AM

一、Redis實現分散式鎖原理為什麼需要分散式鎖在聊分散式鎖之前,有必要先解釋一下,為什麼需要分散式鎖。與分散式鎖相對就的是單機鎖,我們在寫多執行緒程式時,避免同時操作一個共享變數產生資料問題,通常會使用一把鎖來互斥以保證共享變數的正確性,其使用範圍是在同一個進程中。如果換做是多個進程,需要同時操作一個共享資源,如何互斥?現在的業務應用通常是微服務架構,這也意味著一個應用會部署多個進程,多個進程如果需要修改MySQL中的同一行記錄,為了避免操作亂序導致髒數據,此時就需要引入分佈式鎖了。想要實現分

SpringBoot怎麼整合Redisson實現延遲隊列 SpringBoot怎麼整合Redisson實現延遲隊列 May 30, 2023 pm 02:40 PM

使用場景1、下單成功,30分鐘未支付。支付超時,自動取消訂單2、訂單簽收,簽收後7天未進行評估。訂單超時未評價,系統預設好評3、下單成功,商家5分鐘未接單,訂單取消4、配送超時,推播簡訊提醒…對於延時比較長的場景、即時性不高的場景,我們可以採用任務調度的方式定時輪詢處理。如:xxl-job今天我們採

springboot讀取檔案打成jar包後存取不到怎麼解決 springboot讀取檔案打成jar包後存取不到怎麼解決 Jun 03, 2023 pm 04:38 PM

springboot讀取文件,打成jar包後訪問不到最新開發出現一種情況,springboot打成jar包後讀取不到文件,原因是打包之後,文件的虛擬路徑是無效的,只能通過流去讀取。文件在resources下publicvoidtest(){Listnames=newArrayList();InputStreamReaderread=null;try{ClassPathResourceresource=newClassPathResource("name.txt");Input

Springboot+Mybatis-plus不使用SQL語句進行多表新增怎麼實現 Springboot+Mybatis-plus不使用SQL語句進行多表新增怎麼實現 Jun 02, 2023 am 11:07 AM

在Springboot+Mybatis-plus不使用SQL語句進行多表添加操作我所遇到的問題準備工作在測試環境下模擬思維分解一下:創建出一個帶有參數的BrandDTO對像模擬對後台傳遞參數我所遇到的問題我們都知道,在我們使用Mybatis-plus中進行多表操作是極其困難的,如果你不使用Mybatis-plus-join這一類的工具,你只能去配置對應的Mapper.xml文件,配置又臭又長的ResultMap,然後再寫對應的sql語句,這種方法雖然看上去很麻煩,但具有很高的靈活性,可以讓我們

SpringBoot怎麼自訂Redis實作快取序列化 SpringBoot怎麼自訂Redis實作快取序列化 Jun 03, 2023 am 11:32 AM

1.自訂RedisTemplate1.1、RedisAPI預設序列化機制基於API的Redis快取實作是使用RedisTemplate範本進行資料快取操作的,這裡開啟RedisTemplate類,查看該類別的源碼資訊publicclassRedisTemplateextendsRedisAccessorimplementsRedisOperations,BeanClassLoaderAware{//聲明了value的各種序列化方式,初始值為空@NullableprivateRedisSe

SpringBoot與SpringMVC的比較及差別分析 SpringBoot與SpringMVC的比較及差別分析 Dec 29, 2023 am 11:02 AM

SpringBoot和SpringMVC都是Java開發中常用的框架,但它們之間有一些明顯的差異。本文將探究這兩個框架的特點和用途,並對它們的差異進行比較。首先,我們來了解一下SpringBoot。 SpringBoot是由Pivotal團隊開發的,它旨在簡化基於Spring框架的應用程式的建立和部署。它提供了一種快速、輕量級的方式來建立獨立的、可執行

springboot怎麼取得application.yml裡值 springboot怎麼取得application.yml裡值 Jun 03, 2023 pm 06:43 PM

在專案中,很多時候需要用到一些配置信息,這些信息在測試環境和生產環境下可能會有不同的配置,後面根據實際業務情況有可能還需要再做修改。我們不能將這些設定在程式碼中寫死,最好是寫到設定檔中,例如可以把這些資訊寫到application.yml檔案中。那麼,怎麼在程式碼裡取得或使用這個位址呢?有2個方法。方法一:我們可以透過@Value註解的${key}即可取得設定檔(application.yml)中和key對應的value值,這個方法適用於微服務比較少的情形方法二:在實際專案中,遇到業務繁瑣,邏

See all articles