Docker?鏡像分層及dockerfile?編寫(xiě)技巧
docker鏡像分層
分層介紹
Dockerfile中的每個(gè)指令都會(huì)創(chuàng)建一個(gè)新的鏡像層
鏡像層將被緩存和復(fù)用
當(dāng)Dockerfile的指令修改了,復(fù)制的文件變化了,或者構(gòu)建鏡像時(shí)指定的變量不同了,對(duì)應(yīng)的鏡像層緩存就會(huì)失效
某一層的鏡像緩存失效之后,它之后的鏡像層緩存都會(huì)失效
鏡像層是不可變的,如果在某一層中添加一個(gè)文件,然后在下一層中刪除它,則鏡像中依然會(huì)包含該文件
Docker鏡像原理
- Docker鏡像是由特殊的文件系統(tǒng)疊加而成
- ·最底端是bootfs,并使用宿主機(jī)的bootfs
- ·第二層是root文件系統(tǒng)rootfs,稱為base image
- ·然后再往上可以疊加其他的鏡像文件
- ·統(tǒng)一文件系統(tǒng)(Union File System)技術(shù)能夠?qū)⒉煌膶诱铣梢粋€(gè)文件系統(tǒng),為這些層提供了 一個(gè)統(tǒng)一的視角,這樣就隱藏了多層的存在,在用戶的角度看來(lái),只存在一個(gè)文件系統(tǒng)。
- ·一個(gè)鏡像可以放在另一個(gè)鏡像的上面。位于下面的鏡像稱為父鏡像,最底部的鏡像成為基礎(chǔ)鏡像。
- ·當(dāng)從一個(gè)鏡像啟動(dòng)容器時(shí),Docker會(huì)在最頂層加載一個(gè)讀寫(xiě)文件系統(tǒng)作為容器。
1.base image:基礎(chǔ)鏡像
2.image:固化了一個(gè)標(biāo)準(zhǔn)運(yùn)行環(huán)境,鏡像本身的功能-封裝一組功能性的文件,通過(guò)統(tǒng)一的方式,文件格式提供出來(lái)(只讀)
3.container:容器層(讀寫(xiě))
4.docker-server 端
5.呈現(xiàn)給docker-client (視圖)

鏡像分層模型

dockerfile 編寫(xiě)
dockerfile操作指令
| 序號(hào) | 指令 | 含義 |
| 1 | FROM 鏡像 | 指定新鏡像所基于的鏡像,第 條指必須為from指令,每創(chuàng)建一個(gè)鏡像就需要一條from指令 |
| 2 | MAINTAINER 名字 | 說(shuō)明新鏡像的維護(hù)人信息 |
| 3 | RUN 命令 | 在所基于的鏡像上執(zhí)行命令,并提交到新的鏡像中;docker內(nèi)每執(zhí)行一條命令都是run開(kāi)頭 |
| 4 | CMD["要運(yùn)行的程序","參數(shù)1","參數(shù)2"] | 指令啟動(dòng)容器時(shí)要運(yùn)行的命令或者腳本,Dockerfile只能有一條CMD命令, 如果指定多條則只能最后一條被執(zhí)行 |
| 5 | EXPOSE 端口號(hào) | 指定新鏡像加載到Docker時(shí)要開(kāi)啟的端口 |
| 6 | ENV 環(huán)境變量 變量值 | 設(shè)置一個(gè)環(huán)境變量的值,會(huì)被后面的run使用 |
| 7 | ADD 源文件、目錄 目標(biāo)文件/目錄 | 具體識(shí)別壓縮格式并且自動(dòng)解壓,將源文件復(fù)制到目標(biāo)文件,源文件要與dockerfile位于相同目錄中,或者一個(gè)URL |
| 8 | COPY 源文件/目錄 目標(biāo)文件/目錄 | 將本地主機(jī)上的文件/目錄復(fù)制到目標(biāo)地點(diǎn),源文件/目錄要與Dockerfile在相同的目錄中 |
| 9 | VOLUME ["目錄"] | 在容器中創(chuàng)建一個(gè)掛載點(diǎn) |
| 10 | USER 用戶名/UID | 指定運(yùn)行容器時(shí)的用戶 |
| 11 | WORKDIR 路徑 | 為后續(xù)的RUN、CMD、ENTRYPOINT指定工作目錄 |
| 12 | ONBUILD 命令 | 指定所生成的鏡像作為一個(gè)基礎(chǔ)鏡像時(shí)所要運(yùn)行的命令 |
| 13 | HEALTHCHECK | 健康檢查 |
ADD和copy區(qū)別
①Dockerfile中的COPY指令和ADD指令都可以將主機(jī)上的資源復(fù)制或加入到容器鏡像中,都是在構(gòu)建鏡像的過(guò)程中完成的
②copy只能用于復(fù)制(節(jié)省資源)
③ADD復(fù)制的同時(shí),如果復(fù)制的對(duì)象時(shí)壓縮包,ADD還可以解壓(消耗資源)
④COPY指令和ADD指令的唯一區(qū)別在于是否支持從遠(yuǎn)程URL獲取資源。COPY指令只能從執(zhí)行docker build所在的主機(jī)上讀取資源并復(fù)制到鏡像中。而ADD指令還支持通過(guò)URL從遠(yuǎn)程服務(wù)器讀取資源并復(fù)制到鏡像中
⑤滿足同等功能的情況下,推薦使用COPY指令。ADD指令更擅長(zhǎng)讀取本地tar文件并解壓縮
CMD和entrypoint區(qū)別
一般還是會(huì)用entrypoint的中括號(hào)形式作為docker 容器啟動(dòng)以后的默認(rèn)執(zhí)行命令,里面放的是不變的部分,可變部分比如命令參數(shù)可以使用cmd的形式提供默認(rèn)版本,也就是run里面沒(méi)有任何參數(shù)時(shí)使用的默認(rèn)參數(shù)。如果我們想用默認(rèn)參數(shù),就直接run,否則想用其他參數(shù),就run 里面加參數(shù)。
嘗試編寫(xiě)dockerfile文件 部署nginx
mkdir nginx
cd nginx/
vim Dockerfile
FROM centos:7 #基于基礎(chǔ)鏡像
MAINTAINER nginx #用戶信息
RUN yum -y update #安裝依賴關(guān)系
RUN yum install -y pcre-devel zlib-devel gcc gcc-c++ make
RUN useradd -M -s /sbin/nologin nginx #創(chuàng)建用戶
ADD nginx-1.12.0.tar.gz /usr/local/src #將源文件復(fù)制到目標(biāo)文件,源文件要與
Dockerfile位于相同目錄中,或者是
一個(gè)URL
VOLUME ["/usr/local/nginx/html"] #在容器中創(chuàng)建一個(gè)掛載點(diǎn)
WORKDIR /usr/local/src #指定工作目錄
WORKDIR nginx-1.12.0
RUN ./configure \
--prefix=/usr/local/nginx \--user=nginx \--group=nginx \--with-http_stub_status_module && make && make install
ENV PATH /usr/local/nginx/sbin:$PATH
EXPOSE 80 #暴露端口
RUN echo "demon off;" >>/usr/local/nginx/conf/nginx.conf
CMD nginxdocker運(yùn)行nginx為什么要使用 daemon off
docker運(yùn)行nginx為什么要使用 daemon off
到此這篇關(guān)于Docker 鏡像分層及dockerfile 編寫(xiě)的文章就介紹到這了,更多相關(guān)Docker 鏡像分層內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
docker中的環(huán)境變量使用與常見(jiàn)問(wèn)題解決方案
這篇文章主要給大家介紹了關(guān)于docker中環(huán)境變量使用與常見(jiàn)問(wèn)題解決方案的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用docker具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03
使用minikube安裝k8s單節(jié)點(diǎn)集群方式
本文主要介紹了minikube的使用方法,包括安裝、啟動(dòng)、鏡像管理等步驟,minikube是一個(gè)專注于讓Kubernetes更易于學(xué)習(xí)和開(kāi)發(fā)的本地Kubernetes環(huán)境,支持在macOS、Linux和Windows上快速設(shè)置本地Kubernetes集群2024-10-10
Docker容器網(wǎng)絡(luò)更改的實(shí)現(xiàn)
本文主要介紹了Docker容器網(wǎng)絡(luò)更改的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03
docker-compose中的環(huán)境變量問(wèn)題
這篇文章主要介紹了docker-compose中的環(huán)境變量問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11

