转载

Dockerfile 学习笔记

build

docker build -f /path/to/a/Dockerfile -t shykes/myapp:1.0.2 -t shykes/myapp:latest .   

可以指定 Dockerfile 文件位置以及可以增加多个 tag

From

# this is a Comment FROM <image>@<digest>   
  • Dockerfile 必须包含 FROM 指令
  • FROM 必须是 Dockerfile 第一行非注释的指令

MAINTAINER

MAINTAINER <name>   

用来标识 Image 的维护者

RUN

# 默认使用 /bin/sh -c 运行 RUN <command>  # 可以使用 / 换行 RUN /bin/bash -c 'source $HOME/.bashrc ;/   echo $HOME'  RUN ["executable", "param1", "param2"]  # exec 模式,下面的 $HOME 不会被正确替换 RUN [ "echo", "$HOME" ]  # 使用这种方式 RUN [ "sh", "-c", "echo", "$HOME" ]   
  • 参数使用 JSON 格式,必须使用双引号
  • 注意 exec 模式下的差异

CMD

# 共有三种模式 CMD ["executable","param1","param2"]  CMD ["param1","param2"]  CMD command param1 param2 
  • CMD 是被用作 Container 的运行,和 CMD 不一样
  • Dockerfile 中只有一个 CMD 会被运行,如果有多个,最下面的会被使用

LABEL

LABEL "com.example.vendor"="ACME Incorporated"   LABEL com.example.label-with-value="foo"   LABEL version="1.0"   LABEL description="This text illustrates /   that label-values can span multiple lines."   
  • 使用太多 LABEL 会降低效率,所以最好将多个 LABEL 合成一个,类似下面这样
LABEL multi.label1="value1" multi.label2="value2" other="value3"   LABEL multi.label1="value1" /         multi.label2="value2" /       other="value3" 

EXPOSE

EXPOSE <port> [<port>...]   
  • 暴露 container 的端口

ENV

ENV myName John Doe   ENV myDog Rex The Dog   ENV myCat fluffy   
  • 定义 Dockerfile 可以使用的变量

ADD

# 有两种用法 ADD <src>... <dest>   ADD ["<src>",... "<dest>"]   
  • ADD 是将当前目录的东西,添加到 Image 中
  • src 可以是一个 url

ENTRYPOINT

ENTRYPOINT ["executable", "param1", "param2"]   ENTRYPOINT command param1 param2   
  • ENTRYPOINT 是用来定义将容器当做一个可执行命令

ENTRYPOINT VS CMD

  • Dockerfile 必须有一个 CMD 或者 ENTRYPOINT
  • 当想把容器当做一个可执行命令时,请使用ENTRYPOINT
  • CMD 可以用来当做设置 ENTRYPOINT 需要用到的一些默认参数
  • 下图是他们同时使用的介绍图

Dockerfile 学习笔记

VOLUME

VOLUME ["/data"]   
  • 用来设置容器用到的存储空间,方便对数据进行持久化存储

USER

USER daemon   
  • RUN, CMD, ENTRYPOINT, COPY and ADD 执行时的用户

WORKDIR

# WORKDIR /path/to/workdir WORKDIR /a   WORKDIR b   WORKDIR c   RUN pwd   # path is /a/b/c 
  • RUN, CMD, ENTRYPOINT, COPY and ADD 执行时的当前目录

ARG

ARG <name>[=<default value>]  FROM busybox   ARG user1   ARG buildno=1   
  • ARG 是用来定义 build 时需要传入的参数,如果设置的参数没有传入且没有默认值,会报错。
  • ARG 和 ENV 都可以在 Dockerfile 中被其他命令所使用
原文  http://boke.io/dockerfile-biji/
正文到此结束
Loading...