中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

使用Dockerfile如何構建一個docker鏡像

發布時間:2021-04-19 16:27:08 來源:億速云 閱讀:147 作者:Leah 欄目:開發技術

這篇文章給大家介紹使用Dockerfile如何構建一個docker鏡像,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

使用Dockerfile構建docker鏡像

1、什么是Dockerfile?

    dockerfile是一個文件,它是使用DSL語法編寫一個文件,之后使用docker build命令基于該dockerfile文件中的指令構建一個新的鏡像。

    假設我們的代碼是:

mkdir test

cd test

touch  Dockerfile

   不難看出,我們創建了一個test目錄,并進入目錄創建了dockerfile_test文件,這個目錄就稱之為我們的構建環境,Docker將這個環境稱之為上下文(context)或者構建上下文,Docker會在構建鏡像的時候將構建上下文和上下文中的文件和目錄上傳到Docker 守護進程,這樣Docker守護進程就能直接訪問你在鏡像中存儲的任何代碼、文件或者其他數據。

   下面來看一個Docker file的內容:

# version: 0.0.1
FROM ubuntu:14.04
MAINTAINER Yeyz  'yeyz@example.com'
RUN apt-get update
RUN apt-get install -y nginx
RUN echo 'Hi, I am your container' > /root/test.html
EXPOSE 80

    從上面的文件內容中不難看出來,Dockerfile包含了一系列的命令,每個命令前面都需要用大寫的關鍵字來進行標識。以#開頭的內容,會被識別為注釋。

    Docker大體上按照下面的順序來執行Dockerfile中的命令,

1、Docker從基礎鏡像運行一個容器,每個DockerFile的第一個命令都應該是From,From指定了一個基礎鏡像,后續指令都在這個基礎上執行。

2、執行一條指令,對容器作出修改

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

4、Docker鏡像再基于剛才提交的鏡像運行一個容器

5、執行Dockerfile中的下一條指令,知道所有的容器指令都執行完成

    上面的過程中,任意一個步驟執行失敗,都意味著目標鏡像創建失敗,但是因為目標鏡像是一個一個鏡像堆積的結果,其實我們得到了一個可以運行的鏡像,只不過還沒有達到最終的鏡像的樣子,這個特性對于調試鏡像很重要。

    我們對上面的鏡像進行解釋:

Version:代表注釋,表示版本

From指令,From指定了一個基礎鏡像ubuntu,說明我們的操作是在ubuntu這個基礎鏡像上進行的

Maintainer指令,這個指令代表的是鏡像的作者,以及作者的電子郵件地址

RUN指令,RUN指令會在當前鏡像中運行指定的命令,三條指令分別是更新apt倉庫,安裝nginx包,打印一條命令到指定的文件中。每條命令都會創建一個鏡像層。如果該命令成功,這個鏡像層就會提交,之后繼續指定DockerFile中的下面一條指令。默認情況下,RUN命令會使用shell中的/bin/bash -c來執行后面的指令。

Expose指令,這條指令告訴容器內的應用程序使用容器的指定端口。當然,可以使用多個EXPOSE來向外面公開多個端口。

2、執行一個Dockerfile,構建鏡像

我們執行剛才的Dockerfile,得到如下結果:

[root test]# docker build -t='yeyz:test0' .
Sending build context to Docker daemon 2.048 kB
Step 1/6 : FROM ubuntu:14.04
Trying to pull repository docker.io/library/ubuntu ... 
14.04: Pulling from docker.io/library/ubuntu
2e6e20c8e2e6: Downloading [>                                                  ] 539.1 kB/70.69 MB
95201152d9ff: Download complete 
5f63a3b65493: Download complete

其中,-t選項是用來指定鏡像和倉庫名稱的,yeyz為倉庫名字,而test0為鏡像名字。命令中的.代表了當前目錄,Docker默認從本地目錄中去尋找DockerFile,也可以替換成一個指定的Git倉庫源地址來指定DockerFile的位置。如下:

docker build -t='yeyz/test0'  xxxx.com:yeyz/test0

如果想要保留版本信息,可以指定一個標簽,如下:

docker build -t='yeyz/test0:v1' .

如果我們只想上傳某個目錄下面的部分文件,可以創建一個.dockerignore的文件,每一行都是一個文件過濾匹配模式,這樣,在生成鏡像的時候,會自動過濾掉那些不需要的文件。

最終的返回值是一個鏡像ID,我們拿到鏡像ID之后,就可以使用docker run命令運行鏡像。

3、Dockerfile構建緩存

   當我們第一次構建的Dockerfile出現問題的時候,需要再次構建,這個時候會執行相同的指令,假設我們修改了Dockerfile中第4行的內容,那么Docker會自動將前3行通過緩存的方式來進行加載,這會節省大量的時間。

    如果我們不想使用Dockerfile的緩存,則可以通過加上--no-cache參數來避免使用Dockerfile緩存。

4、查看鏡像的構建歷史

docker history可以查看構建好的鏡像的構建歷史,以及構建好的鏡像的每一層。

[root@VM-16-13-centos test]# docker images mysql
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
docker.io/mysql     latest              4f1413420360        7 weeks ago         545 MB

[root@VM-16-13-centos test]# docker history 4f1413420360
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
4f1413420360        7 weeks ago         /bin/sh -c #(nop)  CMD ["mysqld"]               0 B                 
<missing>           7 weeks ago         /bin/sh -c #(nop)  EXPOSE 3306 33060            0 B                 
<missing>           7 weeks ago         /bin/sh -c #(nop)  ENTRYPOINT ["docker-ent...   0 B                 
<missing>           7 weeks ago         /bin/sh -c ln -s usr/local/bin/docker-entr...   34 B                
<missing>           7 weeks ago         /bin/sh -c #(nop) COPY file:f9202f6b715c0e...   13.1 kB             
<missing>           7 weeks ago         /bin/sh -c #(nop) COPY dir:2e040acc386ebd2...   1.12 kB             
<missing>           7 weeks ago         /bin/sh -c #(nop)  VOLUME [/var/lib/mysql]      0 B                 
<missing>           7 weeks ago         /bin/sh -c {   echo mysql-community-server...   410 MB              
<missing>           7 weeks ago         /bin/sh -c echo "deb http://repo.mysql.com...   55 B                
<missing>           7 weeks ago         /bin/sh -c #(nop)  ENV MYSQL_VERSION=8.0.2...   0 B                 
<missing>           7 weeks ago         /bin/sh -c #(nop)  ENV MYSQL_MAJOR=8.0          0 B                 
<missing>           7 weeks ago         /bin/sh -c set -ex;  key='A4A9406876FCBD3C...   2.61 kB             
<missing>           7 weeks ago         /bin/sh -c apt-get update && apt-get insta...   52.2 MB             
<missing>           7 weeks ago         /bin/sh -c mkdir /docker-entrypoint-initdb.d    0 B                 
<missing>           7 weeks ago         /bin/sh -c set -eux;  savedAptMark="$(apt-...   4.17 MB             
<missing>           7 weeks ago         /bin/sh -c #(nop)  ENV GOSU_VERSION=1.12        0 B                 
<missing>           7 weeks ago         /bin/sh -c apt-get update && apt-get insta...   9.34 MB             
<missing>           7 weeks ago         /bin/sh -c groupadd -r mysql && useradd -r...   329 kB              
<missing>           7 weeks ago         /bin/sh -c #(nop)  CMD ["bash"]                 0 B                 
<missing>           7 weeks ago         /bin/sh -c #(nop) ADD file:d2abb0e4e7ac177...   69.2 MB

關于使用Dockerfile如何構建一個docker鏡像就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

高安市| 榕江县| 山西省| 德化县| 龙井市| 昭通市| 姜堰市| 教育| 祥云县| 应城市| 武强县| 宣威市| 武宁县| 安宁市| 塔城市| 镇江市| 郑州市| 高要市| 陆河县| 腾冲县| 青海省| 太保市| 丰宁| 台中县| 泗洪县| 青浦区| 新绛县| 东城区| 万山特区| 阿拉善盟| 正镶白旗| 澄城县| 广元市| 马鞍山市| 清河县| 三亚市| 定安县| 政和县| 石河子市| 获嘉县| 抚宁县|