Dockerfile 作用:
Dockerfile 就是Docker 中用来一键安装项目所有依赖的一个“命令文件” ,这里面都是按照Docker 官方要求进行命令编写, build 时候 就会按照 类似shell 命令一步一步执行并构建一个镜像;
说明:
从应用软件的角度来看,DockerFile,docker镜像与docker容器分别代表软件的三个不同阶段。
DockerFile 是软件的原材料 (代码)
Docker 镜像则是软件的交付品 (.apk)
Docker 容器则是软件的运行状态 (客户下载安装执行)
DockerFile 面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可!
Dockerfile 常用指令:
关键字:
FROM #基础镜像,当前新镜像是基于哪个镜像的
MAINTAINER #镜像维护者信息 ,一般是姓名+邮箱
RUN #容器构建时所需要运行的命令
EXPOSE #当前容器对外保留出的端口
WORKDIR #指定在创建容器后,终端默认登录进来的工作目录
ENV #构建镜像过程中设置环境变量
ADD #将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
COPY #类似ADD,拷贝宿主机的文件和目录到镜像中
VOLUME #容器数据卷,用于数据保存和持久化工作
CMD #指定一个容器启动时要运行的命令,dockerfile中可以有多个CMD指令,但只有最后一个生效
ENTRYPOINT #指定一个容器启动时要运行的命令,和CMD一样
ONBUILD #当构建一个被继承的Dockerfile时运行的命令,父镜像在被子镜像继承后,父镜像的ONBUILD被触发
使用Dockerfile构建一个自己的Centos镜像
1、编写Dockerfile
查看官方默认的CentOS的情况:
目的:使我们自己的镜像具备如下:登录后的默认路径、vim编辑器、查看网络配置ifconfig支持
准备编写Dockerfile文件
[root@wxy home]# mkdir mycentos
[root@wxy home]# cd mycentos/
[root@wxy mycentos]# ls
[root@wxy mycentos]# mkdir dockerfile-test
[root@wxy mycentos]# ls
dockerfile-test
[root@wxy mycentos]# cd dockerfile-test/
[root@wxy dockerfile-test]# vim mydockerfile-centos
[root@wxy dockerfile-test]# cat mydockerfile-centos
FROM centos
MAINTAINER wxy<12345@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 9800
CMD echo $MYPATH
CMD echo "--------end---- -"
CMD /bin/bash
2、构建
docker build -f mydockerfile-centos -t mycentos:0.1 .
注意最后一个.别漏了 , .表示当前目录
[root@wxy dockerfile-test]# docker build -f mydockerfile-centos -t mycentos:0.1 .
Sending build context to Docker daemon 2.048 kB
Step 1/10 : FROM centos
---> 5d0da3dc9764
Step 2/10 : MAINTAINER wxy<12345@qq.com>
---> Running in 3a1cb3e6e5a4
---> 802bfb07b9cc
Removing intermediate container 3a1cb3e6e5a4
Step 3/10 : ENV MYPATH /usr/local
---> Running in 4deaa628d401
---> c2fef24e1a8b
Removing intermediate container 4deaa628d401
Step 4/10 : WORKDIR $MYPATH
---> 97d27980f64c
Removing intermediate container 1ee53e441e70
Step 5/10 : RUN yum -y install vim
---> Running in ab569156525f
CentOS Linux 8 - AppStream 5.3 MB/s | 8.4 MB 00:01
CentOS Linux 8 - BaseOS 8.8 MB/s | 4.6 MB 00:00
CentOS Linux 8 - Extras 12 kB/s | 10 kB 00:00
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-16.el8 appstream 1.4 M
Installing dependencies:
gpm-libs x86_64 1.20.7-17.el8 appstream 39 k
vim-common x86_64 2:8.0.1763-16.el8 appstream 6.3 M
vim-filesystem noarch 2:8.0.1763-16.el8 appstream 49 k
which x86_64 2.21-16.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-17.el8.x86_64.rpm 421 kB/s | 39 kB 00:00
(2/5): vim-filesystem-8.0.1763-16.el8.noarch.rp 1.3 MB/s | 49 kB 00:00
(3/5): which-2.21-16.el8.x86_64.rpm 1.4 MB/s | 49 kB 00:00
(4/5): vim-common-8.0.1763-16.el8.x86_64.rpm 16 MB/s | 6.3 MB 00:00
(5/5): vim-enhanced-8.0.1763-16.el8.x86_64.rpm 2.8 MB/s | 1.4 MB 00:00
--------------------------------------------------------------------------------
Total 6.1 MB/s | 7.8 MB 00:01
warning: /var/cache/dnf/appstream-02e86d1c976ab532/packages/gpm-libs-1.20.7-17.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
CentOS Linux 8 - AppStream 1.6 MB/s | 1.6 kB 00:00
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-16.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-16.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-16.el8.x86_64 3/5
Installing : gpm-libs-1.20.7-17.el8.x86_64 4/5
Running scriptlet: gpm-libs-1.20.7-17.el8.x86_64 4/5
Installing : vim-enhanced-2:8.0.1763-16.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-16.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-16.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-17.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-16.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-16.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-16.el8.noarch 4/5
Verifying : which-2.21-16.el8.x86_64 5/5
Installed:
gpm-libs-1.20.7-17.el8.x86_64 vim-common-2:8.0.1763-16.el8.x86_64
vim-enhanced-2:8.0.1763-16.el8.x86_64 vim-filesystem-2:8.0.1763-16.el8.noarch
which-2.21-16.el8.x86_64
Complete!
---> 7760f2961d01
Removing intermediate container ab569156525f
Step 6/10 : RUN yum -y install net-tools
---> Running in 1b744805bd84
Last metadata expiration check: 0:00:08 ago on Sat Jan 15 06:27:34 2022.
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 6.1 MB/s | 322 kB 00:00
--------------------------------------------------------------------------------
Total 320 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!
---> aa6cc4dd61fd
Removing intermediate container 1b744805bd84
Step 7/10 : EXPOSE 9800
---> Running in a8f69025a496
---> a01c616f0ae3
Removing intermediate container a8f69025a496
Step 8/10 : CMD echo $MYPATH
---> Running in ca8f58a9b757
---> 858b4f5cc829
Removing intermediate container ca8f58a9b757
Step 9/10 : CMD echo "--------end---- -"
---> Running in 7f6a92f39011
---> 319cf5a42b4a
Removing intermediate container 7f6a92f39011
Step 10/10 : CMD /bin/bash
---> Running in 36e18074ee53
---> 87d59549a036
Removing intermediate container 36e18074ee53
Successfully built 87d59549a036
3、运行
docker run -it 新镜像名称:TAG
[root@wxy dockerfile-test]# docker run -it mycentos:0.1
[root@65bc0003ac9c local]# docker ps -a
bash: docker: command not found
[root@65bc0003ac9c local]# pwd
/usr/local
[root@65bc0003ac9c local]# vim
[root@65bc0003ac9c local]# vim test
[root@65bc0003ac9c local]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.18.0.4 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80::42:acff:fe12:4 prefixlen 64 scopeid 0x20<link>
ether 02:42:ac:12:00:04 txqueuelen 0 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 8 bytes 656 (656.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
inet6 ::1 prefixlen 128 scopeid 0x10<host>
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
[root@65bc0003ac9c local]#
可以看到,我们自己的镜像已经支持vim、ifconfig命令。