深入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
---
深入理解Dockerfile:指令详解与最佳实践

最低0.47元/天 解锁文章
2030

被折叠的 条评论
为什么被折叠?



