Docker学习笔记(4)-dockerfile详细使用以及CMD和ENTRYPOINT区别

本文详细解读了Dockerfile的作用,介绍了如何使用它创建镜像,并着重比较CMD与ENTRYPOINT在Docker容器启动中的不同。通过实例演示,帮助读者理解这两个指令在实际项目中的应用和选择策略。
摘要由CSDN通过智能技术生成

dockerfile作用

首先我们查看官方文档对于dockerfile的解释

Docker can build images automatically by reading the instructions from a Dockerfile. A Dockerfile is a text document that contains all the commands a user could call on the command line to assemble an image. Using docker build users can create an automated build that executes several command-line instructions in succession.
(Docker 可以通过读取 Dockerfile 中的指令自动构建镜像。 Dockerfile 是一个文本文档,其中包含用户可以在命令行上调用以组合图像的所有命令。使用 docker build 用户可以创建一个连续执行多个命令行指令的自动构建。)

这是官方对于dockerfile作用的解释。看英文也看的很明白,我们平时要多读英文,读着读着查着查着慢慢就会了。

说白了dockerfile就是可以用一段命令来创建一个镜像。可以把整个你的项目,项目需要的环境,在这一个dockerfile里面全部构建完毕。到时候创建镜像就可以当做环境软件安装包。发布直接创建容器即可。

dockerfile指令集

网上找了一张图片,这个比喻的特别恰当,我们来编写dockerfile时就可以参照下图来做。

在这里插入图片描述
在这里插入图片描述

dockerfile初步尝试

我们看完上面图之后我们来做一个初步的尝试,做啥事都要勇于尝试,你不试试你怎么知道自己是真的不行?hhh

我们来构建一个简单的centos系统,同时安装一些我们需要的命令

FROM centos:latest  #基础镜像
MAINTAINER HONG<1034996580@qq.com> #标注作者

RUN yum -y install vim #安装命令

EXPOSE 80
CMD echo "start"
ENTRYPOINT ["ls","-a"]

在这里插入图片描述
创建完成,可以发现docker解析dockerfile是一行一行跑的。

我们看看镜像里面是不是已经有了
在这里插入图片描述
现在看到我们的mycentos2已经有镜像了 大小比基础的要大几十M 因为我们装了一些功能。看来阉割真的能减少很多空间呀
我们现在来启动下 顺便看看CMD和ENTRYPOINT的区别

CMD:The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.

意思是,cmd给出的是一个容器的默认的可执行体。也就是容器启动以后,默认的执行的命令。重点就是这个“默认”。意味着,如果docker run没有指定任何的执行命令或者dockerfile里面也没有entrypoint,那么,就会使用cmd指定的默认的执行命令执行。同时也从侧面说明了entrypoint的含义,它才是真正的容器启动以后要执行命令。

  • CMD三种使用方法
The CMD instruction has three forms:
 
CMD ["executable","param1","param2"] (exec form, this is the preferred form)
CMD ["param1","param2"] (as default parameters to ENTRYPOINT)
CMD command param1 param2 (shell form)

ENTRYPOINT:An ENTRYPOINT allows you to configure a container that will run as an executable.

这句话意思就是说ENTRYPOINT才是真正容器启动后的执行体。这也就是入口的含义

在这里插入图片描述
上图也表明了CMD和ENTRYPOINT的三种使用方式

我们说说区别

CMD在官方文档说的时候有个词汇我们重点关注,默认 默认什么意思? 我们在docker run 的时候 后面如果没加参数命令
那么就会默认执行CMD的命令行 如果加了 就会覆盖CMD的命令 就是这个意思 所以有多个CMD 也就只会最后一条生效。

话不多说实战我们练一练

FROM centos

CMD ["ls","-a"]
[root@VM_0_16_centos ~]# docker build -f ./dockerfile-test -t dockerfile-test .

在这里插入图片描述
镜像打好了
我们跑起来

docker run dockerfile-test2

在这里插入图片描述

[root@VM_0_16_centos ~]# docker run dockerfile-test2 -a
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-a": executable file not found in $PATH: unknown.

我们尝试追加参数 ,发现是不可以的
必须写全部命令来替换CMD的默认命令 也就是需要将默认的全部替换掉

  • 测试ENTRYPOINT
FROM centos

ENTRYPOINT ["ls","-a"]
docker build -f ./dockerfile-test -t dockerfile-entrypoint .

在这里插入图片描述
如果里面使用的是ENTRYPOINT 是可以直接去追加的

我们直接这么理解吧

CMD 后面如果执行 ls -a
我们在run后面追加 -l的话 会默认执行-l 但是-l不是命令 所以会报错
但是ENTRYPOINT 后面加参数 他是可以加上去
也就是追加的就变成 ls -a -l 这样执行是没有问题的
这就是两者的区别

用着用着就会了 呵呵哈哈哈

Docker是一种开源的容器化平台,它可以帮助开发者将应用程序和服务以容器的形式进行打包、分发和部署。而Gluster是一个分布式存储系统,它可以将多个服务器的存储空间整合在一起,形成一个统一的、可扩展的存储池。 CentOS是一种基于Red Hat Enterprise Linux(RHEL)的开源操作系统,它提供了稳定性和安全性,并且具备广泛的应用支持。 Dockerfile是用于构建Docker镜像的脚本文件,它可以定义容器的运行环境、设置启动命令等。 那么,docker-gluster-centos Dockerfile是指在CentOS系统上构建一个包含Gluster分布式存储系统的Docker镜像的脚本文件。 在docker-gluster-centos Dockerfile中,我们可以使用CentOS的官方镜像作为基础镜像,并在此基础上安装和配置Gluster分布式存储系统。可以通过使用适当的软件包管理工具(如yum)来安装Gluster软件包和依赖项。然后,可以使用Dockerfile中的指令来启动和配置Gluster节点、创建Gluster卷以及设置其他必要的参数和选项。 通过构建docker-gluster-centos Docker镜像,我们可以在任何支持Docker的环境中快速部署和运行Gluster分布式存储系统,而无需手动安装和配置。这样可以大大简化Gluster的部署过程,提高运维效率,并且能够实现更加轻量级、可移植和可扩展的存储解决方案。 总而言之,docker-gluster-centos Dockerfile是用于在CentOS系统上构建包含Gluster分布式存储系统的Docker镜像的脚本文件,使得Gluster的部署和运行变得更加简单、可靠和可扩展。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员若风+

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值