欧美一级特黄大片做受成人-亚洲成人一区二区电影-激情熟女一区二区三区-日韩专区欧美专区国产专区

Docker系列10:dockerfile指令詳解(2)

10、指令10:RUN指令

企業(yè)建站必須是能夠以充分展現(xiàn)企業(yè)形象為主要目的,是企業(yè)文化與產(chǎn)品對(duì)外擴(kuò)展宣傳的重要窗口,一個(gè)合格的網(wǎng)站不僅僅能為公司帶來巨大的互聯(lián)網(wǎng)上的收集和信息發(fā)布平臺(tái),成都創(chuàng)新互聯(lián)公司面向各種領(lǐng)域:成都集裝箱成都網(wǎng)站設(shè)計(jì)、成都營(yíng)銷網(wǎng)站建設(shè)解決方案、網(wǎng)站設(shè)計(jì)等建站排名服務(wù)。


  • RUM命令是基于Dockerfile構(gòu)建鏡像的時(shí)候要運(yùn)行的命令

  • 比如基于url的方式獲取nginx安裝包:獲取到gz包以后需要使用RUN指令來運(yùn)行tar來解壓展開這個(gè)nginx的包了。

案例:編寫docker file,并制作鏡像

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

ENV?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?http://nginx.org/download/nginx-1.17.6.tar.gz?./

RUN?cd?${WORK_DIR}?&&?tar?-xf?nginx-1.17.6.tar.gz?&&?mv?nginx-1.17.6?nginx

VOLUME?$MYSQL_DIR
EXPOSE?80/tcp?53/udp
[root@host1?img1]#?docker?build?-t?miniser:v1-8?./

基于鏡像啟動(dòng)一個(gè)容器,檢測(cè)是否已經(jīng)解壓

[root@host1?img1]#?docker?run?--rm?--name?t1?miniser:v1-8?ls?/var/usr/src/
nginx
nginx-1.17.6.tar.gz

11、指令11:CMD指令

  • CMD是定義一個(gè)鏡像文件啟動(dòng)為容器的時(shí)候,默認(rèn)要運(yùn)行的程序,也就是那個(gè)pid為1的程序

  • CMD可以有多個(gè),但是只有最后一個(gè)才是生效的。

CMD指令有三種格式

格式1:CMD <命令>

  • 這種格式的話,會(huì)自動(dòng)的將這個(gè)命令運(yùn)行為shell的子進(jìn)程,這樣的好處就是在這個(gè)命令中可以有各種的特殊的符號(hào),但是缺點(diǎn)就得是這個(gè)命令的進(jìn)程號(hào)不是 1

  • 也可以借助于exec,讓這個(gè)進(jìn)程的ID成為1

格式2:CMD ["<命令>", "<參數(shù)1>","<參數(shù)2>"]

  • 這種格式的話是直接將這個(gè)進(jìn)程啟動(dòng)為ID為1的進(jìn)程

格式3:CMD ["<參數(shù)1>","<參數(shù)2>"]

  • 這種格式需要借助于ENTRYPOINT才能運(yùn)行

案例1:使用格式1讓容器運(yùn)行的時(shí)候,自動(dòng)運(yùn)行apache

第一步:創(chuàng)建dockerfile

FROM?busybox
LABEL?maintainer="zxhk<237745635@qq.com>"

ENV?DOC_ROOT="/var/www/html/"

RUN?mkdir?-p?${DOC_ROOT}?&&?\
????echo?"<h2>test</h2>">${DOC_ROOT}index.html

CMD?/bin/httpd?-f?-h?${DOC_ROOT}

第二步:制作鏡像

[root@host1?img2]#?docker?build?-t?miniser:v2-1?./

第三步:查看鏡像的詳細(xì)信息

[root@host1?img2]#?docker?inspect?miniser:v2-1?-f?'{{.ContainerConfig.Cmd}}'
[/bin/sh?-c?#(nop)??CMD?["/bin/sh"?"-c"?"/bin/httpd?-f?-h?${DOC_ROOT}"]]

第四步:創(chuàng)建容器

[root@host1?img2]#?docker?run?--name?t1?--rm?-d?miniser:v2-1

第五步:登錄容器,查看容器信息

[root@host1?img2]#?docker?exec?-it?t1?/bin/sh
/?#?
/?#?netstat?-an
Active?Internet?connections?(servers?and?established)
Proto?Recv-Q?Send-Q?Local?Address???????????Foreign?Address?????????State???????
tcp????????0??????0?:::80???????????????????:::*????????????????????LISTEN??????
/?#?
/?#?ps
PID???USER?????TIME??COMMAND
????1?root??????0:00?/bin/httpd?-f?-h?/var/www/html/
???10?root??????0:00?/bin/sh
???15?root??????0:00?ps
/?#

案例2:使用格式2讓容器運(yùn)行的時(shí)候,自動(dòng)運(yùn)行apache

FROM?busybox
LABEL?maintainer="zxhk<237745635@qq.com>"

ENV?DOC_ROOT="/var/www/html/"

RUN?mkdir?-p?${DOC_ROOT}?&&?\
????echo?"<h2>test</h2>">${DOC_ROOT}index.html
CMD?["/bin/sh",?"-c",?"/bin/httpd",?"-f",?"-h",?"${DOC_ROOT}"]

11、指令11:ENTRYPOINT指令

  • ENTRYPOINT的功能就是和CMD類似的,用于指定容器啟動(dòng)后要默認(rèn)運(yùn)行的程序

  • 在啟動(dòng)容器的時(shí)候,run后面指定的命令,可以覆蓋鏡像中的CMD命令

  • ENTRYPOINT所運(yùn)行的命令不會(huì)不被docker run所指定的命令覆蓋

案例:用ENTRYPOINT制作鏡像實(shí)現(xiàn)啟動(dòng)容器自動(dòng)運(yùn)行apache

FROM?busybox
LABEL?maintainer="zxhk<237745635@qq.com>"

ENV?DOC_ROOT="/var/www/html/"

RUN?mkdir?-p?${DOC_ROOT}?&&?\
????echo?"<h2>test</h2>">${DOC_ROOT}index.html

ENTRYPOINT?/bin/httpd?-f?-h?${DOC_ROOT}

制作鏡像并啟動(dòng)容器測(cè)試

[root@host1?img2]#?docker?build?-t?miniser:v2-2?./
[root@host1?img2]#?docker?run?--name?t2?--rm?-it?miniser:v2-2?ls?/data
  • 此時(shí)命令會(huì)卡住

  • ls /data會(huì)作為參數(shù)傳遞給httpd -f -h? /data,因?yàn)閔ttpd無法識(shí)別這個(gè)參數(shù),因此會(huì)卡住

ENTRYPOINT和CMD組合使用的情況

  • 此時(shí)CMD后的內(nèi)容就會(huì)作為默認(rèn)參數(shù)傳遞給ENTRYPOINT

FROM?busybox
LABEL?maintainer="zxhk<237745635@qq.com>"

ENV?DOC_ROOT="/var/www/html/"

RUN?mkdir?-p?${DOC_ROOT}?&&?\
????echo?"<h2>test</h2>">${DOC_ROOT}index.html

CMD?["/bin/httpd",?"-f",?"-h",?"${DOC_ROOT}"]
ENTRYPOINT?["/bin/sh","-c"]
  • 使用ENTRYPOINT的好處是,他比CMD更方便,因?yàn)樗梢栽趩?dòng)容器的時(shí)候,直接向容器傳遞命令

案例:在啟動(dòng)容器的時(shí)候,動(dòng)態(tài)生成配置文件

1、創(chuàng)建工作目錄

[root@host1?img3]#?mkdir?/img3
[root@host1?img3]#?cd?/img3

2、準(zhǔn)備一個(gè)shell腳本,用于生成配置文件

[root@host1?img3]#?vim?entrypoint.sh
#!/bin/sh
cat>/etc/nginx/conf.d/www.conf<<EOF
server?{
????server_name?$HOSTNAME;
????listen?${IP:-0.0.0.0}:${PORT:-80};
????root?${NGX_DOC_ROOT:-/usr/share/nginx/html};
}
EOF
exec?"$@"

3、創(chuàng)建測(cè)試頁(yè)面

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

4、編寫Dockerfile文件

[root@host1?img3]#?vim?Dockerfile

FROM?nginx:1.14-alpine

LABEL?author="zxhk<237745635@qq.com>"
ENV?NGX_DOC_ROOT='/data/web/html/'

ADD?index.html?${NGX_DOC_ROOT}
ADD?entrypoint.sh?/bin/

#nginx的配置文件必須以;為結(jié)尾
CMD?["/usr/sbin/nginx","-g","daemon?off;"]
ENTRYPOINT?["/bin/entrypoint.sh"]

  • 在執(zhí)行dockerfile的時(shí)候,CMD的內(nèi)容會(huì)傳遞到ENTRYPOINT中

  • ENTRYPOIN會(huì)啟動(dòng)運(yùn)行這個(gè)shell腳本,shell腳本就是pid為1的進(jìn)程,shell腳本就會(huì)生成配置文件

  • 在腳本的最后會(huì)通過exec 來執(zhí)行nginx,讓nginx工作在前臺(tái),同時(shí)nginx進(jìn)程頂替shell成為pid為1的進(jìn)程

5、構(gòu)建鏡像

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

6、啟動(dòng)容器

[root@host1?img3]#?docker?run?--name?nginx1?--rm?miniser:v2-4

登錄容器看看

[root@host1?~]#?docker?exec?-it?nginx1?/bin/sh
/?#?
/?#?cat?/etc/nginx/conf.d/www.conf?
server?{
????server_name?c1d255997da4;
????listen?0.0.0.0:80;
????root?/data/web/html/;
}
/?#

7、再重新啟動(dòng)一個(gè)容器,讓nginx監(jiān)聽127.0.0.1的8080端口

[root@host1?img3]#?docker?run?--name?nginx1?--rm?\
>?-e?"PORT=8080"?-e?"IP=1.2.3.4"?miniser:v2-4

再登錄容器看看

[root@host1?~]#?docker?exec?-it?nginx1?/bin/sh
/?#?
/?#?
/?#?cat?/etc/nginx/conf.d/www.conf?
server?{
????server_name?92c978c97b3c;
????listen?127.0.0.1:8080;
????root?/data/web/html/;
}
/?#
  • 通過這種方式可以快速的為不同的環(huán)境準(zhǔn)備特定的配置文件

12、指令12:USER指令

  • 用于指定容器中的主進(jìn)程是以哪個(gè)用戶的身份來運(yùn)行

  • 也可以用來指定在執(zhí)行dockerfile的CMD? RUN? ENTRYPOIND的時(shí)候,以那個(gè)用戶的身份來運(yùn)行

  • 需要確保容器的/etc/passwd中有這個(gè)用戶,否則會(huì)報(bào)錯(cuò)

語法格式:

  • USER <UID> | <USERNAME>

13、指令13:HEALTHCHECK指令

  • 檢查容器和容器中的服務(wù)是否正常工作

HEALTHCHECK的功能選項(xiàng)

  • --interval=xx? 指定每隔多久檢查一次(默認(rèn)每隔30s檢查一次)

  • --timeout=xx? 指定等待超時(shí)時(shí)間(默認(rèn)也是30s)

  • --start-period=xx 啟動(dòng)容器后,等待多久開始做健康檢查(默認(rèn)是0秒,也就是不等)

  • --retries=xx? 指定請(qǐng)求幾次數(shù)據(jù)都沒獲得返回的情況下才認(rèn)為是出現(xiàn)了異常(默認(rèn)是3次)

HEALTHCHECK的返回值

  • 0:success成功

  • 1:unhealth不健康

  • 2:預(yù)留,沒有意義

案例:每隔5分鐘檢查一次,超時(shí)時(shí)間是3秒

  • HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://1.2.3.4 || exit 1

  • 如果健康檢查失敗,就返回1

14、指令14:SHELL指令

  • 這個(gè)是用來指定運(yùn)行程序的時(shí)候默認(rèn)要用的程序

舉例:

SHELL?["/bin/sh","-c"]

15、指令15:STOPSIGNAL指令

  • 這個(gè)指令可以指定在執(zhí)行docker stop的時(shí)候,本質(zhì)上是向容器發(fā)送什么什么指令,默認(rèn)是發(fā)送15,如果想執(zhí)行stop的時(shí)候發(fā)送9的指令

格式

STOPSIGNAL?9

16、指令16:ARG指令

  • ARG也是定義一個(gè)變量,只是這個(gè)變量是用在執(zhí)行build dockerfile的過程中

  • 可以將nginx的版本定義成變量,然后在構(gòu)建鏡像的時(shí)候可以通過變量來動(dòng)態(tài)指定作者

編寫鏡像文件

FROM?nginx:1.14-alpine

ARG?info="zxhk<237745635@qq.com>"
LABEL?author="${info}"

ENV?NGX_DOC_ROOT='/data/web/html/'

ADD?index.html?${NGX_DOC_ROOT}
ADD?entrypoint.sh?/bin/

#nginx的配置文件必須以;為結(jié)尾
CMD?["/usr/sbin/nginx","-g","daemon?off;"]
ENTRYPOINT?["/bin/entrypoint.sh"]

制作鏡像

[root@host1?img3]#?docker?build?-t?miniser:v2-5?--build-arg?new="tom@qq.com"?./
  • Dockerfile中的arg相當(dāng)于是配置了一個(gè)默認(rèn)值,在制作鏡像的時(shí)候,如果沒有傳值,就用默認(rèn)值

注意區(qū)分ENV和ARG

  • docker run的時(shí)候可以傳值,但是在docker build的時(shí)候是無法傳值的

  • ENV所定義的變量在夠構(gòu)建鏡像的時(shí)候使用的,而在構(gòu)建鏡像的時(shí)候是只能用ARG的默認(rèn)值的

17、指令17:ONBUILD指令

  • 本指令其實(shí)是定義一個(gè)觸發(fā)器

  • 通過ONBUILD定義的Dcokerfile,在執(zhí)行docker build的時(shí)候不執(zhí)行,只有別人基于這個(gè)鏡像做新鏡像的時(shí)候,才會(huì)被執(zhí)行

案例:如果別人基于這個(gè)鏡像做新鏡像,就讓其下載一個(gè)文件

第一步:制作一個(gè)基礎(chǔ)鏡像

[root@host1?img3]#?vim?Dockerfile
FROM?nginx:1.14-alpine
LABEL?author="zxhk<237745635@qq.com>"

ENV?NGX_DOC_ROOT='/data/web/html/'

ADD?index.html?${NGX_DOC_ROOT}
ADD?entrypoint.sh?/bin/

ONBUILD?ADD?http://x.x.x.x/xxx?/data/web/html/

#nginx的配置文件必須以;為結(jié)尾
CMD?["/usr/sbin/nginx","-g","daemon?off;"]
ENTRYPOINT?["/bin/entrypoint.sh"]

制作鏡像

[root@host1?img3]#?docker?build?-t?base:v1.1?./

第二步:基于基礎(chǔ)鏡像做新鏡像

[root@host1?~]#?mkdir?/img4
[root@host1?img4]#?cd?/img4
[root@host1?img4]#?vim?Dockerfile
FROM?base:v1-1

RUN?mkdir?/data

制作鏡像

[root@host1?img4]#?docker?build?-t?newimg:v1-1?./

文章名稱:Docker系列10:dockerfile指令詳解(2)
本文鏈接:http://aaarwkj.com/article0/igjeoo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供移動(dòng)網(wǎng)站建設(shè)定制網(wǎng)站、域名注冊(cè)、ChatGPT軟件開發(fā)、外貿(mào)建站

廣告

聲明:本網(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)站網(wǎng)頁(yè)設(shè)計(jì)
久久国产精品午夜亚洲欧美| 少妇高潮毛片免费看高潮| 日本韩国国语对白一区二区三区| 精品偷拍污视频一区二区| 久久精品国产一区二区三区不卡| 国产农村妇女一区二区三区| 丝袜美腿亚洲综合第一区| 尤物视频在线观看羞羞| 亚洲综合av一区二区| 91天美精东果冻麻豆| 国产黄片免费高清观看| 亚洲av日韩av一区| 国产精品18禁一区二区三区| 亚洲欧美二区中文字幕| 人妻内射一区二区在线视| 99久久免费看国产精品| 国产原创av剧情愿望成真| 97视频精品免费观看| 亚洲国内一区二区三区| 日韩亚洲国产欧美在线观看| 成人黄色av免费在线观看| 成熟人妻一区二区三区人妻| 久久精品国产亚洲七七| 国产精精精精品欧美日韩| 亚洲av成人在线播放| 国产一级三级视频在线| 午夜未满十八禁止观看| 亚洲综合成人av在线| 九九热这里只有免费视频| 亚洲一区二区三区小蜜桃 | 久久综合给合综合久久| 中文字幕国产精品经典三级 | 亚洲国产精品自拍视频| 麻豆国产国语精品三级在线观看| 国产精品呦呦国产精品尤物| 免费精品一区二区三区欧美| 自拍偷拍亚洲另类激情| 97国产免费全部免费观看| 国产麻豆三级在线观看| 日木av中文字幕女女同性| 一区二区三区日韩激情|