最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Dockerfile構(gòu)建docker鏡像

 更新時(shí)間:2021年04月19日 09:47:17   作者:DBA隨筆  
這篇文章主要介紹了使用Dockerfile構(gòu)建docker鏡像的方法,幫助大家更好的理解和學(xué)習(xí)使用docker,感興趣的朋友可以了解下

   今天我們看看Dockerfile創(chuàng)建的方法。

構(gòu)建docker鏡像,有兩種方法:

1、一種是使用docker commit命令

2、另外一種是基于docker build命令和dockerfile文件

    通常情況下,dockerfile構(gòu)建鏡像比docker commit命令構(gòu)建 鏡像更加靈活,因此采用后者較多。

使用Dockerfile構(gòu)建docker鏡像

1、什么是Dockerfile?

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

    假設(shè)我們的代碼是:

mkdir test

cd test

touch  Dockerfile

   不難看出,我們創(chuàng)建了一個(gè)test目錄,并進(jìn)入目錄創(chuàng)建了dockerfile_test文件,這個(gè)目錄就稱之為我們的構(gòu)建環(huán)境,Docker將這個(gè)環(huán)境稱之為上下文(context)或者構(gòu)建上下文,Docker會(huì)在構(gòu)建鏡像的時(shí)候?qū)?gòu)建上下文和上下文中的文件和目錄上傳到Docker 守護(hù)進(jìn)程,這樣Docker守護(hù)進(jìn)程就能直接訪問你在鏡像中存儲(chǔ)的任何代碼、文件或者其他數(shù)據(jù)。

   下面來看一個(gè)Docker file的內(nèi)容:

# 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

    從上面的文件內(nèi)容中不難看出來,Dockerfile包含了一系列的命令,每個(gè)命令前面都需要用大寫的關(guān)鍵字來進(jìn)行標(biāo)識(shí)。以#開頭的內(nèi)容,會(huì)被識(shí)別為注釋。

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

1、Docker從基礎(chǔ)鏡像運(yùn)行一個(gè)容器,每個(gè)DockerFile的第一個(gè)命令都應(yīng)該是From,F(xiàn)rom指定了一個(gè)基礎(chǔ)鏡像,后續(xù)指令都在這個(gè)基礎(chǔ)上執(zhí)行。

2、執(zhí)行一條指令,對(duì)容器作出修改

3、執(zhí)行類似docker commit的操作,提交一個(gè)新的鏡像層

4、Docker鏡像再基于剛才提交的鏡像運(yùn)行一個(gè)容器

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

    上面的過程中,任意一個(gè)步驟執(zhí)行失敗,都意味著目標(biāo)鏡像創(chuàng)建失敗,但是因?yàn)槟繕?biāo)鏡像是一個(gè)一個(gè)鏡像堆積的結(jié)果,其實(shí)我們得到了一個(gè)可以運(yùn)行的鏡像,只不過還沒有達(dá)到最終的鏡像的樣子,這個(gè)特性對(duì)于調(diào)試鏡像很重要。

    我們對(duì)上面的鏡像進(jìn)行解釋:

Version:代表注釋,表示版本

From指令,F(xiàn)rom指定了一個(gè)基礎(chǔ)鏡像ubuntu,說明我們的操作是在ubuntu這個(gè)基礎(chǔ)鏡像上進(jìn)行的

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

RUN指令,RUN指令會(huì)在當(dāng)前鏡像中運(yùn)行指定的命令,三條指令分別是更新apt倉(cāng)庫(kù),安裝nginx包,打印一條命令到指定的文件中。每條命令都會(huì)創(chuàng)建一個(gè)鏡像層。如果該命令成功,這個(gè)鏡像層就會(huì)提交,之后繼續(xù)指定DockerFile中的下面一條指令。默認(rèn)情況下,RUN命令會(huì)使用shell中的/bin/bash -c來執(zhí)行后面的指令。

Expose指令,這條指令告訴容器內(nèi)的應(yīng)用程序使用容器的指定端口。當(dāng)然,可以使用多個(gè)EXPOSE來向外面公開多個(gè)端口。

2、執(zhí)行一個(gè)Dockerfile,構(gòu)建鏡像

我們執(zhí)行剛才的Dockerfile,得到如下結(jié)果:

[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選項(xiàng)是用來指定鏡像和倉(cāng)庫(kù)名稱的,yeyz為倉(cāng)庫(kù)名字,而test0為鏡像名字。命令中的.代表了當(dāng)前目錄,Docker默認(rèn)從本地目錄中去尋找DockerFile,也可以替換成一個(gè)指定的Git倉(cāng)庫(kù)源地址來指定DockerFile的位置。如下:

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

如果想要保留版本信息,可以指定一個(gè)標(biāo)簽,如下:

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

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

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

3、Dockerfile構(gòu)建緩存

   當(dāng)我們第一次構(gòu)建的Dockerfile出現(xiàn)問題的時(shí)候,需要再次構(gòu)建,這個(gè)時(shí)候會(huì)執(zhí)行相同的指令,假設(shè)我們修改了Dockerfile中第4行的內(nèi)容,那么Docker會(huì)自動(dòng)將前3行通過緩存的方式來進(jìn)行加載,這會(huì)節(jié)省大量的時(shí)間。

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

4、查看鏡像的構(gòu)建歷史

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

[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構(gòu)建docker鏡像的詳細(xì)內(nèi)容,更多關(guān)于用Dockerfile構(gòu)建docker鏡像的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 從零開始使用Dapr簡(jiǎn)化微服務(wù)的示例

    從零開始使用Dapr簡(jiǎn)化微服務(wù)的示例

    本文以net6和dapr1.5為基礎(chǔ),搭建一個(gè)dapr的簡(jiǎn)單使用示例。對(duì)Dapr簡(jiǎn)化微服務(wù)的簡(jiǎn)單使用感興趣的朋友跟隨小編一起學(xué)習(xí)下吧
    2021-11-11
  • docker 如何修改容器的端口

    docker 如何修改容器的端口

    正在運(yùn)行的容器端口沖突了,但是還需要這個(gè)容器,怎么辦?只能修改端口了,今天通過本文給大家介紹docker 如何修改容器的端口,感興趣的朋友一起看看吧
    2024-01-01
  • Docker部署mysql遠(yuǎn)程連接 解決2003的問題

    Docker部署mysql遠(yuǎn)程連接 解決2003的問題

    這篇文章主要介紹了Docker部署mysql遠(yuǎn)程連接 解決2003錯(cuò)誤的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • Docker鏡像用普通用戶啟動(dòng)服務(wù)的實(shí)現(xiàn)

    Docker鏡像用普通用戶啟動(dòng)服務(wù)的實(shí)現(xiàn)

    使用普通用戶啟動(dòng)Docker容器中的服務(wù),可以有效降低潛在的安全風(fēng)險(xiǎn),本文主要介紹了Docker鏡像用普通用戶啟動(dòng)服務(wù)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • 基于Docker的Etcd分布式部署的方法步驟

    基于Docker的Etcd分布式部署的方法步驟

    這篇文章主要介紹了基于Docker的Etcd分布式部署的方法步驟,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • Docker 安裝 MySQL 并實(shí)現(xiàn)遠(yuǎn)程連接教程

    Docker 安裝 MySQL 并實(shí)現(xiàn)遠(yuǎn)程連接教程

    這篇文章主要介紹了Docker 安裝 MySQL 并實(shí)現(xiàn)遠(yuǎn)程連接的教程,幫助大家更好的理解和使用docker容器,感興趣的朋友可以了解下
    2020-09-09
  • Docker超詳細(xì)講解鏡像操作

    Docker超詳細(xì)講解鏡像操作

    鏡像也是?docker?的核心組件之一,鏡像時(shí)容器運(yùn)行的基礎(chǔ),容器是鏡像運(yùn)行后的形態(tài)。本文主要介紹Docker鏡像的基本操作,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • 你可能不知道的docker命令奇怪巧

    你可能不知道的docker命令奇怪巧

    這篇文章主要介紹了你可能不知道的docker命令的奇怪巧,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-01-01
  • 使用Docker快速搭建Oracle開發(fā)環(huán)境的方法教程

    使用Docker快速搭建Oracle開發(fā)環(huán)境的方法教程

    這篇文章主要給大家介紹了使用Docker快速搭建Oracle開發(fā)環(huán)境的方法教程,文中給出了詳細(xì)的解決方法,對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起看看吧。
    2017-06-06
  • Docker實(shí)現(xiàn)Mariadb分庫(kù)分表及讀寫分離功能

    Docker實(shí)現(xiàn)Mariadb分庫(kù)分表及讀寫分離功能

    這篇文章主要給大家介紹了關(guān)于Docker實(shí)現(xiàn)Mariadb分庫(kù)分表及讀寫分離功能的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-05-05

最新評(píng)論

盐亭县| 通化市| 靖远县| 犍为县| 兴化市| 望江县| 拜泉县| 万载县| 奉化市| 兴安盟| 广宗县| 皮山县| 绵竹市| 延津县| 辽中县| 嘉黎县| 凤凰县| 邵阳市| 集安市| 荥经县| 伊金霍洛旗| 玉树县| 伊宁市| 赫章县| 都昌县| 布拖县| 阳高县| 德化县| 庆阳市| 双桥区| 涿鹿县| 廊坊市| 安达市| 济阳县| 峨眉山市| 南陵县| 安乡县| 嘉荫县| 阳信县| 襄汾县| 杭锦后旗|