@Dukebf
2017-08-27T15:44:19.000000Z
字数 2204
阅读 1162
Docker
注释和命令+参数:
# Line blocks used for commenting
command argument argument ..
例子:
# Print "Hello docker!"
RUN echo "Hello docker!"
定义了使用哪个基础镜像启动构建流程.基础镜像可以为任意镜 像。如果基础镜像没有被发现,Docker将试图从Docker image index来查找该镜像。
# Usage: FROM [image name]
FROM ubuntu
用于声明作者,并应该放在FROM的后面。
# Usage: MAINTAINER [name]
MAINTAINER authors_name
定一个环境变量,会被后续 RUN 指令使用,并在容器运行时保持。
ENV PG_MAJOR 9.3
ENV PG_VERSION 9.3.4
RUN curl -SL http://example.com/postgres-$PG_VERSION.tar.xz | tar -xJC /usr/src/postgress && …
ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
接受命令作为参数并用于创建镜像。不像CMD命令,RUN命令用于创建镜像(在之前commit的层之上形成新的层)。
# Usage: RUN [command]
RUN apt-get update
每个容器只能执行一条CMD命令,多个CMD命令时,只最后一条被执行。
# CMD [“executable” ,”Param1”, “param2”]使用exec执行,推荐
# CMD command param1 param2,在/bin/sh上执行
# CMD [“Param1”, “param2”] 提供给ENTRYPOINT做默认参数。
CMD ["/usr/bin/supervisord"]
supervisord 是将所有进程都转为守护进程. 需要进行安装 apt-get install supervisor
这样就可以让容器在不进入/bin/bash交互下,也可以运行.
USER命令用于设置运行容器的UID。
# Usage: USER [UID]
USER 751
配置容器启动后执行的命令,并且不可被 docker run 提供的参数覆盖。
每个Dockerfile中只能有一个 ENTRYPOINT ,当指定多个时,只有最后一个起效。
ENTRYPOINT [“executable”, “param1”, “param2”]
ENTRYPOINT command param1 param2 (shell中执行)
VOLUME命令用于让你的容器访问宿主机上的目录。
# Usage: VOLUME ["/dir_1", "/dir_2" ..]
VOLUME ["/my_files"]
告诉Docker服务端容器暴露的端口号,供互联系统使用。
# Usage: EXPOSE [port1],[port2]..
EXPOSE 22 80 8080
将复制指定的文件到容器中的 。 其中 可以是Dockerfile所在目录的一个相对路径;也可以是一个URL;还可以是一个zip文件.
ADD sources.list /etc/apt/
复制本地主机的 (为Dockerfile所在目录的相对路径)到容器中的 。
当使用本地目录为源目录时,推荐使用 COPY 。
COPY ./my_supervisor.conf /etc/supervisor/conf.d/my_supervisor.conf
WORKDIR命令用于设置CMD指明的命令的运行目录。
# Usage: WORKDIR /path
WORKDIR /var/www/html/
配置当所创建的镜像作为其它新创建镜像的基础镜像时,所执行的操作指令。
例如,Dockerfile使用如下的内容创建了镜像 image-A 。
[…]
ONBUILD ADD . /app/src
ONBUILD RUN /usr/local/bin/Python-build –dir /app/src
[…]
如果基于A创建新的镜像时,新的Dockerfile中使用 FROM image-A 指定基础镜像时,会自动执行 ONBUILD 指令内容,等价于在后面添加了两条指令
FROM image-A
# Automatically run the following
ADD . /app/src
RUN /usr/local/bin/python-build --dir /app/src
使用 ONBUILD 指令的镜像,推荐在标签中注明,例如 ruby:1.9-onbuild 。
# Usage: docker build -t [name:tag] [dir]
# 在当前目录下,构建Dockerfile
docker build -t hello:v1 .