dockerfile基础

2020-05-15  本文已影响0人  裂开的汤圆

dockerfile与容器、镜像之间的关系

什么是dockerfile

dockefile是用来构建docker镜像的构建文件,是由一系列命令和参数构成的脚本

dockerfile构建镜像的过程

1.手动编写一个dockerfile文件
2.通过docker build命令,获得一个自定义的镜像

dockerfile语法规则

1.每条保留字指令都必须为大写字母,且后面要跟随至少一个参数
2.指令按照从上到下顺序执行
3.#表示注释
4.每条指令都会创建一个新的镜像层,并对镜像进行提交

docker执行dockerfile的大致流程

1.docker从基础镜像运行一个容器
2.执行一条指令并对容器做出修改
3.执行类似docker commit的操作提交一个新的镜像层
4.docker再基于刚提交的镜像运行一个新容器
5.执行dockerfile中的下一条指令直到所有指令全部执行完毕

保留字指令

# 用于指定当前镜像是基于哪个基础镜像,类似于子类继承父类
FROM 基础镜像
FROM scratch(最基础的镜像,类似于JAVA中的Object类)

# 声明镜像维护者的姓名和邮箱地址
MAINTAINER 姓名 邮箱
MAINTAINER The CentOS  Project <cloud-ops@centos.org>

# 镜像构建时需要运行的linux命令
RUN linux命令
RUN useradd -r wb

# 绑定端口
EXPOSE 8080

# 指定在容器创建后,终端默认登陆进来的工作目录,一个落脚点
WORKDIR 容器路径
WORKDIR /var/data

# 设置环境变量,下面指定的变量MY_PATH可以在后续的任何RUN指令中使用,使用方式如 WORKDIR $MY_PATH,需要通过美元符号进行引用。
ENV MY_PATH /usr/test

# 将宿主机目录下的文件或目录拷贝到镜像中
# ADD和COPY的区别在于,ADD命令会自动处理URL和解压tar压缩包,而COPY是直接将文件拷贝,不进行处理
COPY 源路径 目标路径

# 指定容器数据卷,下面的路径是容器路径,对应的宿主机路径会由docker进行分配
VOLUME ["/dataVolume1", "/dataVolume2"]

# 指定一个容器启动时要运行的命令
# Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替换
CMD /bin/bash

# 指定一个容器启动时要运行的命令
# ENTRYPOINT的目的和CMD一样,都是在指定容器启动程序及参数
# ENTRYPOINT不会被docker run之后的参数替换,而是追加参数
ENTRYPOINT 

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

猜你喜欢

热点阅读