您的位置:首页 > 运维架构 > Docker

Dockerfile 指令简介

2017-05-18 00:00 701 查看
一、常用指令

FROM指令说明

FROM <image>
FROM <image>:<tag>


已经存在的镜像

基础镜像

必须是第一条非注释指令

MAINTAINER指令说明

MAINTAINER <name>


指定镜像的作者信息,包括镜像的所有者和联系信息

RUN指令说明

RUN <command> (shell模式)
RUN ["executable","param1","param2"] (exec模式)


shell模式

/bin/sh -c command

例如:RUN echo hello

exec模式

例如:RUN ["/bin/bash","-c","echo hello"]

两条RUN指令合并为一条RUN指令,例如:

RUN yum update && yum install -y nginx

EXPOSE指令说明

EXPOSE <port> [<port>...]


指定运行该镜像的容器使用的端口

二、COM、ENTERYPONINT用来指定在容器运行时运行的命令

COM指令说明

CMD ["executable","param1","param2"] (exec模式)
CMD command param1 param2 (shell模式)


说明:CMD指令指定容器运行的默认行为,CMD指令会被RUN命令参数覆盖

ENTERYPOINT指令说明

ENTERYPOINT ["executable","param1","param2"] (exec模式)
ENTERYPOINT command param1 param2 (shell模式)


ENTERYPOINT指令不会被docker run 命令中指定的启动命令所覆盖,可以使用docker run --entrypoint覆盖

三、ADD、COPY、VOLUME用来设置镜像的目录和文件

都是将文件或目录复制到使用Dockerfile构建的镜像中

ADD指令说明

ADD <src>...<dest>
ADD [<src>...<dest>] (适用于文件路径中有空格的情况)

注意:ADD指令自动对压缩包进行解压缩

COPY指令说明

COPY <src>...<dest>
COPY [<src>...<dest>] (适用于文件路径中有空格的情况)


ADD vs COPY

ADD 包含类似tar的解压功能

如果单纯复制文件,Dokcer推荐使用COPY

docker推荐使用 curl、wget 来获取文件

VOLUME指令说明

VOLUME["/data"]

用来想基于镜像创建的容器添加卷,一个卷可以存在一个或多个容器的特定目录,这个目录可以绕过联合文件系统,并提供如共享数据、数据持久化的功能

四、镜像在构建及容器运行时的环境设置

WORKDIR指令说明

WORKDIR /path/to/workdir


在容器内部设置工作目录

在构建中为后续的指令指定工作目录

通常使用绝对路径,如果使用相对路径,那么路径会一直传递下去

例如:

WORKDIR /a

WORKDIR b

WORKDIR c

RUN pwd

/a/b/c

ENV指令说明

用来设置环境变量,作用于构建构 成中或运行过程中

ENV <key> <value>
ENV <key>=<value>...


USER指令说明

指定容器以什么用户的身份来运行

例如: USER nginx

USER user USER uid

USER user:group USER uid:gid

USER user:gid USER uid:group

如果不指定USER,那么默认使用root用户

五、类似触发器的指令

ONBUILD指令说明

为镜像添加触发器

当一个镜像被其他镜像作为基础镜像时执行,会在构建过程中插入指令

例子:

此Dockerfile文件指令实现基于Docker官方的的Jenkins镜像,构建包含Maven功能的自定义镜像功能。

#
# MAINTAINER        Howard.Ma <howardma@xxxx.com>
# DOCKER-VERSION    1.12.6
#
# Docker base docker.io/jenkins : Dockerfile for building Jenkins_Maven images
#

# 必须是第一条非注释指令
FROM docker.io/jenkins

# 指定镜像的作者信息,包括镜像的所有者和联系信息
MAINTAINER Howard.Ma <howadma@xxxx.com>

# 指定容器以什么用户的身份来运行
USER root

# 在容器内部设置工作目录,在构建中为后续的指令指定工作目录
WORKDIR /var/maven3

# 将文件或目录复制到使用Dockerfile构建的镜像中,注意ADD指令自带解压缩功能
ADD apache-maven-3.5.0-bin.tar.gz /var/maven3

# 用来设置环境变量,作用于构建构过程或运行过程中
ENV MAVEN_HOME=/var/maven3/apache-maven-3.5.0
#ENV MAVEN_OPTS=[-Xms256m -Xmx512m]
ENV PATH=$PATH:$MAVEN_HOME/bin

# 运行指令
RUN echo "MAVEN_HOME=/var/maven3/apache-maven-3.5.0\nMAVEN_OPTS=-Xms256m -Xmx512m\nPATH=$PATH:$MAVEN_HOME/bin" >> /etc/profile

欢迎大家关注懒也要有正确的方式公众号

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Docker Dockerfile