Dockerfile介紹及常用保留指令

從本文開始,咱們將介紹docker的另外一個技術點:dockerfile.我們來看看DockerFile相關的知識點,我們將怎麼學習?

1:DockerFile是什麼?

2:DockerFile構建過程解析

3:常用的保留字指令

4:案例及小總結。如下圖:

cbdcdda930cb5721c08c8d302eddd883.png

dockerFile是什麼?

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

dockerFile工作圖:

a78b9094af809747511b9fdd0db99374.png

構建步驟:

編寫DockerFile文件>>docker build命令構建鏡像>>docker run 鏡像運行

DcokerFile構建過程

1:DockerFile內容基礎知識

a、每條保留字指令都必須爲大寫字母且後面要跟隨至少一個參數

b、指令按照從上到下的順序執行

c、#表示註釋

d、每條指令都會創建一個新的鏡像層並對鏡像進行提交

 

Dcoker執行DockerFile的大致流程

1:docker從基礎鏡像運行一個容器

2:執行一條指令並對容器做出修改

3:執行類似docker commit的操作提交一個新的鏡像層

4:docker再基於剛提交的鏡像運行一個新容器

5:執行dockerFile中的下一條執行直到所有指令都執行完成。

DockerFile、Docker鏡像與Docker容器之間的關係:

從應用軟件的角度來看,這三者分別代表了軟件的三個不同階段:

Dockerfile:是軟件的原材料;

Docker鏡像:是軟件的交付產品;

Docker容器則可以認爲是軟件鏡像的運行狀態,也就是依照鏡像運行的容器實例。

DockerFile是面向開發,Docker鏡像成爲交付的標準,Docker容器則涉及部署與運維,三者缺一不可,合力充當了docker體系的基石。

DockerFile:需要定義餓Dockerfile,Dockerfile定義二了進程需要的一切東西。Dockerfile涉及的內容包括執行代碼或者是文件、環境變量、依賴包、運行時候環境、動態鏈接庫、操作系統的發行版、服務進程和內核進程等等;

Docker鏡像,在用Dockerfile定義一個文件之後,docker build時候會產生一個Docker鏡像,當運行Docker鏡像時會真正開始提供服務;

Docker容器,容器是直接提供服務的。

984d30948de4f00820b0fd639565f14e.png88b1433a71d6b8786758a46254cc807a.png

接着,咱們來講解DockerFile常用的保留指令。常用的指令如下圖:

c98225cba11de46056254a33834f2caf.png

參數說明:

197b527fb519bb37871578da08f663a4.png

42a1a23257e24b5c5f9b0e897a949d66.png

參數

說明

備註

FROM

基礎鏡像。當前新鏡像是基於哪個鏡像的,指定一個已經存在的鏡像作爲模板。第一條必須是from

出現位置:一般都是在dockerfile的第一行。 當前鏡像哪個基礎鏡像

MAINTAINER

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

 

RUN

75e6ebe5e27d16d11c0d4dd20dd13432.png

shell格式: RUN<命令行命令> #<命令行命令>等同於,在終端操作的shell命令。 例如:RUN yum -y install vim  exec格式: RUN["可執行文件","參數1","參數2"] #例如: #RUN   ["./test.php","dev","offline"] 等價於 RUN ./test.php dev offline

EXPOSE

當前容器隊尾暴露出的端口

 

WORKDIR

指定在創建容器後,終端默認登錄的進入工作目錄。一個落腳點

例如: docker -it ubuntu bash 進入後,pwd.可以發現是 / 的

USER

指定該鏡像以什麼樣的用戶去執行。如果不指定,默認是root

 

ENV

用來在構建鏡像過程中設置的環境變量

31f06ade6885e60e77896b27b5be3001.png

ADD

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

 

COPY

類似ADD,拷貝文件和目錄到鏡像中。將從構建上下文目錄中<源路徑>的文件/目錄   複製到新的一層鏡像內的<目標路徑>

91fbd84f4a90f083cdfe47574e78e01b.png

VOLUME

容器數據卷,用於數據保存和持久化工作

 

CMD

見下文CMD命令

CMD和RUN命令的區別: CMD是在docker run時候運行的 RUN是在docker build是運行的

ENTRYPOINT

見下文的ENTRYPOIN命令

 

CMD命令:

指定容器啓動後要乾的事情。

CMD啓動容器命令

CMD指令和RUN指令像是。也是兩種格式:shell 和exec.

b338ac2d710379d5bba63d02a487a520.png

注意:

Dockerfile中可以有多個cmd指令,但只有最後一個生效,CMD會被docker run之後的參數替換。可以參考官網Tomcat的dockerfile演示講解:

1adf467de5e43520801cdb9cc4972d1a.png

CMD會被docker run之後的參數替換演示:

我們啓動tomcat:

docker run -it  -p 8080:8080 鏡像id

這種啓動後,訪問可以正常的。因爲這種啓動後,直接就是使用了tomcat的dockerfile中的

CMD["catalina.sh","run"]的

如果我們使用以下命令:

docker run -it -p 8080:8080 鏡像id /bin/bash

這個時候,通過瀏覽器訪問,就不行了。爲什麼呢?

因爲CMD會被docker run之後的參數替換

也就是dockerfile中的CMD["catalina.sh","run"]被替換成了CMD["/bin/bash","run"]了。/bin/bash替換了catalina.sh。這樣相當於tomcat沒啓動

1aa30b26a798c770dcbfd82532439e8c.png

CMD和RUN命令的區別:

CMD是在docker run時候運行的

RUN是在docker build是運行的

ENTRYPOINT命令

80411afb12f38f2ad397140274bd84d5.png

ENTRYPOINT命令格式:

46b13ecbff9b2a92a2e13cc0a20d02c7.png5ee5d0ac5ece2092f8d167c20101d678.png

總結:

786a6675447d20fb974f773b13252271.png

大家好,我是凱哥Java(kaigejava),樂於分享,每日更新技術文章,歡迎大家關注“凱哥Java”,及時瞭解更多。讓我們一起學Java。也歡迎大家有事沒事就來和凱哥聊聊~~~

 

結束語

如操作有問題歡迎去 我的 個人博客(www.kaigejava.com)留言或者   微信公衆號(凱哥Java)留言交流哦。

 

本系列教程直通車

直通車,本系列教程已發佈文章,快速到達,《Docker學習系列》教程已經發布的內容如下:

【圖文教程】Windows11下安裝Docker Desktop

【填坑】在windows系統下安裝Docker Desktop後遷移鏡像位置

【Docker學習系列】Docker學習1-docker安裝

【Docker學習系列】Docker學習2-docker設置鏡像加速器

【Docker學習系列】Docker學習3-docker的run命令幹了什麼?docker爲什麼比虛擬機快?

【Docker學習系列】Docker學習2-常用命令之啓動命令和鏡像命令

【Docker學習系列】Docker學習系列3:常用命令之容器命令

【Docker學習系列】Docker學習4-常用命令之重要的容器命令

【Docker教程系列】Docker學習5-Docker鏡像理解

【Docker教程系列】Docker學習6-Docker鏡像commit操作案例

【Docker學習教程系列】7-如何將本地的Docker鏡像發佈到阿里雲

【Docker學習教程系列】8-如何將本地的Docker鏡像發佈到私服?

「Docker學習系列教程」9-Docker容器數據卷介紹

「Docker學習系列教程」10-Docker容器數據卷案例

Docker學習11-Docker常規方式安裝軟件

「Docker學習系列教程」基礎篇小總結及高級篇預告

docker高級篇1-dockeran安裝mysql主從複製

docker高級篇2-分佈式存儲之三種算法

docker高級篇第二章-分佈式存儲之實戰案例:3主3從redis集羣擴容配置

docker高級篇第二章-分佈式存儲之實戰案例:主從容錯切換遷移案例

Docker高級:Redis集羣實戰!4主4從縮容到3主3從,怎麼處理?

 

 

 

【Docker學習教程系列彙總】筆記及遇到問題解決文章

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章