深入DockerFile

深入DockerFile

一、概述

Dockerfile由一行行命令语句组成, 并且支持以 # 开头的注释行。 一般而言, Dockerfile 可以分为四部分基础镜像信息、维护者信息、镜像操作指令、启动时执行指令。

指令 说明
FROM 指定基础镜像
MAINTAINER 指定维护者信息, 已经过时, 可以使用 LABEL maintainer=xxx 来替代
RUN 运行命令v
CMD 指定启动容器时默认的命令 v
ENTRYPOINT 指定镜像的默认入口 . 运行命令 v
EXPOSE 声明镜像内服务监听的端口 v
ENV 指定环境变量, 可以在 docker run 的时候使用 -e 改变 v ; 会被固化到 i mage 的 config 里面
ADD 复制指定的 src 路径下的内容到容器中的 dest 路径下, src 可以为 url 会自动下载, 可以为 tar 文件, 会自动解压
COPY 复制本地主机的 src 路径下的内容到镜像中的 dest 路径下, 但不会自动解压等
LABEL 指定生成镜像的元数据标签信息
VOLUME 创建数据卷挂载点
USER 指定运行容器时的用户名或 UID
WORKDIR 配置工作目录, 为后续的 RUN 、 CMD 、 ENTRYPOINT 指令配置工作目录
ARG 指定镜像内使用的参数(如版本号信息等) , 可以在 build 的时候, 使用 --build args 改变 v
OBBUILD 配置当创建的镜像作为其他镜像的基础镜像是, 所指定的创建操作指令
STOPSIGNAL 容器退出的信号值
HEALTHCHECK 健康检查
SHELL 指定使用 shell 时的默认 shell 类型
FROM  指定基础镜像

MAINTAINER  指定维护者信息,可以没有

RUN  你想让它干啥(在命令前面加上RUN即可)

ADD  添加宿主机的文件到容器内,还多了一个自动解压的功能
# RUN tar -Zxf /opt/xx.tgz 	# 报错!该tgz文件不存在! !

COPY  作用和ADD是一样的,都是拷贝宿主机的文件到容器内, COPY就是仅仅拷贝

WORKDIR  相当于cd命令,设置当前工作目录

VOLUME  设置目录映射,挂载主机目录

EXPOSE  指定对外的端口,在容器内暴露一个端口,端口 EXPORT 80

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

ENTRYPOINT	作用和CMD一样,都是在指定容器启动程序以及参数。
# 当指定了ENTRYPOINT之后,CMD指令的语义就有了变化,而是把CMD的内容当作参数传递给ENTRYPOINT指令。

ARG	 设置环境变量
# ARG只是用于构建镜像需要设置的变量,容器运行时就消失了

ENV   和ARG一样,都是设置环境变量
# 区别在于ENV无论是在镜像构建时,还是容器运行,该变量都可以使用

USER  用于改变环境,用于切换用户

二、常用指令

1、LABEL

标注镜像的一些说明信息。

LABEL multi.label1="value1 " multi.label2="value2" other="value3"
LABEL multi.label1="value1 " \ 
      multi.label2="value2" \ 
      other="value3"

2、RUN

RUN 指令在当前镜像层顶部的新层执行任何命令, 并提交结果, 生成新的镜像层。

生成的提交映像将用于 Dockerfile 中的下一步。 分层运行 RUN 指令并生成提交符合 Docker 的核心概 念, 就像源代码控制一样。

RUN:构建时期的指令
CMD:运行时期的指令

exec 形式可以避免破坏 shell 字符串, 并使用不包含指定 shell 可执行文件的基本映像运行 RUN 命令。 可以使用 SHELL 命令更改 shell 形式的默认 shell 。 在 shell 形式中, 您可以使用 \ (反斜杠) 将一条 RUN 指令继续到下一行。

RUN <command> ( shell 形式 , /bin/sh - c 的方式运行, 避免破坏 shell 字符串 ) 
RUN [ " executable", " param1 " , " param2" ] ( exec 形式 )

测试案例

[root@jacson ~/dockerfile]#vi Dockerfile 
FROM alpine
LABEL maintainer=leifengyang xx=aa
ENV msg=' hello atguigu itdachang'
RUN echo $msg
RUN ["echo","$msg"]    
RUN /bin/sh -c 'echo $msg' 
RUN ["/bin/sh","-c" ,"echo $msg"]       
CMD sleep 1

结果:

[root@jacson ~/dockerfile]#docker build --no-cache -t demo:v1.3 .
Sending build context to Docker daemon  2.048kB
Step 1/8 : FROM alpine
 ---> c059bfaa849c
Step 2/8 : LABEL maintainer=leifengyang xx=aa
 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值