目標:自定義鏡像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