Docker File介绍
docker file是用来构建dok cer镜像的文件!命令参数脚本!
构建步骤:
1、编写一个docker file文件
2、docker build构建成为一个镜像
3、docker run运行镜像
4、docker push发布镜像(Docker Hub、阿里云镜像仓库!)
Docker Hub搜索镜像centos
选择1个版本点击后进入Github
跳转后的路径就是Dockerfile
FROM scratch
ADD centos-7-x86_64-docker.tar.xz /
LABEL \
org.label-schema.schema-version="1.0" \
org.label-schema.name="CentOS Base Image" \
org.label-schema.vendor="CentOS" \
org.label-schema.license="GPLv2" \
org.label-schema.build-date="20200809" \
org.opencontainers.image.title="CentOS Base Image" \
org.opencontainers.image.vendor="CentOS" \
org.opencontainers.image.licenses="GPL-2.0-only" \
org.opencontainers.image.created="2020-08-09 00:00:00+01:00"
CMD ["/bin/bash"]
很多官方镜像都是基础包,很多功能没有,我们通常会自己搭建自己的镜像!
官方既然可以制作镜像,那我们也可以!
Docker File构建过程
基础知识:
1、每个保留关键字(指令)都是必须是大写字母
2、执行从上到下顺序执行
3、#表示注释
4、每一个指令都会创建提交一个新的镜像层,并提交!
dockerfile是面向开发的,我们以后要发布项目,做镜像,就需要编写dockerfile文件, 这个文件十分简单!
Docker镜像逐渐成为企业交付的标准,必须要掌握!
步骤:
DockerFile:构建文件, 定义了一切的步骤, 源代码
Dockerlmages:通过Docker File构建生成的镜像, 最终发布和运行的产品!
Docker容器:容器就是镜像运行起来提供服务的
开发,部署,运维。。。缺一不可!
Docker File指令
FROM #基础镜镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤:tomcat镜像, 这个tomcat压缩包!添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #暴露端口配置
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ON BUILD #当构建一个被继承Docker File这个时候就会运行ON BUILD 的指令。触发指令。
COPY #类似ADD, 将我们文件拷贝到镜像中 ENV #构建的时候设置环境变量!
实战测试
Docker Hub中99%镜像都是从这个基础镜像过来的FROM scratch, 然后配置需要的软件和配置来进行的构建。
构建自己的镜像
默认的centos镜像只包含了最基础的东西
编写dockerfile配置文件
创建/data目录,再创建dockerfile目录,用来专门存放dockerfile文件。
编写一个dockerfile文件,命名为dockerfile-centos
FROM centos
MAINTAINER lwenwu<lwenwu1999@qq.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD echo $MYPATH
CMD echo "-------end--------"
CMD /bin/bash
通过dockerfile文件构建镜像
docker build -f /data/dockerfile/dockerfile-centos -t mycentos:0.1 .
[root@localhost dockerfile]# docker build -f /data/dockerfile/dockerfile-centos -t mycentos:0.1 .
Sending build context to Docker daemon 2.048kB #发送build信息
Step 1/10 : FROM centos
---> 0d120b6ccaa8 #拿到基础镜像,跟docker images下的ID相同,复用基础镜像
Step 2/10 : MAINTAINER lwenwu<lwenwu1999@qq.com> #维护者信息
---> Running in 26a8e7585dcd
Removing intermediate container 26a8e7585dcd
---> df741b928f75
Step 3/10 : ENV MYPATH /usr/local
---> Running in 7b723400348d
Removing intermediate container 7b723400348d
---> fc0f488845c1
Step 4/10 : WORKDIR $MYPATH
---> Running in 94198e6a23cb
Removing intermediate container 94198e6a23cb
---> df3275a301cf
Step 5/10 : RUN yum -y install vim #下载vim
---> Running in 48e8afc0df08
CentOS-8 - AppStream 605 kB/s | 5.8 MB 00:09
CentOS-8 - Base 2.2 MB/s | 2.2 MB 00:00
CentOS-8 - Extras 10 kB/s | 8.1 kB 00:00
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
vim-enhanced x86_64 2:8.0.1763-13.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-13.el8 AppStream 6.3 M
vim-filesystem noarch 2:8.0.1763-13.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: 31 M
Downloading Packages:
(1/5): gpm-libs-1.20.7-15.el8.x86_64.rpm 51 kB/s | 39 kB 00:00
(2/5): vim-filesystem-8.0.1763-13.el8.noarch.rp 314 kB/s | 48 kB 00:00
(3/5): vim-enhanced-8.0.1763-13.el8.x86_64.rpm 1.3 MB/s | 1.4 MB 00:01
(4/5): which-2.21-12.el8.x86_64.rpm 314 kB/s | 49 kB 00:00
(5/5): vim-common-8.0.1763-13.el8.x86_64.rpm 1.8 MB/s | 6.3 MB 00:03
--------------------------------------------------------------------------------
Total 1.7 MB/s | 7.8 MB 00:04
#下载警告,没什么问题
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
CentOS-8 - AppStream 158 kB/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-12.el8.x86_64 1/5
Installing : vim-filesystem-2:8.0.1763-13.el8.noarch 2/5
Installing : vim-common-2:8.0.1763-13.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-13.el8.x86_64 5/5
Running scriptlet: vim-enhanced-2:8.0.1763-13.el8.x86_64 5/5
Running scriptlet: vim-common-2:8.0.1763-13.el8.x86_64 5/5
Verifying : gpm-libs-1.20.7-15.el8.x86_64 1/5
Verifying : vim-common-2:8.0.1763-13.el8.x86_64 2/5
Verifying : vim-enhanced-2:8.0.1763-13.el8.x86_64 3/5
Verifying : vim-filesystem-2:8.0.1763-13.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-13.el8.x86_64
vim-enhanced-2:8.0.1763-13.el8.x86_64 vim-filesystem-2:8.0.1763-13.el8.noarch
which-2.21-12.el8.x86_64
Complete! #编译成功
Removing intermediate container 48e8afc0df08
---> 3e3387c3a894
Step 6/10 : RUN yum -y install net-tools #下载net-tools
---> Running in 90f391b8fe89
Last metadata expiration check: 0:00:12 ago on Thu Nov 5 13:18:48 2020.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
net-tools x86_64 2.0-0.51.20160912git.el8 BaseOS 323 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 323 k
Installed size: 1.0 M
Downloading Packages:
net-tools-2.0-0.51.20160912git.el8.x86_64.rpm 1.4 MB/s | 323 kB 00:00
--------------------------------------------------------------------------------
Total 184 kB/s | 323 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.51.20160912git.el8.x86_64 1/1
Running scriptlet: net-tools-2.0-0.51.20160912git.el8.x86_64 1/1
Verifying : net-tools-2.0-0.51.20160912git.el8.x86_64 1/1
Installed:
net-tools-2.0-0.51.20160912git.el8.x86_64
Complete! #又编译成功
Removing intermediate container 90f391b8fe89
---> da4ad4cd2938
Step 7/10 : EXPOSE 80
---> Running in 96f829f08850
Removing intermediate container 96f829f08850
---> 3d2d0365e5c7
Step 8/10 : CMD echo $MYPATH
---> Running in 00344184eafe
Removing intermediate container 00344184eafe
---> 005ee0708a17
Step 9/10 : CMD echo "-------end--------"
---> Running in c7019a9bcfd9
Removing intermediate container c7019a9bcfd9
---> c964b172bf9e
Step 10/10 : CMD /bin/bash
---> Running in 9900c5470588
Removing intermediate container 9900c5470588
---> f804e311e9aa
Successfully built f804e311e9aa
Successfully tagged mycentos:0.1 #构建完成
[root@localhost dockerfile]#
测试运行
查看构建的镜像
运行构建的容器
docker run -it mycentos:0.1 #使用镜像名称要加版本号,否则会下载最新的镜像
构建的镜像vim ifconfig命令可以使用,工作目录为配置的/usr/local
查看镜像构建历史
docker history ID
查看官方镜像是如何构建的
通过查看官方镜像的构建历史可以学习镜像是如何构建的。
CMD和ENTRYPOINT区别
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
测试CMD
只有最后一个会执行
进入dockerfile目录,编写dockerfile-cmd-test文件
构建镜像
docker build -f dockerfile-cmd-test -t cmdtest .
执行镜像,ls -a命令生效
docker run ID
追加-l命令参数测试,
docker: Error response from daemon: OCI runtime create failed: container_linux.go:349: starting container process caused "exec: \"-l\": executable file not found in $PATH": unknown.
追加的-l命令替换了CMD["ls""-a"]命令,-l不是命令,所以报错。
命令被替换
测试ENTRYPOINT
进入dockerfile目录,编写dockerfile-entrypoint-test文件
构建镜像
docker build -f dockerfile-entrypoint-test -t entrytest .
执行镜像,ls -a命令生效
docker run ID
追加-l命令参数测试
docker run 4c60442a1328 -l
追加-l生效
不会替换掉dockerfile文件中的内容。