中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

Docker系列9:Dockerfile指令詳解(1)

一、docker file的指令

專業(yè)成都網(wǎng)站建設(shè)公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!創(chuàng)新互聯(lián)為您提供成都網(wǎng)站建設(shè),五站合一網(wǎng)站設(shè)計(jì)制作,服務(wù)好的網(wǎng)站設(shè)計(jì)公司,做網(wǎng)站、成都做網(wǎng)站負(fù)責(zé)任的成都網(wǎng)站制作公司!

1、指令1:FROM指令

  • FROM必須是第一個(gè)非注釋指令

  • 用于指定基礎(chǔ)鏡像,這個(gè)可以是任意的鏡像

  • 在使用FROM指令的時(shí)候,docker daemon會(huì)自動(dòng)先在本機(jī)上找所指定的鏡像,如果沒有就會(huì)去docker hub或者其他服務(wù)上找鏡像?

FROM的語法格式

  • 格式1:FROM <repository>[:tag]

  • 格式2:FROM <repository>@<digest>

注意:

  • 第一種各式作鏡像指的是基于基礎(chǔ)鏡像的名子來做新鏡像,但是這種做可能是存在漏洞

  • 第二種格式是基于鏡像的哈希碼做鏡像,這樣所做的鏡像就避免了這個(gè)問題

例子:基于busybox的最新版做鏡像

FROM?busybox:latest

2、指令2:MAINTANIER指令

  • 已經(jīng)被廢棄,用LABEL替換了

  • 用于說明制作者的名稱

  • 可選選項(xiàng)

例子:

MAINTAINER??"zxhk?<zxhk0816@qq.com>"

3、指令3:LABEL指令

  • 這是新版docker中的指令

  • 這個(gè)命令是用來指定各種元數(shù)據(jù),指定的方法就是用kye value格式,其實(shí)作者信息只是其中的一種?

語法格式

LABEL?<KEY>=<VALUE>?<KEY>=<VALUE>?<KEY>=<VALUE>..

4、指令4:COPY指令

  • 將宿主機(jī)中的工作目錄中的文件復(fù)制到目標(biāo)鏡像的文件系統(tǒng)中

語法格式

  • 復(fù)制一個(gè)文件:COPY <src> <dest>? ?

  • 復(fù)制多個(gè)文件:COPY [<src1> <src2> <src3> ... <dest>]

注意:

  • 源文件路徑,一般是相對(duì)路徑

  • 目標(biāo)文件路徑,一般是絕對(duì)路徑

  • 支持使用通配符

文件復(fù)制的準(zhǔn)則

  • 準(zhǔn)則1:src必須是工作目錄下的目錄或者文件,不能是父目錄中的

  • 準(zhǔn)則2:如果dest不存在,會(huì)被動(dòng)自動(dòng)創(chuàng)建

  • 準(zhǔn)則3:如果src是目錄,那么在進(jìn)行復(fù)制的時(shí)候,會(huì)將src下的全部?jī)?nèi)容都遞歸方式復(fù)制過去,但是src自身不會(huì)被復(fù)制過去

  • 準(zhǔn)則4:如果如果指定了多個(gè)src或者在src中使用了通配符,那么dest必須是一個(gè)目錄,并且比用以/為結(jié)尾

例子:將當(dāng)前工作目錄下的index.html復(fù)制到目標(biāo)容器的文件系統(tǒng)中的/data/web/html下

COPY?index?/data/web/html

【有了這四個(gè)指令就可以做一個(gè)鏡像了】

案例;演示創(chuàng)建docker file的過程

需求:

  • 在容器中創(chuàng)建一個(gè)index.html

  • 在容器中準(zhǔn)備好yum到的配置文件

實(shí)現(xiàn)過程

第一步:創(chuàng)建工作目錄

[root@host1?~]#?mkdir?/img1
[root@host1?~]#?cd?/img1/

第二步:創(chuàng)建html文件

[root@host1?img1]#?echo?"test?page">>index.html
[root@host1?img1]#?ls
index.html

第三步:準(zhǔn)備yum的配置文件

[root@host1?img1]#?cp?-a?/etc/yum.repos.d/?./
[root@host1?img1]#?ls
index.html??yum.repos.d

第四步:編寫docker file文件

  • 指定作者,可用MAINTAINER 也可以用 LABEL

  • 將index.html放在/data/下

  • 將yum.repos.d下的所有文件放在/etc/yum.repos.d下

[root@host1?img1]#?vim?Dockerfile
#my?first?docker?file
FROM?busybox:latest
MAINTAINER?"zxhk?<237745635@qq.com>"
COPY?index.html?/data/
COPY?yum.repos.d?/etc/yum.repos.d/
  • 源目錄只需要指定目錄名稱,目錄下的文件會(huì)被復(fù)制過去

  • 在目標(biāo)位置不會(huì)生成源目錄同名目錄,必須手動(dòng)指定,而且必須以/為結(jié)尾

第五步:制作鏡像

[root@host1?img1]#?docker?build?-t?miniser:v1-1?./
Sending?build?context?to?Docker?daemon??20.99kB
Step?1/4?:?FROM?busybox:latest
?--->?b534869c81f0
Step?2/4?:?MAINTAINER?"zxhk?<237745635@qq.com>"
?--->?Running?in?9f9f8d0793fa
Removing?intermediate?container?9f9f8d0793fa
?--->?c928cd55b12c
Step?3/4?:?COPY?index.html?/data/
?--->?5fe09215a0e2
Step?4/4?:?COPY?yum.repos.d?/etc/yum.repos.d/
?--->?679710cab9bf
Successfully?built?679710cab9bf
Successfully?tagged?miniser:v1-1
  • -t:是用來指定鏡像的標(biāo)簽的

[root@host1?img1]#?docker?image?ls?|?grep?mini
miniser?????????????????????????????????????????v1-1????????????????679710cab9bf????????2?minutes?ago???????1.23MB

第六步:基于鏡像啟動(dòng)一個(gè)容器

[root@host1?img1]#?docker?run?--name?t123?\
>?--rm?miniser:v1-1?ls?/etc/yum.repos.d
CentOS-Base.repo
CentOS-CR.repo
CentOS-Debuginfo.repo
CentOS-Media.repo
CentOS-Sources.repo
CentOS-Vault.repo
CentOS-fasttrack.repo
docker.repo
  • 這個(gè)容器就是執(zhí)行一個(gè)ls命令,當(dāng)ls執(zhí)行完,這個(gè)容器也就停止了

  • 這個(gè)容器的執(zhí)行結(jié)果是輸出repo文件名列表

5、指令5:ADD指令

  • 與COPY類似,區(qū)別是ADD支持使用URL路徑,也就是如果你的做鏡像的這個(gè)主機(jī)可以聯(lián)網(wǎng),那么就可以將網(wǎng)絡(luò)上的一個(gè)文件下載到本地并引入到你的文件中。

  • ADD的另一個(gè)作用就是如果源文件是一個(gè)本地文件,并且這個(gè)文件是tar壓縮歸檔的文件,那么ADD可以自動(dòng)將這個(gè)文件解壓展開到你的工作目錄.需要特別注意,如果源文件是一個(gè)網(wǎng)絡(luò)文件,那么無法自動(dòng)解壓展開。

語法格式:

ADD?<src>?<dest>
ADD?["<src>"?"<src>"?...?"<dest>"]

演示:下載nginx并放入到鏡像的/var/usr/src下

第一步:去找nginx下載地址

Docker系列9:Docker file指令詳解(1)

第二步:編輯docker file文件

#my?first?docker?file
FROM?busybox:latest
MAINTAINER?"zxhk?<237745635@qq.com>"
COPY?index.html?/data/
COPY?yum.repos.d?/etc/yum.repos.d/
ADD?http://nginx.org/download/nginx-1.17.6.tar.gz?/var/usr/src/

第三步:構(gòu)建鏡像

[root@host1?img1]#?docker?build?-t?miniser:v1-2?./
[root@host1?img1]#?docker?image?ls?|?grep?mini
miniser?????????????????????????????????????????v1-2????????????????eaceb1156a52????????2?minutes?ago???????2.27MB
miniser?????????????????????????????????????????v1-1????????????????679710cab9bf????????23?minutes?ago??????1.23MB

注意:也可以先將nginx的安裝包下載到本地,然后導(dǎo)入到鏡像中

Dockerfile文件內(nèi)容如下

ADD?nginx-1.17.2.tar.gz?/usr/local/src/
  • 此時(shí)是將nginx解壓到/usr/local/src目錄下

6、指令6:WORKDIR指令

  • 用于設(shè)定工作目錄,比如上個(gè)例子中,將nginx放在了/usr/loca/src下,我們就可以將這個(gè)目錄設(shè)置為工作目錄,如下

#my?first?docker?file
FROM?busybox:latest
MAINTAINER?"zxhk?<237745635@qq.com>"
COPY?index.html?/data/
COPY?yum.repos.d?/etc/yum.repos.d/

WORKDIR?/var/usr/src/
ADD?http://nginx.org/download/nginx-1.17.6.tar.gz?./

7、指令7:VOLUME指令

  • 用于在鏡像中創(chuàng)建一個(gè)掛載點(diǎn)目錄,用以掛載宿主機(jī)上的卷或者其他容器上的卷

  • 基于dockerfile創(chuàng)建的卷,是無法指定卷所在的宿主機(jī)的目錄的,需要自動(dòng)生成

語法格式

  • VOLUME <mountpoint>

  • 如果docker所指定的卷下以前有文件,那么掛載卷之后,這些文件就會(huì)出現(xiàn)在容器中

案例:修改Dockerfile,將/data/MySQL作為卷

第一步:修改Dockerfile文件

#my?first?docker?file
FROM?busybox:latest
MAINTAINER?"zxhk?<237745635@qq.com>"
COPY?index.html?/data/
COPY?yum.repos.d?/etc/yum.repos.d/

WORKDIR?/var/usr/src/
ADD?http://nginx.org/download/nginx-1.17.6.tar.gz?./

VOLUME?/data/mysql/

第二步:構(gòu)建鏡像

[root@host1?img1]#?docker?build?-t?miniser:v1-3?./

第三步:?jiǎn)?dòng)容器,查看掛載情況

[root@host1?img1]#?docker?run?--rm?-it?--name?t100?miniser:v1-3
/var/usr/src?#?
/var/usr/src?#?mount?|?grep?mysql
/dev/mapper/centos-root?on?/data/mysql?type?xfs?(rw,seclabel,relatime,attr2,inode64,noquota)
/var/usr/src?#
  • 也可執(zhí)行docker inspect進(jìn)行查看

8、指令8:EXPOSE指令

  • 為容器打開監(jiān)聽的端口以實(shí)現(xiàn)和外部主機(jī)進(jìn)行通信

語法格式:

  • EXPOSE <port>[/<protocol>] <port>[/<protocol>] <port>[/<protocol>] ...

  • protocol是指定協(xié)議,可以是tcp,也可以是udp,默認(rèn)tcp

例子:暴漏多個(gè)端口

  • 例子:EXPOSE 11211/udp 11211/tcp

注意:

  • 寫在文件中的EXPOSE指令,僅僅是說端口是可以暴漏的,但并未真正暴露出來

  • 當(dāng)需要端口暴漏出去的時(shí)候,需要在創(chuàng)建鏡像的時(shí)候用選項(xiàng) -P,這個(gè)選項(xiàng)會(huì)自動(dòng)去讀取EXPOSE的設(shè)置,來將必要的端口暴漏出來

案例:制作鏡像,暴漏80端口

第一步:制作dockerfile

#my?first?docker?file
FROM?busybox:latest
MAINTAINER?"zxhk?<237745635@qq.com>"
COPY?index.html?/data/
COPY?yum.repos.d?/etc/yum.repos.d/

WORKDIR?/var/usr/src/
ADD?nginx-1.17.6.tar.gz?./

VOLUME?/data/mysql/

EXPOSE?80/tcp?53/udp

第二步制作鏡像文件

[root@host1?img1]#?docker?build?-t?miniser:v1-4?./

第二步:?jiǎn)?dòng)容器,在啟動(dòng)的時(shí)候,運(yùn)行apache

[root@host1?img1]#?docker?run?--name?t100?-it?--rm?miniser:v1-4?httpd?-f?-h?/data

檢查一下地址

[root@host1?img1]#?docker?inspect?t100?-f?'{{.NetworkSettings.IPAddress}}'
172.17.0.3

直接訪問容器的地址

[root@host1?img1]#?curl?172.17.0.3
test?page

可以查看,此時(shí)是否暴漏端口了

[root@host1?img1]#?docker?port?t100
[root@host1?img1]#
  • 沒有暴漏任何端口

接下來,重啟運(yùn)行一個(gè)容器,并且用-p選項(xiàng)

[root@host1?img1]#?docker?run?--name?t101?-p?80?-it?--rm?miniser:v1-4?httpd?-f?-h?/data

再次檢查暴漏的端口

[root@host1?~]#?docker?port?t101
80/tcp?->?0.0.0.0:32768
  • 其實(shí)此時(shí)還可以配合-p 選項(xiàng)來暴漏那些鏡像中沒有要指定暴漏的端口

9、指令9:ENV指令

  • 用于為鏡像定義所需要的環(huán)境變量

  • ENV定義的環(huán)境變量可以被其后面的指令,比如COPY ADD等指令調(diào)用

  • ENV 可以嵌套ENV

  • 調(diào)用變量的格式 $var 或者 ${var}

  • 定義變量的格式:ENV <key> <value> 或者 ENV <key>=<value>

補(bǔ)充:

  • 定義多個(gè)變量,需要續(xù)航的時(shí)候,可以用\

  • 變量名中如果有空格,需要用引號(hào)引起來

案例:修改Dockerfile環(huán)境變量

#my?first?docker?file
FROM?busybox:latest
MAINTAINER?"zxhk?<237745635@qq.com>"

ENV?SOFT_NGX=nginx-1.17.6.tar.gz?\
????DOC_ROOT=/data/?\
????WORK_DIR=/var/usr/src/?\
????REPO_DIR=/etc/yum.repos.d/?\
????MYSQL_DIR=/data/mysql/

COPY?index.html?${DOC_ROOT:-/var/www/html/}

COPY?yum.repos.d?$REPO_DIR

WORKDIR?$WORK_DIR
ADD?$SOFT_NGX?./

VOLUME?$MYSQL_DIR

EXPOSE?80/tcp?53/udp

制作鏡像

[root@host1?img1]#?docker?build?-t?miniser:v1-5?./
[root@host1?img1]#?docker?run?--name?t103?--rm?miniser:v1-5?printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=a93864cdbbce
SOFT_NGX=nginx-1.17.6.tar.gz
DOC_ROOT=/data/
WORK_DIR=/var/usr/src/
REPO_DIR=/etc/yum.repos.d/
MYSQL_DIR=/data/mysql/
HOME=/root

我們要清楚,變量在從構(gòu)建鏡像,到啟動(dòng)容器的過程中,變量會(huì)傳遞兩次,如下

Docker系列9:Docker file指令詳解(1)

  • 在從鏡像構(gòu)建容器的時(shí)候,也是可以傳遞變量的,而這些變量是可以直接從Dockerfile中獲得

  • 也可以在創(chuàng)建容器的時(shí)候,手動(dòng)方式傳入變量

案例:?jiǎn)?dòng)容器的時(shí)候傳遞變量

[root@host1?img1]#?docker?run?--name?t103?--rm?\
>?--env?DOC_ROOT=/data/html/?\
>?miniser:v1-5?printenv
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=d76460e0f8cd
DOC_ROOT=/data/html/
SOFT_NGX=nginx-1.17.6.tar.gz
WORK_DIR=/var/usr/src/
REPO_DIR=/etc/yum.repos.d/
MYSQL_DIR=/data/mysql/
HOME=/root

新聞名稱:Docker系列9:Dockerfile指令詳解(1)
網(wǎng)頁網(wǎng)址:http://www.rwnh.cn/article26/jgppcg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供做網(wǎng)站、全網(wǎng)營(yíng)銷推廣、微信公眾號(hào)、關(guān)鍵詞優(yōu)化、品牌網(wǎng)站設(shè)計(jì)、搜索引擎優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站
盐源县| 屏山县| 黄梅县| 阿巴嘎旗| 黑河市| 孙吴县| 遵义市| 吴江市| 祁门县| 龙游县| 安泽县| 宜兴市| 治多县| 密山市| 嘉义市| 托克托县| 洪洞县| 大名县| 吉木乃县| 崇州市| 合作市| 丰都县| 崇信县| 孟津县| 五大连池市| 应用必备| 岚皋县| 天柱县| 砀山县| 防城港市| 凌云县| 肇州县| 洛浦县| 英山县| 京山县| 龙江县| 南华县| 夏邑县| 原平市| 屯昌县| 桐庐县|