Docker-Dockerfile讲解(三)

作者介绍:简历上没有一个精通的运维工程师。希望大家多多关注作者,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。

我们在上一章,讲了虚拟化,虚拟化是把硬件虚拟化,然后创建出来的虚拟机完全隔离,而Docker则是软件(内核)虚拟化,他的隔离性会低于虚拟机。我们将通过3-4周来讲解Docker相关内容,由于涉及到内容较多,就不一一列出来具体的细节,主要从以下几个方面来讲解:

Docker基本情况

Docker基本命令

Dockerfile(本小节属于)

Docker镜像

Docker仓库

Docker原理

Docker网络&存储&日志

Docker-Compose

Docker番外篇

前面讲的Dockerfile里面的参数相对功能比较固定,也不存在覆盖的问题,相对都比较简单,只要理解对应的逻辑即可。

今天要讲的最后2个参数CMD和ENTRYPOINT都是容器的启动参数,我们前面也讲过,如果没有前台进程,容器是无法启动成功的。CMD和ENTRYPOIN他们的作用是一样的,每个参数都有2个写法,他们之间还有覆盖关系,而且docker run的时候注入的参数也会存在注入和覆盖的关系。

两种写法

Shell

等同于sh -c ping 127.0.0.1

例如:

css 复制代码
FROM centos:7
CMD ping 127.0.0.1

Exec(推荐方式)

等同于ping 127.0.0.1

例如:

css 复制代码
FROM centos:7
ENTRYPOINT ["ping", "127.0.0.1"]

异同

1.CMD参数被覆盖

css 复制代码
FROM centos:7
CMD ["ping", "127.0.0.1"]

2.ENTRYPOINT参数未被覆盖

css 复制代码
FROM centos:7
ENTRYPOINT ["ping", "127.0.0.1"]

这里容器启动失败,是因为ENTRYPOINT参数不会被覆盖,但是docker run的命令会作为ENTRYPOINT的参数传递进去就启动命令就变成

复制代码
ping 127.0.0.1 ping 127.0.0.1 

而这个启动参数组合到一起就变成了错误参数无法启动。

传入正确的参数,则可以正常启动,启动参数就变成

css 复制代码
ping  127.0.0.1 -I 127.0.0.1

3.同时存在CMD和ENTRYPOINT

下面2个操作和我曾经的记忆出现了一点偏差。

3.1 这个写法是CMD未生效

css 复制代码
FROM centos:7
CMD ping 127.0.0.1
ENTRYPOINT ping 192.168.31.204

3.2 这个写法是CMD作为ENTRYPOINT的参数

less 复制代码
FROM centos:7
CMD ["127.0.0.1"]
ENTRYPOINT ["ping"]

经过我们我们上面的例子,我们应该基本上掌握了如何给自己的容器编写合适的Dockerfile,当然实际上我们可能用不上这么复杂的逻辑,但是掌握了这些知识,则会加强对Docker的理解和排错,后面我们将创建几个需求来然后来编写具体的Docker。

运维小路

一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!

关注微信公众号《运维小路》获取更多内容。

相关推荐
邪修king2 小时前
Re:Linux 系统篇(三十五):进程间通信Chapter2:从匿名管道到进程池:Linux 进程间通信实战(深度理解「先描述,再组织」)
java·linux·运维
2301_777998342 小时前
ARP协议进阶:ARP缓存、RARP与ARP欺骗原理解析
linux·服务器·网络·网络协议·缓存
运维行者_3 小时前
应用性能监控怎么选?从调用链到用户体验的五个能力维度
运维·服务器·数据库·人工智能·mysql·性能优化·应用性能监控
考虑考虑7 小时前
nginx路由重写
运维·后端·自动化运维
Zenova EdgeOS9 小时前
Linux 内核日志 dmesg 进阶实战:从现场过滤到持久化闭环
linux·运维·服务器
郝亚军10 小时前
ec_private.pem的生成方法
linux·运维·服务器
NendoZen10 小时前
Arch Linux解决Grub无法SAVEDEFAULT问题(uki启动问题)
linux·运维·服务器
Elastic 中国社区官方博客11 小时前
Elasticsearch:安装自行管理的 Elastic Stack 集群
大数据·运维·服务器·数据库·elasticsearch·搜索引擎·全文检索
忆挽篱笙歌11 小时前
进程控制管理
linux·运维·服务器
Escalating_xu12 小时前
【Linux 网络编程】connect 的断线重连:用状态机写一个能恢复连接的 TCP 客户端
linux·网络·tcp/ip