欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

docker打包 commit和Dockerfile過程

 更新時間:2023年03月12日 15:21:15   作者:java葉新東老師  
這篇文章主要介紹了docker打包 commit和Dockerfile過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

構(gòu)建鏡像

構(gòu)建鏡像的兩種方法:docker commit和docker build。

通過這2種方式構(gòu)建出來的鏡像大小都是一樣的;那么既然這2種方式都一樣,我們應(yīng)該使用哪一種呢?

commit

用戶提交對容器的修改,并生成新的鏡像。

docker commit -a="作者" -m="說明"  -p 容器id/容器名稱 鏡像新名稱:鏡像版本

# 舉例,制作當(dāng)前的tomcat容器生成鏡像
docker commit -a="yexindong" -m="首次制作的鏡像" tomcat_1 mytomcat:1.0

# 參數(shù)說明
    -a :提交的鏡像作者;
    -c :使用Dockerfile指令來創(chuàng)建鏡像;
    -m :提交時的說明文字;
    -p :在commit時,將容器暫停。

dockerFile

特點

  • 每個指令都必須是大寫
  • 執(zhí)行順序是從上到下順序執(zhí)行
  • # 表示注釋
  • 每個指令都會創(chuàng)建提交一個新的鏡層,并提交(每個指令都是一個docker commit)
  • dockerFile是面向開發(fā)人員的;由開發(fā)人員構(gòu)建鏡像,就需要寫dockerFile文件,然后將鏡像交付給運維直接部署即可;不需要運維配置繁雜的jvm參數(shù)命令;
  • dockerFile正在逐漸稱為企業(yè)的交付標(biāo)注,所以開發(fā)人員必須要掌握;

dickerFile 指令

使用dockerFile創(chuàng)建鏡像,實際上就是用腳本文件的方式創(chuàng)建;腳本內(nèi)指令如下

  • FROM:指定基礎(chǔ)鏡像(它的媽媽是誰)
  • MAINTAINER:指定作者(告訴別人,是誰創(chuàng)造了它),一般都是姓名 + 郵箱
  • LABEL:指定標(biāo)簽信息
  • USER:設(shè)置容器運行時的用戶
  • RUN:在build過程要運行的命令  (在容器外運行,也就是在宿主機運行的命令,在這里我們可以給容器安裝一些應(yīng)用程序 yum install xxxx)
  • ADD:添加文件到鏡像中(往它肚子里放點東西),如果.tar.gz文件的話, 會自動解壓
  • COPY:類似ADD,將文件拷貝到鏡像,不會解壓壓縮文件
  • ENV:設(shè)置環(huán)境變量
  • VOLUME:設(shè)置文件掛載(給它一個存放行李的地方),默認是匿名掛載
  • EXPOSE:暴露端口,指定容器運行時開放的端口,運行也需要開放這個端口才能訪問  docker run -d  -p 8080:8080 鏡像id (打開一扇窗,讓風(fēng)(數(shù)據(jù))可以來去自如)
  • CMD:容器運行時要執(zhí)行的命令(在容器內(nèi)運行的命令),可用來運行默認要運行的程序,只有最后一個CMD才會運行,且只運行一次
  • ENTRYPOINT:和CMD一樣,但是可以追加命令;
  • ONBIUILD:當(dāng)構(gòu)建一個被繼承dockerFile,這個時候就會運行ONBUILD 指令,屬于觸發(fā)指令
  • WORKDIR:指定工作目錄,也就是登陸后默認進去的目錄;

指令用法

FROM

FROM centos

MAINTAINER

MAINTAINER yexindong<xxx@163.com>

USER

指定用戶運行,默認使用root用戶,在docker run 中可以通過 -u 選項來覆蓋USER指令的設(shè)置。

如果不是內(nèi)置帳戶,則必須首先創(chuàng)建該用戶;

USER root

ENV

# 環(huán)境變量可以隨便設(shè)置,MYPATH為key ,/user/local是值
ENV MYPATH /user/local

EXPOSE

# 開放單個端口
EXPOSE 80

# 開放多個端口
EXPOSE 22 80 8080 3306 8009 8090

ADD

# file 是你當(dāng)前宿主機的文件名稱
# /root/home 是你要將file打包到鏡像的目錄
ADD file /root/home

COPY

用法與ADD一致,區(qū)別是COPY指令不會解壓文件

COPY  file /root/home

CMD

容器內(nèi)運行命令,只能運行一個命令

# 第一種用法
CMD echo 11
# 第二種用法
CMD ["echo","33"]

ENTRYPOINT

容器內(nèi)運行命令,用法和CMD一致,區(qū)別是可以運行多個命令

# 定義多個 ENTRYPOINT 就可以運行多個命令
ENTRYPOINT ["ls","-l"]
ENTRYPOINT ["./start.sh"]
ENTRYPOINT ps -ef | grep tomcat

CMD 和 ENTRYPOINT 的區(qū)別

  • CMD 相同的指令只有最后一個會生效
  • ENTRYPOINT可以追加命令;

使用 dockerFile創(chuàng)建鏡像

那么現(xiàn)在我們就自己一個tomcat的鏡像,首先創(chuàng)建一個文件 dockerFile_1

vim dockerFile_1

腳本內(nèi)容如下,注意,腳本內(nèi)的關(guān)鍵字必須是大寫的,VOLUME 是匿名掛載的

FROM centos

RUN yum install net-tools.x86_64 -y
RUN yum -y install vim
RUN yum install vi -y
VOLUME ["/data/tomcat_file_1","/data/tomcat_file_2"]
EXPOSE 8080
# 打印當(dāng)前時間
CMD date
WORKDIR /root

創(chuàng)建好腳本文件后,就可以就行構(gòu)建了,注意后面那個點

docker build -f dockerFile_1 -t xindong_centos_3:1.1 .

# 說明
 -f 需要構(gòu)建的腳本文件
 -t tag的縮寫,構(gòu)建后的鏡像名稱:版本號

運行命令后展示以下信息,就表示已經(jīng)構(gòu)建成功了

Sending build context to Docker daemon  1.802GB
Step 1/8 : FROM centos
 ---> 5d0da3dc9764
Step 2/8 : RUN yum install net-tools.x86_64 -y
 ---> Using cache
 ---> a3d489e47eeb
Step 3/8 : RUN yum -y install vim
 ---> Using cache
 ---> f7dfc03c0fd9
Step 4/8 : RUN yum install vi -y
 ---> Using cache
 ---> c111382ba821
Step 5/8 : VOLUME ["data/tomcat_file_1","/data/tomcat_file_2"]
 ---> Using cache
 ---> 37a5e93cbe4a
Step 6/8 : EXPOSE 8080
 ---> Using cache
 ---> 1a2305853377
Step 7/8 : CMD date
 ---> Using cache
 ---> 8102785d418d
Step 8/8 : WORKDIR /root
 ---> Using cache
 ---> ad8a585d32e3
Successfully built ad8a585d32e3
Successfully tagged xindong_centos_3:latest

查看鏡像,這就是我們剛剛創(chuàng)建好的鏡像

[root@VM_0_5_centos ~]# docker images
REPOSITORY       TAG       IMAGE ID       CREATED          SIZE
xindong_tomcat   1.1       f72aa7e90980   37 seconds ago   680MB

運行這個鏡像

# 通過鏡像id運行
docker run -d 鏡像id/鏡像名稱

# 通過鏡像名稱運行
docker run -d 鏡像名稱:版本號


鏡像保存、加載

如果需要將自己構(gòu)建的鏡像發(fā)送給別人,又不想通過倉庫來共享,就可以用鏡像保存的功能,

鏡像保存

首先我們將鏡像以文件的方式保存到本地磁盤,使用save命令

docker save 鏡像id/鏡像名稱 -o /本地目錄/文件名稱
# 比如這樣
docker save ad8a585d32e3 -o /root/dockerFile/xx.tar
# 運行后,就可以看到,文件已經(jīng)保存成功了
[root@VM_0_5_centos dockerFile]# ll
total 356440
-rw------- 1 root root 364991488 Oct 28 18:45 xx.tar

加載已保存的鏡像

使用load命令加載,看到如下內(nèi)容,表示鏡像已經(jīng)加載成功了

[root@VM_0_5_centos dockerFile]# docker load -i /root/dockerFile/xx.tar 
2fefb3e7f055: Loading layer [==================================================>]   47.6MB/47.6MB
8b589f61fd94: Loading layer [==================================================>]  58.82MB/58.82MB
753a6b1d88c8: Loading layer [==================================================>]  19.99MB/19.99MB
Loaded image ID: sha256:ad8a585d32e34b301aab4b278704a908f6eca53884fd531a79859dd6054a22ae

接下來我們看看鏡像已經(jīng)加載好了,但是還沒有名字

[root@VM_0_5_centos dockerFile]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
<none>       <none>    ad8a585d32e3   2 hours ago   356MB

接下來使用tag命令給這個鏡像起個名字和版本號吧

[root@VM_0_5_centos dockerFile]# docker tag ad8a585d32e3 xindong_tomcat_2:1.0

# 在看看鏡像,已經(jīng)有名字了
[root@VM_0_5_centos dockerFile]# docker images
REPOSITORY         TAG       IMAGE ID       CREATED       SIZE
xindong_tomcat_2   1.0       ad8a585d32e3   2 hours ago   356MB

區(qū)別

  • 使用commit的話,其他人或者過一段時間后自己也不知道這個鏡像是怎么做出來的,都安裝了什么。。但是使用Dockerfile構(gòu)建的鏡像,我們能夠很清楚看到是執(zhí)行了哪些命令。
  • 既然使用docker commit這么不方便,那我們?yōu)槭裁催€要學(xué)習(xí)它呢?其實仔細想一下docker build的每一步構(gòu)建出來的鏡像是不是就是通過docker commit構(gòu)建出來的。因此學(xué)習(xí)docker commit可以讓我們更好的理解docker build;

其實說白了,不管是docker commit 和是dockefile,都是將目前已有的鏡像經(jīng)過處理后在生成一個新的鏡像,它們之間的流程圖如下

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用docker的python基礎(chǔ)鏡像時要指定patch版本原理

    使用docker的python基礎(chǔ)鏡像時要指定patch版本原理

    這篇文章主要為大家介紹了使用docker的python基礎(chǔ)鏡像時要指定patch版本原理,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-10-10
  • docker搭建rabbitmq集群環(huán)境的方法

    docker搭建rabbitmq集群環(huán)境的方法

    本篇文章主要介紹了docker搭建rabbitmq集群環(huán)境的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-07-07
  • DockerHub 鏡像倉庫的使用詳解

    DockerHub 鏡像倉庫的使用詳解

    這篇文章主要介紹了DockerHub 鏡像倉庫的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Docker中的images存儲路徑修改

    Docker中的images存儲路徑修改

    這篇文章主要介紹了Docker中的images存儲路徑修改方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 分享Ubuntu19無法安裝docker源問題

    分享Ubuntu19無法安裝docker源問題

    這篇文章主要介紹了Ubuntu19無法安裝docker源問題,本文通過實例代碼給大家講解的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-11-11
  • Docker多階段鏡像構(gòu)建的實現(xiàn)

    Docker多階段鏡像構(gòu)建的實現(xiàn)

    本篇文章主要介紹了Docker多階段鏡像構(gòu)建的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • docker-compose build使用參數(shù)args方式

    docker-compose build使用參數(shù)args方式

    這篇文章主要介紹了docker-compose build使用參數(shù)args方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • Docker基礎(chǔ) :網(wǎng)絡(luò)配置詳解

    Docker基礎(chǔ) :網(wǎng)絡(luò)配置詳解

    本篇文章將講述 Docker 的網(wǎng)絡(luò)功能,包括使用端口映射機制來將容器內(nèi)應(yīng)用服務(wù)提供給外部網(wǎng)絡(luò),以及通過容器互聯(lián)系統(tǒng)讓多個容器之間進行快捷的網(wǎng)絡(luò)通信,有興趣的可以了解下。
    2017-02-02
  • 詳解使用Docker容器來源碼編譯etcd

    詳解使用Docker容器來源碼編譯etcd

    這篇文章主要介紹了詳解使用Docker容器來源碼編譯etcd,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • docker 如何添加證書

    docker 如何添加證書

    這篇文章主要介紹了docker 如何添加證書的操作方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03

最新評論