Dockerfile学习

简介: Dockerfile学习笔记


一、Dockerfile简介
随着容器技术的普及,编写正确的dockerfile文件成为了一项基本技能,今天简要说一下dockerfile中的一些学习笔记

在现阶段,我们将Dockerfile、Docker镜像和Docker容器看待为软件的三个不同阶段。

Dockerfile面向开发--->Docker镜像成为交付标准--->Docker容器则涉及部署与运维

二、Dockerfile保留字指令
1、FROM
基础镜像,即当前新镜像是基于哪个镜像创建的。

基于openjdk:8 创建镜像

FROM openjdk:8
2、MAINTAINER
镜像维护者的姓名和邮箱地址

MAINTAINER 宁在春<crush@163.com>
3、RUN
容器构建时需要运行的指令 

RUN mkdir -p /conf/my.cn

创建一个空白文件的方式如下

RUN bash -c 'mkdir -p /文件目录'

4、EXPOSE
当前容器对外暴露的端口

暴露出MyCat的所需端口

EXPOSE 8066 9066
5、WORKDIR
指定在创建容器后,终端默认登录的进来工作目录

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

WORKDIR /usr/local/mycat
6、ENV
用来在构建镜像过程中设置环境变量

用来在构建镜像过程中设置环境变量ENV MYCAT_HOME=/usr/local/mycat

这个环境变量可以在后续的任何RUN指令中使用,这就如同在命令前面指定了环境变量前缀一样;也可以在其它指令中直接使用这些环境变量。

如:

RUN $MYCAT_HOME/mycat
7、ADD 和 COPY
ADD:

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

ADD centos-6-docker.tar.xz /
COPY:

类似ADD,拷贝文件和目录到镜像中。

将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像内的<目标路径>位置

COPY src destCOPY ["src" "dest"]
8、VOLUME
容器数据卷,用于数据持久化和数据保存。

将mycat的配置文件的地址暴露出映射地址,启动时直接映射宿主机的文件夹VOLUME /usr/local/mycat

9、CMD 和 ENTRYPOINT
CMD

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

shell格式:CMD<命令>
exec 格式:CMD ["可执行文件“,”参数1“,”参数2“.....]
Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run 之后的参数替换。

ENTRYPOINT

指定一个容器启动时要运行的命令。

ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数。

区别:

在这里先简单说明一下区别,你可以将CMD理解为覆盖

CMD cat /conf/my.cnfCMD /bin/bash
这两条指令都写在Dockerfile文件中,只会执行CMD /bin/bash ,而不会执行CMD cat /conf/my.cnf,因为CMD /bin/bash把上一条直接覆盖掉了。

而ENTRYPOINT则不同,你可以将ENTRYPOINT简单理解为追加。

主要体现在docker run 上,如果使用dockerfile文件中最后是CMD结尾,则在运行时不能够额外追加命令,否则会覆盖掉Dockerfile中的CMD命令。

而Dockerfile文件中最后一行为ENTRYPOINT结尾时,你可以在docker run 命令后追加一些命令.

10、ONBUILD
当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后,父镜像的onbuild被触发。

三、Dockerfile执行流程分析:
docker从基础镜像运行一个容器
执行一条指令并对容器作出修改
执行类似docker commit的操作提交一个新的镜像层。
docker再基于刚提交的镜像运行一个新容器
执行dockerfile中的下一条指令直到所有指令都执行完成

相关文章
|
6月前
|
应用服务中间件 Shell nginx
Docker进阶:深入了解 Dockerfile
Dockerfile 是定义 Docker 镜像内容和构建步骤的文本文件,用于定制化镜像构建,包括基础镜像选择、软件安装和环境变量设置等。其优点在于支持容器化趋势,简化快速部署和交付,保证环境一致性,实现资源隔离和安全性,以及促进持续集成与持续部署。Dockerfile 指令如 FROM(指定基础镜像)、RUN(执行命令)、CMD(容器启动命令)和 EXPOSE(声明端口)。编写规则包括使用大写指令、创建 .dockerignore 文件排除无关文件等。
170 0
|
6月前
|
缓存 Shell Go
dockerfile笔记
dockerfile笔记
70 0
|
1月前
|
关系型数据库 MySQL Linux
DockerFile的介绍
Docker操作 (九)
|
6月前
|
JSON 关系型数据库 数据格式
Docker-Dockerfile学习
Docker-Dockerfile学习
67 0
|
Shell Linux 开发工具
Docker Dockerfile探究
Docker Dockerfile探究
94 2
|
Java Shell Linux
41-Dockerfile-Dockerfile简介
41-Dockerfile-Dockerfile简介
|
应用服务中间件 开发工具 Docker
Docker学习视频关于DockerFile部分
Docker学习视频关于DockerFile部分
|
应用服务中间件 Shell nginx
|
Docker 容器
Dockerfile笔记
照着写就行
111 0
Dockerfile笔记
|
Java Linux Shell
Dockerfile 是什么 | 学习笔记
快速学习 Dockerfile 是什么
Dockerfile 是什么 | 学习笔记