【現(xiàn)學現(xiàn)忘Docker基礎】— 29.實戰(zhàn):自定義centos鏡像

目標:自定義鏡像wokong_centos措拇。

所用到的保留字指令:

  • FROM:基礎鏡像杠愧,當前新鏡像是基于哪個鏡像的。
  • MAINTAINER:鏡像維護者的姓名和郵箱地址配猫。
  • RUN:容器構建時需要運行的命令毛俏。
  • EXPOSE:當前容器對外暴露出的端口(端口映射)炭庙。
  • WORKDIR:指定在創(chuàng)建容器后,終端默認登陸進來的工作目錄煌寇,一個落腳點焕蹄,也就是pwd的位置。
  • ENV:用來在構建鏡像過程中設置環(huán)境變量阀溶。
  • CMD:指定一個容器啟動時要運行的命令腻脏。

新Docker命令:docker history,查看鏡像的變更歷史银锻。

1永品、前提說明

我們運行官方的centos鏡像

# 1.查看本地Docker鏡像
[root@192 home]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED        SIZE
centos       latest    300e315adb2f   3 months ago   209MB

# 2.查看正確運行的Docker容器,此時沒有容器正在運行击纬。
[root@192 home]# docker ps 
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

# 3.啟動centos鏡像
[root@192 home]# docker run -it centos
[root@ed92adeebf72 /]# 

# 4.在容器中執(zhí)行如下操作
# 4.1 查看容器當前工作目錄鼎姐,在根目錄
[root@ed92adeebf72 /]# pwd
/

# 4.2 使用vim命令編輯文件,發(fā)現(xiàn)沒有vim命令
[root@ed92adeebf72 /]# vim abc.txt 
bash: vim: command not found

# 4.3 查看Docker容器的IP地址更振,發(fā)現(xiàn)無法使用ifconfig命令炕桨。
[root@ed92adeebf72 /]# ifconfig
bash: ifconfig: command not found

出現(xiàn)以上問題是因為,contos官方鏡像為了保證鏡像的大小肯腕,是使用最小啟動系統(tǒng)的精簡版Linux系統(tǒng)献宫,其中會有很多命令沒有。

所以实撒,自定義wokong_centos鏡像的目的姊途,使我們自己的鏡像具備如下:

  • 登陸后的默認路徑為/tmp
  • 可以使用vim編輯器知态。
  • 支持查看網絡配置ifconfig命令捷兰。

2、編寫Dockerfile文件

在宿主機的home目錄中創(chuàng)建mydockerfile文件夾肴甸,用于存放我們編寫的dockerfile文件寂殉。

# 創(chuàng)建mydockerfile文件夾
[root@192 home]# ll
總用量 0
[root@192 home]# mkdir mydockerfile
[root@192 home]# ll
總用量 0
drwxr-xr-x. 2 root root 6 3月  20 14:59 mydockerfile

# 創(chuàng)建dockerfile文件:Dockerfile_centos
# 作為wokong_centos鏡像的dockerfile文件。
[root@192 mydockerfile]# vim Dockerfile_centos

提示:Dockerfile文件可以自定義原在。

Dockerfile文件內容如下:

FROM centos # 繼承了本地的centos鏡像
MAINTAINER wukong<wukong6688@126.com> # 鏡像作者的名字和郵箱信息

ENV MYPATH /tmp # 配置環(huán)境變量,是一個key:value模式的鍵值對存儲友扰。也可以用=號。
WORKDIR $MYPATH # 定義容器初始工作目錄庶柿,并引用了上邊的ENV變量村怪。

RUN yum -y install vim  # 容器構建時需要運行的命令。
RUN yum -y install net-tools 

EXPOSE 80 # 暴露80端口到服務器

CMD echo "success---------ok" 
CMD /bin/bash

說明:

我自定義的wokong_centos鏡像是以centos官方鏡像為基礎進行修改的浮庐。

而centos官方鏡像的Base鏡像是FROM scratch甚负。

Docker Hub中99%的鏡像都是通過scratch鏡像柬焕,作為最底層的鏡像,然后安裝和配置出所需要的軟件梭域,最后得到我們需要的鏡像斑举。

3、構建鏡像

執(zhí)行命令:docker build -f Dockerfile文件路徑 -t 新鏡像名字:TAG .

# 完整安裝過程
[root@192 mydockerfile]# docker build -f /home/mydockerfile/Dockerfile_centos \
> -t wokong_centos:1.6 .
Sending build context to Docker daemon  2.048kB
Step 1/9 : FROM centos
 ---> 300e315adb2f
Step 2/9 : MAINTAINER wukong<wukong6688@126.com>
 ---> Running in 38481c4819a3
Removing intermediate container 38481c4819a3
 ---> 96a9036d8cad
Step 3/9 : ENV MYPATH /tmp
 ---> Running in bb236291ff01
Removing intermediate container bb236291ff01
 ---> 6cf48c1a740a
Step 4/9 : WORKDIR $MYPATH
 ---> Running in 15ce861a59c1
Removing intermediate container 15ce861a59c1
 ---> 537898233556
Step 5/9 : RUN yum -y install vim
 ---> Running in 99f06b342bf8
CentOS Linux 8 - AppStream                      1.8 MB/s | 6.3 MB     00:03    
CentOS Linux 8 - BaseOS                         1.7 MB/s | 2.3 MB     00:01    
CentOS Linux 8 - Extras                          13 kB/s | 9.2 kB     00:00    
Last metadata expiration check: 0:00:01 ago on Sat Mar 20 08:10:25 2021.
Dependencies resolved.
================================================================================
 Package             Arch        Version                   Repository      Size
================================================================================
Installing:
 vim-enhanced        x86_64      2:8.0.1763-15.el8         appstream      1.4 M
Installing dependencies:
 gpm-libs            x86_64      1.20.7-15.el8             appstream       39 k
 vim-common          x86_64      2:8.0.1763-15.el8         appstream      6.3 M
 vim-filesystem      noarch      2:8.0.1763-15.el8         appstream       48 k
 which               x86_64      2.21-12.el8               baseos          49 k

Transaction Summary
================================================================================
Install  5 Packages

Total download size: 7.8 M
Installed size: 30 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm        157 kB/s |  39 kB     00:00    
(2/5): vim-enhanced-8.0.1763-15.el8.x86_64.rpm  3.0 MB/s | 1.4 MB     00:00    
(3/5): vim-filesystem-8.0.1763-15.el8.noarch.rp 181 kB/s |  48 kB     00:00    
(4/5): which-2.21-12.el8.x86_64.rpm             122 kB/s |  49 kB     00:00    
(5/5): vim-common-8.0.1763-15.el8.x86_64.rpm    5.7 MB/s | 6.3 MB     00:01    
--------------------------------------------------------------------------------
Total                                           1.5 MB/s | 7.8 MB     00:05     
CentOS Linux 8 - AppStream                      1.6 MB/s | 1.6 kB     00:00    
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
Importing GPG key 0x8483C65D:
 Userid     : "CentOS (CentOS Official Signing Key) <security@centos.org>"
 Fingerprint: 99DB 70FA E1D7 CE22 7FB6 4882 05B5 55B3 8483 C65D
 From       : /etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
Key imported successfully
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : which-2.21-12.el8.x86_64                               1/5 
  Installing       : vim-filesystem-2:8.0.1763-15.el8.noarch                2/5 
  Installing       : vim-common-2:8.0.1763-15.el8.x86_64                    3/5 
  Installing       : gpm-libs-1.20.7-15.el8.x86_64                          4/5 
  Running scriptlet: gpm-libs-1.20.7-15.el8.x86_64                          4/5 
  Installing       : vim-enhanced-2:8.0.1763-15.el8.x86_64                  5/5 
  Running scriptlet: vim-enhanced-2:8.0.1763-15.el8.x86_64                  5/5 
  Running scriptlet: vim-common-2:8.0.1763-15.el8.x86_64                    5/5 
  Verifying        : gpm-libs-1.20.7-15.el8.x86_64                          1/5 
  Verifying        : vim-common-2:8.0.1763-15.el8.x86_64                    2/5 
  Verifying        : vim-enhanced-2:8.0.1763-15.el8.x86_64                  3/5 
  Verifying        : vim-filesystem-2:8.0.1763-15.el8.noarch                4/5 
  Verifying        : which-2.21-12.el8.x86_64                               5/5 

Installed:
  gpm-libs-1.20.7-15.el8.x86_64         vim-common-2:8.0.1763-15.el8.x86_64    
  vim-enhanced-2:8.0.1763-15.el8.x86_64 vim-filesystem-2:8.0.1763-15.el8.noarch
  which-2.21-12.el8.x86_64             

Complete!
Removing intermediate container 99f06b342bf8
 ---> c58485da8447
Step 6/9 : RUN yum -y install net-tools
 ---> Running in a5e4191e9fb2
Last metadata expiration check: 0:00:19 ago on Sat Mar 20 08:10:25 2021.
Dependencies resolved.
================================================================================
 Package         Architecture Version                        Repository    Size
================================================================================
Installing:
 net-tools       x86_64       2.0-0.52.20160912git.el8       baseos       322 k

Transaction Summary
================================================================================
Install  1 Package

Total download size: 322 k
Installed size: 942 k
Downloading Packages:
net-tools-2.0-0.52.20160912git.el8.x86_64.rpm   1.7 MB/s | 322 kB     00:00    
--------------------------------------------------------------------------------
Total                                           195 kB/s | 322 kB     00:01     
Running transaction check
Transaction check succeeded.
Running transaction test
Transaction test succeeded.
Running transaction
  Preparing        :                                                        1/1 
  Installing       : net-tools-2.0-0.52.20160912git.el8.x86_64              1/1 
  Running scriptlet: net-tools-2.0-0.52.20160912git.el8.x86_64              1/1 
  Verifying        : net-tools-2.0-0.52.20160912git.el8.x86_64              1/1 

Installed:
  net-tools-2.0-0.52.20160912git.el8.x86_64                                     

Complete!
Removing intermediate container a5e4191e9fb2
 ---> 5e7dba859606
Step 7/9 : EXPOSE 80
 ---> Running in e5b3c11088d3
Removing intermediate container e5b3c11088d3
 ---> 5d8199d84409
Step 8/9 : CMD echo "success---------ok"
 ---> Running in 0d8b83e6008b
Removing intermediate container 0d8b83e6008b
 ---> 94ff44f5e94c
Step 9/9 : CMD /bin/bash
 ---> Running in 31a13253e359
Removing intermediate container 31a13253e359
 ---> 6441f63090d4
Successfully built 6441f63090d4
Successfully tagged wokong_centos:1.6

# 查看本地Docker鏡像病涨。
[root@192 mydockerfile]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
wokong_centos   1.6       6441f63090d4   10 seconds ago   291MB
centos          latest    300e315adb2f   3 months ago     209MB

我們可以看到新構建的wokong_centos鏡像富玷,比官方centos鏡像多了80多M。

說明:docker build命令最后有一個.既穆,這個.有的說表示當前目錄赎懦,有的說表示將當前目錄的上下文路徑中使用Dockerfile構建。

安裝后一種說法幻工,上面的構建命令中励两,.也可以替換成/home/mydockerfile/。(我嘗試了囊颅,可行)

但你就記住是固定寫法就好了当悔。

4、運行鏡像

我們把剛剛構建的wokong_centos鏡像啟動起來迁酸。

# 啟動進入wokong_centos容器
[root@192 mydockerfile]# docker run -it wokong_centos:1.6
[root@55e0b688c9fb tmp]#

# 1.查看默認工作路徑
[root@55e0b688c9fb tmp]# pwd
/tmp

# 2.查看當前容器IP
[root@55e0b688c9fb tmp]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 8  bytes 656 (656.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

# 3.查看是否可以使用vim編輯器
[root@55e0b688c9fb tmp]# vim --help
VIM - Vi IMproved 8.0 (2016 Sep 12, compiled Jun 18 2020 15:49:08)

usage: vim [arguments] [file ..]       edit specified file(s)
   or: vim [arguments] -               read text from stdin
   or: vim [arguments] -t tag          edit file where tag is defined
   or: vim [arguments] -q [errorfile]  edit file with first error

我們可以看到先鱼,進入容器的默認工作目錄變成了/tmp目錄了,而不是之前根目錄了奸鬓。

同時ifconfig命令焙畔,和vim編輯器都可以使用了。

5串远、列出鏡像的變更歷史

命令:docker history 鏡像名/ID宏多。

作用:可以列出本地鏡像的變更歷史。

示例:

# 查看本地Docker鏡像
[root@192 mydockerfile]# docker images
REPOSITORY      TAG       IMAGE ID       CREATED          SIZE
wokong_centos   1.6       6441f63090d4   17 minutes ago   291MB
centos          latest    300e315adb2f   3 months ago     209MB

# 查看wokong_centos鏡像的變更歷史
[root@192 mydockerfile]# docker history wokong_centos:1.6 
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
6441f63090d4   18 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "/bin…   0B       
94ff44f5e94c   18 minutes ago   /bin/sh -c #(nop)  CMD ["/bin/sh" "-c" "echo…   0B       
5d8199d84409   18 minutes ago   /bin/sh -c #(nop)  EXPOSE 80                    0B       
5e7dba859606   18 minutes ago   /bin/sh -c yum -y install net-tools             23.3MB   
c58485da8447   18 minutes ago   /bin/sh -c yum -y install vim                   58MB     
537898233556   18 minutes ago   /bin/sh -c #(nop) WORKDIR /tmp                  0B       
6cf48c1a740a   18 minutes ago   /bin/sh -c #(nop)  ENV MYPATH=/tmp              0B       
96a9036d8cad   18 minutes ago   /bin/sh -c #(nop)  MAINTAINER wukong<wukong6…   0B       
300e315adb2f   3 months ago     /bin/sh -c #(nop)  CMD ["/bin/bash"]            0B       
<missing>      3 months ago     /bin/sh -c #(nop)  LABEL org.label-schema.sc…   0B       
<missing>      3 months ago     /bin/sh -c #(nop) ADD file:bd7a2aed6ede423b7…   209MB 
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末澡罚,一起剝皮案震驚了整個濱河市伸但,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌留搔,老刑警劉巖更胖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異隔显,居然都是意外死亡却妨,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門括眠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來彪标,“玉大人,你說我怎么就攤上這事掷豺±萄蹋” “怎么了薄声?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長题画。 經常有香客問我默辨,道長,這世上最難降的妖魔是什么婴程? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任廓奕,我火速辦了婚禮抱婉,結果婚禮上档叔,老公的妹妹穿的比我還像新娘。我一直安慰自己蒸绩,他們只是感情好衙四,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著患亿,像睡著了一般传蹈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上步藕,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天惦界,我揣著相機與錄音,去河邊找鬼咙冗。 笑死沾歪,一個胖子當著我的面吹牛,可吹牛的內容都是我干的雾消。 我是一名探鬼主播灾搏,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼立润!你這毒婦竟也來了狂窑?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤桑腮,失蹤者是張志新(化名)和其女友劉穎泉哈,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體破讨,經...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡丛晦,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了添忘。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片采呐。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖搁骑,靈堂內的尸體忽然破棺而出斧吐,到底是詐尸還是另有隱情又固,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布煤率,位于F島的核電站仰冠,受9級特大地震影響,放射性物質發(fā)生泄漏蝶糯。R本人自食惡果不足惜洋只,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望昼捍。 院中可真熱鬧识虚,春花似錦、人聲如沸妒茬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽乍钻。三九已至肛循,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間银择,已是汗流浹背多糠。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浩考,地道東北人夹孔。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像怀挠,于是被迫代替她去往敵國和親析蝴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內容

  • 今天感恩節(jié)哎绿淋,感謝一直在我身邊的親朋好友闷畸。感恩相遇!感恩不離不棄吞滞。 中午開了第一次的黨會佑菩,身份的轉變要...
    迷月閃星情閱讀 10,567評論 0 11
  • 彩排完,天已黑
    劉凱書法閱讀 4,218評論 1 3
  • 表情是什么裁赠,我認為表情就是表現(xiàn)出來的情緒殿漠。表情可以傳達很多信息。高興了當然就笑了佩捞,難過就哭了绞幌。兩者是相互影響密不可...
    Persistenc_6aea閱讀 125,101評論 2 7