学习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~

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

相关推荐
我要用代码向我喜欢的女孩表白26 分钟前
k8s入门(不教部署,部署跟着文档来就行了)
云原生·容器·kubernetes
大虾别跑32 分钟前
docker安装zabbix +grafana
docker·zabbix·grafana
Code哈哈笑38 分钟前
【Java 学习】初识类和对象、this引用
java·学习·microsoft
慕卿扬1 小时前
基于python的机器学习(三)—— 关联规则与推荐算法
python·学习·机器学习·推荐算法
LuckyLay1 小时前
Spring学习笔记_38——@RequestParam
笔记·学习·spring·param·request
wsxlgg1 小时前
docker搭建jpom
docker
FLGB1 小时前
Docker 安装单机版mysql 并持久化数据
mysql·docker·容器
杰哥的技术杂货铺2 小时前
Centos 7 安装 Docker 最新版本
linux·docker·centos
虾球xz2 小时前
游戏引擎学习第15天
学习·游戏引擎
moxiaoran57532 小时前
Centos使用docker搭建Graylog日志平台
docker·centos·graylog