1)目標:自定義映象
wokong_centos
。2)所用到的保留字指令:
FROM
:基礎映象,當前新映象是基於哪個映象的。MAINTAINER
:映象維護者的姓名和郵箱地址。RUN
:容器構建時需要執行的命令。EXPOSE
:當前容器對外暴露出的埠(埠對映)。WORKDIR
:指定在建立容器後,終端預設登陸進來的工作目錄,一個落腳點,也就是pwd
的位置。ENV
:用來在構建映象過程中設定環境變數。CMD
:指定一個容器啟動時要執行的命令。3)新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.在容器中執行如下操作
# 4.1 檢視容器當前工作目錄,在根目錄
[root@ed92adeebf72 /]# pwd
/
# 4.2 使用vim命令編輯檔案,發現沒有vim命令
[root@ed92adeebf72 /]# vim abc.txt
bash: vim: command not found
# 4.3 檢視Docker容器的IP地址,發現無法使用ifconfig命令。
[root@ed92adeebf72 /]# ifconfig
bash: ifconfig: command not found
出現以上問題是因為,CentOS方映象為了保證映象的大小,是使用最小啟動系統的精簡版Linux系統,其中會有很多命令沒有。
所以,自定義wokong_centos
映象的目的,使我們自己的映象具備如下:
- 登陸後的預設路徑為
/tmp
。 - 可以使用
vim
編輯器。 - 支援檢視網路配置
ifconfig
命令。
2、編寫Dockerfile檔案
在宿主機的home
目錄中建立mydockerfile
資料夾,用於存放我們編寫的Dockerfile檔案。
# 建立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
# 建立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 # 配置環境變數,是一個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
映象,作為最底層的映象,然後安裝和配置出所需要的軟體,最後得到我們需要的映象。(
scratch
映象是一個空的映象,可以真正的從零開始構建屬於自己的映象。)
3、構建映象
執行命令: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