[关闭]
@Dukebf 2017-08-27T07:44:19.000000Z 字数 2204 阅读 1060

Dokcerfile的编写

Docker


前人轮子
Docker Dockerfile详解
Dockerfile命令介绍及实例

Dockerfile 语法

注释和命令+参数:

  1. # Line blocks used for commenting
  2. command argument argument ..

例子:

  1. # Print "Hello docker!"
  2. RUN echo "Hello docker!"

Dockerfile 命令

FROM

定义了使用哪个基础镜像启动构建流程.基础镜像可以为任意镜 像。如果基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。

  1. # Usage: FROM [image name]
  2. FROM ubuntu

MAINTAINER

用于声明作者,并应该放在FROM的后面。

  1. # Usage: MAINTAINER [name]
  2. MAINTAINER authors_name

ENV

定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。

  1. ENV PG_MAJOR 9.3
  2. ENV PG_VERSION 9.3.4
  3. RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
  4. ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH

RUN

接受命令作为参数并用于创建镜像。不像CMD命令,RUN命令用于创建镜像(在之前commit的层之上形成新的层)。

  1. # Usage: RUN [command]
  2. RUN apt-get update

CMD

每个容器只能执行一条CMD命令,多个CMD命令时,只最后一条被执行。

  1. # CMD [“executable” ,”Param1”, “param2”]使用exec执行,推荐
  2. # CMD command param1 param2,在/bin/sh上执行
  3. # CMD [“Param1”, “param2”] 提供给ENTRYPOINT做默认参数。
  4. CMD ["/usr/bin/supervisord"]

supervisord 是将所有进程都转为守护进程. 需要进行安装 apt-get install supervisor
这样就可以让容器在不进入/bin/bash交互下,也可以运行.

USER

USER命令用于设置运行容器的UID。

  1. # Usage: USER [UID]
  2. USER 751

ENTRYPOINT

配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
每个Dockerfile中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效。

  1. ENTRYPOINT [“executable”, param1”, param2”]
  2. ENTRYPOINT command param1 param2 shell中执行)

VOLUME

VOLUME命令用于让你的容器访问宿主机上的目录。

  1. # Usage: VOLUME ["/dir_1", "/dir_2" ..]
  2. VOLUME ["/my_files"]

EXPOSE

告诉Docker服务端容器暴露的端口号,供互联系统使用。

  1. # Usage: EXPOSE [port1],[port2]..
  2. EXPOSE 22 80 8080

ADD

将复制指定的文件到容器中的 。 其中 可以是Dockerfile所在目录的一个相对路径;也可以是一个URL;还可以是一个zip文件.

  1. ADD sources.list /etc/apt/

COPY

复制本地主机的 (为Dockerfile所在目录的相对路径)到容器中的 。
当使用本地目录为源目录时,推荐使用 COPY 。

  1. COPY ./my_supervisor.conf /etc/supervisor/conf.d/my_supervisor.conf

WORKDIR

WORKDIR命令用于设置CMD指明的命令的运行目录。

  1. # Usage: WORKDIR /path
  2. WORKDIR /var/www/html/

ONBUILD

配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。
例如,Dockerfile使用如下的内容创建了镜像 image-A 。

[…]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/Python-build –dir /app/src
[…]

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

  1. FROM image-A
  2. # Automatically run the following
  3. ADD . /app/src
  4. RUN /usr/local/bin/python-build --dir /app/src

使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild 。

构建运行Dockerfile

  1. # Usage: docker build -t [name:tag] [dir]
  2. # 在当前目录下,构建Dockerfile
  3. docker build -t hello:v1 .
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注