Docker之dockerfile命令詳解

1.容器的生命周期:

* 檢查本地是否存在鏡像,如果不存在即從遠(yuǎn)端倉(cāng)庫(kù)檢索

* 利用鏡像啟動(dòng)容器

* 分配一個(gè)文件系統(tǒng),并在只讀的鏡像層外掛載一層可讀寫(xiě)層

* 從宿主機(jī)配置的網(wǎng)橋接口中橋接一個(gè)虛擬接口到容器

* 從地址池配置一個(gè)IP地址給容器

* 執(zhí)行用戶指定的指令

* 執(zhí)行完畢后容器終止

2.Dockerfile的規(guī)則:

?* 格式:

? 1)#為注釋

? 2)指令(大寫(xiě))內(nèi)容(小寫(xiě))

? 3)盡管指令是大小寫(xiě)不敏感的,但是,我們強(qiáng)烈建議指令用大寫(xiě),內(nèi)容用小寫(xiě)表示

* Docker是按順序執(zhí)行Dockerfile里的指令集合的(從上到下依次執(zhí)行)

* 每一個(gè)Dockerfile的第一個(gè)非注釋行指令,必須是“FROM”指令,用于為鏡像文件構(gòu)建過(guò)程中,指定基準(zhǔn)鏡像,后續(xù)的指令運(yùn)行于此基準(zhǔn)鏡像所提供的運(yùn)行環(huán)境中。

*實(shí)踐中,基準(zhǔn)鏡像可以是任何可用鏡像文件,默認(rèn)情況下,docker build 會(huì)在docker 主機(jī)(本地)上查找指定的鏡像文件,當(dāng)其他本地不存在時(shí),則會(huì)從Docker registry(遠(yuǎn)端)上拉取所需鏡像文件。

4組 核心的Dockerfile 指令

* USER/WORKDIR指令

*ADD/EXPOSE指令

*RUN/ENV指令

*CMD/ENTRYPOINT指令

===========================================================

(1)USER/WORKDIR指令:

? ? ? /data/dockerfile/Dockerfile

? ? FROM? stanleyws/nginx:v1.12.2?

? ? USER? nginx?

? ? WORKDIR? /usr/share/nginx/html?

? ? ?WORKDIR 類(lèi)似于 cd:

[root@docker? dockerfile]#? docker build . -t docker.io/oldboy1103/nginx:v1.12.2_with_user_workdir? ?

[root@docker? dockerfile]# docker run --rm -ti --name nginx123 oldboy1103/nginx:v1.12.2_with_user_workdir /bin/bash? ??

===========================================================

(2)ADD/EXPOSE指令

? ? ?/data/dockerfile/Dockerfile?

? ? FROM stanleyws/nginx:v1.12.2?

? ? ADD index.html /usr/share/nginx/html/index.html?

? ? EXPOSE 80

[root@docker? dockerfile]# vi Dockerfile

? ? FROM stanleyws/nginx:v1.12.2

? ? ADD index.html /usr/share/nginx/html/index.html?

? ? EXPOSE 80

[root@docker? dockerfile]# docker build . -t stableyws/nginx:v1.12.2_with_index_expose?

[root@docker? dockerfile]# docker images?

===========================================================

(3)RUN/ENV 指令

? ? ?/data/dockerfile/Dockerfile?

? ? FROM centos?

? ? ENV VER 9.9.4-74.el7_6.1?

? ? RUN yum install bind-$VER -y?

# 構(gòu)建鏡像:

[root@docker? dockerfile]#? docker build . -t stanleyws/bind:v9.9.4_with_env_run?

# 運(yùn)行容器:

[root@docker? dockerfile]# docker run --rm stanleyws/bind:v9.9.4_with_env_run rpm -qa bind

bind-9.9.4-74.el7_6.1.x86_64

===========================================================

(4)CMD/ENTRYPOINT指令

## CMD和ENTRYPOINT指令作用相同,使用方法略有不同

1.CMD指令
/data/dockerfile/Dockerfile?

FROM centos?

RUN yum install httpd -y?

CMD ["httpd","-D","FOREGROUND"]

構(gòu)建鏡像:

[root@docker? dockerfile]#? docker build . -t stanleyws/httpd:myhttpd

[root@docker? dockerfile]#? vi Dockerfile?

? FROM centos?

? RUN yum install httpd -y?

? CMD ["httpd","-D","FOREGROUND"]

[root@docker? dockerfile]# docker run -d --rm --name myhttpd -p83:88 oldboy1103/httpd:test?

2e12804350b12b0916fe

[root@docker? dockerfile]# docker ps -a?

2.ENTRYPOINT指令:

/data/dockerfile/Dockerfile?

FROM centos

ADD entrypoint.sh /entrypoint.sh?

RUN yum install epel-release -q -y && yum install nginx -y?

ENTRYPOINT /entrypoint.sh?

entrypoint.sh?

/data/dockerfile/entrypoinot.sh?

#!/bin/bash?

/sbin/nginx -g "daemon off;"

[root@docker? dockerfile]#? docker exec -ti compassionate_solomon /bin/bash?

[root@docker? dockerfile]#? vi dockerfile?

? FROM centos

? ADD entrypoint.sh /entrypoint.sh?

? RUN yum install epel-release -q -y && yum install nginx -y?

? ENTRYPOINT /entrypoint.sh?

? ?entrypoint.sh?

===========================================================

(5)綜合實(shí)驗(yàn):

? ? ? 運(yùn)行一個(gè)docker容器,在瀏覽器打開(kāi)demon.od.com能訪問(wèn)到百度首頁(yè)

準(zhǔn)備Docker 鏡像:

/data/dockerfile/nginx/Dockerfile?

FROM stanleyws/nginx:v1.12.2?

USER root?

ENV www /usr/share/zoneinfo/Asia/shanghai /etc/localtime &&\

echo 'Asia/Shanghai' >/etc/timezone?

WORKDIR $www?

ADD index.html? $www/index.html

ADD demo.od.com.conf $CONF /demo.od.com.conf?

EXPOSE 80?

CMD ["nginx","g","damon off;"]

index.html?

/data/dockerfile/nginx/index.html

[root@docker? dockerfile]#? wget www.baidu.com -O index.html?

[root@docker? dockerfile]#? vi demo.od.com.conf?

server {

listen 80;

server_name demo.od.com;

root /usr/share/nginx/html;

}

[root@docker? dockerfile]#? docker run --rm -P oldboy1103/nginx:baidu?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容