Dockerfile介绍及常用保留指令

从本文开始,咱们将介绍docker的另外一个技术点:dockerfile.我们来看看DockerFile相关的知识点,我们将怎么学习?
不知道为什么被锁定了。说我的图片违规了。也不知道哪里违规了

1:DockerFile是什么?

2:DockerFile构建过程解析

3:常用的保留字指令

4:案例及小总结。如下图:

cbdcdda930cb5721c08c8d302eddd883.png

dockerFile是什么?

DockerFile是用来构建Docker镜像的文本文件。是由一条条构建镜像所需要的指令和参数构成的脚本。

dockerFile工作图:

a78b9094af809747511b9fdd0db99374.png

构建步骤:

编写DockerFile文件>>docker build命令构建镜像>>docker run 镜像运行

DcokerFile构建过程

1:DockerFile内容基础知识

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

b、指令按照从上到下的顺序执行

c、#表示注释

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

Dcoker执行DockerFile的大致流程

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

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

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

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

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

DockerFile、Docker镜像与Docker容器之间的关系:

从应用软件的角度来看,这三者分别代表了软件的三个不同阶段:

Dockerfile:是软件的原材料;

Docker镜像:是软件的交付产品;

Docker容器则可以认为是软件镜像的运行状态,也就是依照镜像运行的容器实例。

DockerFile是面向开发,Docker镜像成为交付的标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当了docker体系的基石。

DockerFile:需要定义饿Dockerfile,Dockerfile定义二了进程需要的一切东西。Dockerfile涉及的内容包括执行代码或者是文件、环境变量、依赖包、运行时候环境、动态链接库、操作系统的发行版、服务进程和内核进程等等;

Docker镜像,在用Dockerfile定义一个文件之后,docker build时候会产生一个Docker镜像,当运行Docker镜像时会真正开始提供服务;

Docker容器,容器是直接提供服务的。

984d30948de4f00820b0fd639565f14e.png
88b1433a71d6b8786758a46254cc807a.png

接着,咱们来讲解DockerFile常用的保留指令。常用的指令如下图:

c98225cba11de46056254a33834f2caf.png

参数说明:

197b527fb519bb37871578da08f663a4.png
42a1a23257e24b5c5f9b0e897a949d66.png

|

参数

|

说明

|

备注

|
|

FROM

|

基础镜像。当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板。第一条必须是from

|

出现位置:一般都是在dockerfile的第一行。 当前镜像哪个基础镜像

|
|

MAINTAINER

|

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

|
|
|

RUN

|

75e6ebe5e27d16d11c0d4dd20dd13432.png

|

shell格式: RUN<命令行命令> #<命令行命令>等同于,在终端操作的shell命令。 例如:RUN yum -y install vim exec格式: RUN["可执行文件","参数1","参数2"] #例如: #RUN ["./test.php","dev","offline"] 等价于 RUN ./test.php dev offline

|
|

EXPOSE

|

当前容器队尾暴露出的端口

|
|
|

WORKDIR

|

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

|

例如: docker -it ubuntu bash 进入后,pwd.可以发现是 / 的

|
|

USER

|

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

|
|
|

ENV

|

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

|

31f06ade6885e60e77896b27b5be3001.png

|
|

ADD

|

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

|
|
|

COPY

|

类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<源路径>的文件/目录 复制到新的一层镜像内的<目标路径>

|

91fbd84f4a90f083cdfe47574e78e01b.png

|
|

VOLUME

|

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

|
|
|

CMD

|

见下文CMD命令

|

CMD和RUN命令的区别: CMD是在docker run时候运行的 RUN是在docker build是运行的

|
|

ENTRYPOINT

|

见下文的ENTRYPOIN命令

|
|

CMD命令:

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

CMD启动容器命令

CMD指令和RUN指令像是。也是两种格式:shell 和exec.

b338ac2d710379d5bba63d02a487a520.png

注意:

Dockerfile中可以有多个cmd指令,但只有最后一个生效,CMD会被docker run之后的参数替换。可以参考官网Tomcat的dockerfile演示讲解:

1adf467de5e43520801cdb9cc4972d1a.png

CMD会被docker run之后的参数替换演示:

我们启动tomcat:

docker run -it -p 8080:8080 镜像id

这种启动后,访问可以正常的。因为这种启动后,直接就是使用了tomcat的dockerfile中的

CMD["catalina.sh","run"]的

如果我们使用以下命令:

docker run -it -p 8080:8080 镜像id /bin/bash

这个时候,通过浏览器访问,就不行了。为什么呢?

因为CMD会被docker run之后的参数替换

也就是dockerfile中的CMD["catalina.sh","run"]被替换成了CMD["/bin/bash","run"]了。/bin/bash替换了catalina.sh。这样相当于tomcat没启动

1aa30b26a798c770dcbfd82532439e8c.png

CMD和RUN命令的区别:

CMD是在docker run时候运行的

RUN是在docker build是运行的

ENTRYPOINT命令

80411afb12f38f2ad397140274bd84d5.png

ENTRYPOINT命令格式:

46b13ecbff9b2a92a2e13cc0a20d02c7.png
5ee5d0ac5ece2092f8d167c20101d678.png

总结:

786a6675447d20fb974f773b13252271.png

大家好,我是凯哥Java(kaigejava),乐于分享,每日更新技术文章,欢迎大家关注“凯哥Java”,及时了解更多。让我们一起学Java。也欢迎大家有事没事就来和凯哥聊聊~~~

本系列教程直通车

直通车,本系列教程已发布文章,快速到达,《Docker学习系列》教程已经发布的内容如下:

【图文教程】Windows11下安装Docker Desktop

【填坑】在windows系统下安装Docker Desktop后迁移镜像位置

【Docker学习系列】Docker学习1-docker安装

【Docker学习系列】Docker学习2-docker设置镜像加速器

【Docker学习系列】Docker学习3-docker的run命令干了什么?docker为什么比虚拟机快?

【Docker学习系列】Docker学习2-常用命令之启动命令和镜像命令

【Docker学习系列】Docker学习系列3:常用命令之容器命令

【Docker学习系列】Docker学习4-常用命令之重要的容器命令

【Docker教程系列】Docker学习5-Docker镜像理解

【Docker教程系列】Docker学习6-Docker镜像commit操作案例

【Docker学习教程系列】7-如何将本地的Docker镜像发布到阿里云

【Docker学习教程系列】8-如何将本地的Docker镜像发布到私服?

「Docker学习系列教程」9-Docker容器数据卷介绍

「Docker学习系列教程」10-Docker容器数据卷案例

Docker学习11-Docker常规方式安装软件

「Docker学习系列教程」基础篇小总结及高级篇预告

docker高级篇1-dockeran安装mysql主从复制

docker高级篇2-分布式存储之三种算法

docker高级篇第二章-分布式存储之实战案例:3主3从redis集群扩容配置

docker高级篇第二章-分布式存储之实战案例:主从容错切换迁移案例

Docker高级:Redis集群实战!4主4从缩容到3主3从,怎么处理?

【Docker学习教程系列汇总】笔记及遇到问题解决文章

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 221,198评论 6 514
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,334评论 3 398
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 167,643评论 0 360
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,495评论 1 296
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,502评论 6 397
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,156评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,743评论 3 421
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,659评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,200评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,282评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,424评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,107评论 5 349
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,789评论 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,264评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,390评论 1 271
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,798评论 3 376
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,435评论 2 359

推荐阅读更多精彩内容