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

docker学习笔记七dockerfile

2017-12-29 09:55 411 查看
基础镜像信息,维护者信息,镜像操作指令和容器启动时执行命令

INSTRUCTION arguments包括FROM MAINTAINER RUN等

1、FROM 指定所创建镜像的基础镜像,如果本地不存在默认去docker hub上下载

格式FROM或者FROM:

任何dockerfile第一提哦啊指令必须为FROM。可同时使用多个FROM(每个镜像一次)创建多个镜像

2、MAINTAINER

维护者信息MAINTAINER

MAINTAINER lili.guo@mljr.com

该信息会写入生成镜像的author属性域中

3、RUN运行指定命令

RUN 或者 RUN [“executable”, “param1” ,”param2”] 后一个指令会被解析为json数组,因为必须使用双引号

前者默认在shell终端运行命令即/bin/sh -c 后者使用exec执行不会启动shell环境

指定其他终端类型可以通过RUN [“/bin/bash” , “-c” ,”echo hello”]

每条RUN指令在当前镜像的基础上执行指定命令,应提交为新的镜像,当命令较长是可以使用\来换行

4、CMD 用来指定启动容器时默认执行的命令

CMD [“executable”, “param1”, “param2”] 使用exec执行,是推荐使用的方式

CMD command param1 param2在/bin/sh中执行,提供给需要交互的应用

CMD [“param1”, “param2”] 提供给ENTRYPOINT默认参数

每个dockerfile只能有一条CMD命令,如果制定了多条,最后一条会被执行

如果用户启动容器时手动制定了运行的命令(作为run的参数)则会覆盖掉CMD指定的命令

5、LABEL

用来指定生成镜像的元数据标签信息

LABEL = = =

例如:

LABEL version=”1.0”

LABEL description=”test”

6、EXPOSE

声明镜像内服务所监听的端口

格式为EXPOSE [….]

例如:

EXPOSE 22 808443

该指令只是起到声明作用,并不会自动完成端口映射

7、ENV

指定环境变量,在镜像生成过程中会被后续RUN命令使用,在镜像启动的容器中也会存在

ENV 或者ENV =

例如:

ENV PG_MAJOR 9.3

ENV PG_VERSION 9.3.4

ENV PATH /usr/local/postgres-PGMAJOR/bin/PATH

指令指定的环境变量在运行时可以被覆盖

如docker run –env = built_image

8、ADD

改命令将复制指定的路径下的内容到容器中的路径

ADD

其中可以是dockerfile所在目录的一个相对路径(文件或者目录),也可以是一个URL,还可以是一个TAR文件(如果是tar文件会自动解压到dest)

dest可以是镜像内的绝对路径或者相对于工作目录的相对路径

ADD *.c /code/

9、COPY

COPY

复制本机src所在目录下的内容到镜像中的dest下,目标路径不存在时会自动创建

当使用本地目录为源目录是,推荐使用COPY

10、ENTRYPOINT

指定镜像的默认入口命令,在启动容器时作为根命令执行,所有传入值作为该命令的参数

ENTRYPOINT [“executable”, “param1”, “param2”] exec调用执行

ENTRYPOINT command param1 param2 shell执行

此时,CMD指令定值将作为根命令的参数

每个dockerfile只能有一个ENTRYPOINT,当指定多个时,只有最后一个被执行

在于行是可以被–entrypoint参数覆盖掉 ducker rum –entrypoint

11、VOLUME

创建一个数据卷挂载点

VOLUME [“/data”]

可以从本地主机或其他容器挂载数据卷,一般用来存放数据库和需要保存的数据等

12、USER

指定运行容器时的用户名或UID,后续的RUN等指令也会使用指定的用户身份

USER daemon

当服务不需要管理员权限时,可以通过该命令指定运行用户,并且可以在之前创建所需要的用户

RUN groupadd -r postgres && useradd -r -g postgres postgres

要临时活的管理员权限可以使用gosu 或者sudo

13、WORKDIR

未后续的RUN CMD 和ENTRYPOINT指令配置工作目录

WORKDIR /path/to/workdir

可以使用多个WORKDIR指令,后续命令如果参数是相对路径,则会基于之前命令指定的路径

例如:

WORKDIR /a

WORKDIR b

WORKDIR c

RUN pwd

/a/b/c

14、ARG

指定一些镜像内使用的参数,例如版本号信息等,这些参数在执行docker build命令时才以–build-arg=格式传入

ARG[=]

则可以用docker build –build-arg=

15、ONBUILD

配置当所创建的镜像作为其他镜像的基础镜像时,所执行的创建操作指令

ONBUILD [INSTRUCTION]

例如:

dockerfile 使用如下内容创建镜像A

[…]

ONBUILD ADD . /app/src

ONBUILD RUN /usr/local/bin/python-build –dir /app/src [..]

如果基于镜像A创建新的镜像时,新的dockerfile使用 FROM image-A指定基础镜像,会自动执行ONBUILD指令的内容,等价于在后面添加了两条指令

FROM image-A

ADD . /app/src

RUN /usr/local/bin/python-build –dir /app/src [..]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: