Docker>05 - Dockerfile 保留字指令

扯淡:

前面章节已经初步使用 Dockerfile 构建了镜像。Dockerfile 其实就是镜像的构建文件,由一系列的参数和特定指令构成的文件。本章将介绍 Dockerfile 的保留字指令。

springboot、springcloud、docker学习目录:【传送门】 

保留字指令:


基本指令:

FROM:基础镜像,当前镜像是基于那个镜像的。

MAINTAINER:作者  邮箱。

RUN:容器构建时需要运行的命令。

EXPOSE:暴露端口号 启动容器的时候还需使用 –p 指定端口。

WORKDIR:指定在创建容器后,终端默认登录后进来的工作目录,一个落脚点,默认根目录,通常绝对路径,CMD ENTRYPOINT 都会在这个目录下执行。

ENV:构建镜像的过程中设置环境变量, 构建和运行时都有效可以使用$引用。

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

COPY:拷贝文件和目录到镜像中,将从构建上下文目录中<源路径>的文件/复制到新的一层镜像内<目标路径>的位置。语法:COPY src dest  COPY [“src”, “desc”]。

VOLUME:容器数据卷, 数据保存和持久化。

USER:指定该镜像由什么用户运行  不指定由root 运行。

CMD:指定容器启动时要运行默认的命令,Dockerfile中可以有多个cmd , 但只有最后一个生效,。

ENTERPOINT:指定容器启动时要运行的命令。

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

COPY 和 ADD 区别:

相同:都是从宿主机拷贝文件到容器。

不同:ADD 支持 URL 和 压缩包。

3、CMD 和 ENTERPOINT 区别:

相同:都是指定容器启动程序和参数。

不同:CMD 会被docker run 之后的参数替换;ENTERPOINT docker run 之后的参数会被当做参数传递给ENTRYPOINT , 之后形成新的命令组合。追加

Dockerfile 使用步骤:


1、利用上面保留字指令和参数编写 Dockerfile 文件。

2、docker build 构建镜像。

3、docker run 利用镜像创建容器。

Dockerfile 执行流程:


编写好的Dockerfile 指令从上往下执行,# 代表注释。

流程:

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

2、执行一条指令对容器做出修改。并对修改做出提交,构建成一个新的镜像。

3、Docker 再基于刚刚提交的镜像运行一个新的容器。

4、执行下一条指令,对容器做出修改并提交为一个新的镜像。

5、如此循环,直到所有指令执行完毕。

例如tomcat镜像:

自定义一个 centos 镜像:


1、编写 Dockerfile 

# 自定义一个centos
FROM centos
MAINTAINER ron
# 登录之后的工作目录 落脚点
# WORKDIR /
# 使用环境变量的方式指定工作目录
ENV mypath /usr/local
WORKDIR $mypath

# 数据卷 
VOLUME ["/dataVolume"]

# 基础镜像不支持vim 和 ipconfig命令
# 构建容器时运行的命令
RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80
CMD /bin/bash
#ENTRYPOINT /bin/bash
# 子镜像继承此镜像(父镜像)时执行
ONBUILD RUN echo "hello ron, father image is extended..."

2、docker build 构建镜像

可以看到镜像构建的过程。

3、docker history 查看镜像的构建顺序

从下往上看。

4、docker run 创建容器

可以看到进入到容器后的工作目录为/usr/local,与Dockerfile中指定的一致。

5、docker inspect 查看容器信息

可以看到容器的端口和数据卷信息。

注意:

EXPOSE 指令只是声明一个端口,运行时并没有打开该端口,仅仅提醒用户使用该端口,若运行时 使用 -P(upper case) 指定端口,会自动映射该端口。

总结:

1、Dockerfile 是镜像的构建文件
2、所有保留字指令全部大写,后面至少跟随一个参数。格式:指令名称 参数。
3、指令从上到下执行,每一条指令都会基于前一个运行的容器创建一个新的镜像层,并提交。
4、cratch : 基础 base 镜像,类似 java 中 Object 类。
5、三部曲:编写Dockerfile、docker build、docker run。


个人学习分享
更多 springboot、springcloud、docker 文章,关注微信公众号吧:

猜你喜欢

转载自blog.csdn.net/cp026la/article/details/86677516
今日推荐