学习docker第五弹-----高级篇start-Dockerfile

docker目录

  • [1 Dockerfile是什么](#1 Dockerfile是什么)
  • [2 Dockerfile能干嘛](#2 Dockerfile能干嘛)
  • [3 如何书写Dockerfile](#3 如何书写Dockerfile)
    • [3.1 Dockerfile构建过程解析](#3.1 Dockerfile构建过程解析)
    • [3.2 小总结](#3.2 小总结)
    • [3.3 Dockerfile的基本知识](#3.3 Dockerfile的基本知识)
    • [3.5 保留字](#3.5 保留字)
  • [4 后记](#4 后记)

1 Dockerfile是什么

Dockerfile顾名思义就是跟docker有关的文件,官方一点就是用于构建docker镜像的文本文件,是由指令和参数组成的脚本。

tips:Dockerfile的第一个字母要大写,不要问我为什么?比如张三就是叫张三。

Dockerfile官网链接给到大家啦,自行按需查看捏~
https://docs.docker.com/reference/dockerfile/

2 Dockerfile能干嘛

我们之前了解过,相对于传统的虚拟机来说,docker的速度能够达到秒级,是因为docker的镜像都是十分基础的,里面的内核都是必须的 ,不必要的东西都需要后天的去增加功能。比如基础的ubuntu是没有vim、ifconfig的,这就需要我们手动操作,那不难理解,随着我们需求的增加,可能不断需要新的增加内容,因为我们需求的不断变化,使得我们重复安装内容的操作逐渐麻烦,所以Dockerfile应运而生

我的理解是Dockerfile能够批量进行操作,运行命令和参数,便于我们创建所需的镜像。

3 如何书写Dockerfile

构建三部曲:编写Dockerfile------> docker build构建镜像--------> docker run

3.1 Dockerfile构建过程解析

Docker执行Dockerfile的大致流程

1 docker从基础镜像运行一个容器

2 执行一条指令并对容器作出修改

3 执行类似docker commit的操作提交一个新的镜像层

4 docker再基于刚提交的镜像运行一个新容器

5 执行Dockerfile中的下一条指令直到所有指令都执行完成

3.2 小总结

应用软件 的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,Dockerfile是软件的原材料,Docker镜像是软件的交付产品,Docker容器则可以认为是软件镜像的运行态,也即依照镜像运行的容器实例。

3.3 Dockerfile的基本知识

1 每条保留字指令都必须为大写字母,且后面要跟随至少一个参数;

2 指令按照从上到下,顺序执行;

3 #表示注释;

4 每条指令都会创建一个新的镜像层并对镜像进行提交。

是不是看到这里就想,啥是保留字啊,我刚学的时候也一头雾水了。

3.5 保留字

注意,上文提到过,保留字都是大写字母且至少跟随一个参数

FROM

基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是FROM,类似与基类或者说父类

MAINTAINER

镜像维护者的姓名和邮箱地址

RUN 有两种方式

RUN yum -y install vim --------相当于shell命令

RUN ["可执行文件", "参数1", ...] -------------exec格式

我们用shell命令多一点,可以发现它就是RUN加上我们的Linux命令,更加适合中国宝宝的学习方式,更好地迁移学习。
RUN是在 docker build 时运行的

EXPOSE

当前容器对外暴露出的端口

bash 复制代码
#暴露80端口
EXPOSE 80 

WORKDIR

指定在创建容器后,终端默认登录的进来工作目录,一个落脚点

ENV

用来在构建镜像过程中设置环境变量

USER

指定该镜像以什么样的用户去执行,如果都不指定,默认是root

VOLUME

容器数据卷,用于数据保存和持久化工作

ADD

将宿主机目录下的文件拷贝进镜像且会自动处理URL和解压tar压缩包

CMD

指定容器启动后要干的事情

CMD指令的格式和 RUN 类似,也是两种格式:

1 shell 格式: CMD <命令>

2 exec格式: CMD["可执行文件","参数1","参数2"...]

3 参数列表格式:CMD["参数1","参数2"...],在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数

注意:

1 Dockerfile中可以有多个 CMD 指令,但只有最后一个生效,CMD会被 docker run 之后的参数替换

2 CMDRUN的区别:CMD是在docker run时运行;RUN是在docker build时运行

ENTRYPOINT

类似于CMD,用来指定一个容器启动时要运行的命令,但不会被docker run后面的命令覆盖,而且这些命令行参数会被当作参数送给ENTRYPOINT指令指定的程序。

ENTRYPOINT 可以和 CMD一起使用,一般是变参才会使用CMD,这里的CMD等于是在给ENTRYPOINT传参。
就是说,当指定了ENTRYPOINT后,CMD的含义就发生了变化,不再是直接运行其命令,而是将CMD的内容作为参数传递给ENTRYPOINT指令,他们的组合会变成<ENTRYPOINT> "<CMD>"
优点:

在执行docker run的时候可以指定ENTRYPOINT运行所需的参数。
注意:

如果Dockerfile中存在多个ENTRYPOINT指令,仅最后一个生效

4 后记

下一篇讲一下Dockerfile的案例,记得来看啊~

BB啊 ,如果本文档对您有一点点用的话,记得给美丽好学的我点个大大的赞,谢谢BB~

今天带了大圈的耳环尊嘟很好看,很开心,素颜也好看,嘻嘻!愿我们都有一个好心情

相关推荐
Johny_Zhao2 小时前
Docker + CentOS 部署 Zookeeper 集群 + Kubernetes Operator 自动化运维方案
linux·网络安全·docker·信息安全·zookeeper·kubernetes·云计算·系统运维
zwjapple3 小时前
docker-compose一键部署全栈项目。springboot后端,react前端
前端·spring boot·docker
DKPT4 小时前
Java桥接模式实现方式与测试方法
java·笔记·学习·设计模式·桥接模式
代码老y5 小时前
Docker:容器化技术的基石与实践指南
运维·docker·容器
DuelCode6 小时前
Windows VMWare Centos Docker部署Springboot 应用实现文件上传返回文件http链接
java·spring boot·mysql·nginx·docker·centos·mybatis
好好研究6 小时前
学习栈和队列的插入和删除操作
数据结构·学习
新中地GIS开发老师7 小时前
新发布:26考研院校和专业大纲
学习·考研·arcgis·大学生·遥感·gis开发·地理信息科学
SH11HF8 小时前
小菜狗的云计算之旅,学习了解rsync+sersync实现数据实时同步(详细操作步骤)
学习·云计算
Frank学习路上8 小时前
【IOS】XCode创建firstapp并运行(成为IOS开发者)
开发语言·学习·ios·cocoa·xcode
Chef_Chen9 小时前
从0开始学习计算机视觉--Day07--神经网络
神经网络·学习·计算机视觉