github.com/jaegerpicker/docker@v0.7.7-0.20150325003727-22dba32b4dab/docs/sources/reference/builder.md (about)

     1  page_title: Dockerfile Reference
     2  page_description: Dockerfiles use a simple DSL which allows you to automate the steps you would normally manually take to create an image.
     3  page_keywords: builder, docker, Dockerfile, automation, image creation
     4  
     5  # Dockerfile Reference
     6  
     7  **Docker can build images automatically** by reading the instructions
     8  from a `Dockerfile`. A `Dockerfile` is a text document that contains all
     9  the commands you would normally execute manually in order to build a
    10  Docker image. By calling `docker build` from your terminal, you can have
    11  Docker build your image step by step, executing the instructions
    12  successively.
    13  
    14  This page discusses the specifics of all the instructions you can use in your
    15  `Dockerfile`. To further help you write a clear, readable, maintainable
    16  `Dockerfile`, we've also written a [`Dockerfile` Best Practices
    17  guide](/articles/dockerfile_best-practices). Lastly, you can test your
    18  Dockerfile knowledge with the [Dockerfile tutorial](/userguide/level1).
    19  
    20  ## Usage
    21  
    22  To [*build*](/reference/commandline/cli/#build) an image from a source repository,
    23  create a description file called `Dockerfile` at the root of your repository.
    24  This file will describe the steps to assemble the image.
    25  
    26  Then call `docker build` with the path of your source repository as the argument
    27  (for example, `.`):
    28  
    29      $ sudo docker build .
    30  
    31  The path to the source repository defines where to find the *context* of
    32  the build. The build is run by the Docker daemon, not by the CLI, so the
    33  whole context must be transferred to the daemon. The Docker CLI reports
    34  "Sending build context to Docker daemon" when the context is sent to the daemon.
    35  
    36  > **Warning**
    37  > Avoid using your root directory, `/`, as the root of the source repository. The 
    38  > `docker build` command will use whatever directory contains the Dockerfile as the build
    39  > context (including all of its subdirectories). The build context will be sent to the
    40  > Docker daemon before building the image, which means if you use `/` as the source
    41  > repository, the entire contents of your hard drive will get sent to the daemon (and
    42  > thus to the machine running the daemon). You probably don't want that.
    43  
    44  In most cases, it's best to put each Dockerfile in an empty directory, and then add only
    45  the files needed for building that Dockerfile to that directory. To further speed up the
    46  build, you can exclude files and directories by adding a `.dockerignore` file to the same
    47  directory.
    48  
    49  You can specify a repository and tag at which to save the new image if
    50  the build succeeds:
    51  
    52      $ sudo docker build -t shykes/myapp .
    53  
    54  The Docker daemon will run your steps one-by-one, committing the result
    55  to a new image if necessary, before finally outputting the ID of your
    56  new image. The Docker daemon will automatically clean up the context you
    57  sent.
    58  
    59  Note that each instruction is run independently, and causes a new image
    60  to be created - so `RUN cd /tmp` will not have any effect on the next
    61  instructions.
    62  
    63  Whenever possible, Docker will re-use the intermediate images,
    64  accelerating `docker build` significantly (indicated by `Using cache` -
    65  see the [`Dockerfile` Best Practices
    66  guide](/articles/dockerfile_best-practices/#build-cache) for more information):
    67  
    68      $ sudo docker build -t SvenDowideit/ambassador .
    69      Uploading context 10.24 kB
    70      Uploading context
    71      Step 1 : FROM docker-ut
    72       ---> cbba202fe96b
    73      Step 2 : MAINTAINER SvenDowideit@home.org.au
    74       ---> Using cache
    75       ---> 51182097be13
    76      Step 3 : CMD env | grep _TCP= | sed 's/.*_PORT_\([0-9]*\)_TCP=tcp:\/\/\(.*\):\(.*\)/socat TCP4-LISTEN:\1,fork,reuseaddr TCP4:\2:\3 \&/'  | sh && top
    77       ---> Using cache
    78       ---> 1a5ffc17324d
    79      Successfully built 1a5ffc17324d
    80  
    81  When you're done with your build, you're ready to look into [*Pushing a
    82  repository to its registry*]( /userguide/dockerrepos/#contributing-to-docker-hub).
    83  
    84  ## Format
    85  
    86  Here is the format of the `Dockerfile`:
    87  
    88      # Comment
    89      INSTRUCTION arguments
    90  
    91  The Instruction is not case-sensitive, however convention is for them to
    92  be UPPERCASE in order to distinguish them from arguments more easily.
    93  
    94  Docker runs the instructions in a `Dockerfile` in order. **The
    95  first instruction must be \`FROM\`** in order to specify the [*Base
    96  Image*](/terms/image/#base-image) from which you are building.
    97  
    98  Docker will treat lines that *begin* with `#` as a
    99  comment. A `#` marker anywhere else in the line will
   100  be treated as an argument. This allows statements like:
   101  
   102      # Comment
   103      RUN echo 'we are running some # of cool things'
   104  
   105  Here is the set of instructions you can use in a `Dockerfile` for building
   106  images.
   107  
   108  ### Environment Replacement
   109  
   110  > **Note**: prior to 1.3, `Dockerfile` environment variables were handled
   111  > similarly, in that they would be replaced as described below. However, there
   112  > was no formal definition on as to which instructions handled environment
   113  > replacement at the time. After 1.3 this behavior will be preserved and
   114  > canonical.
   115  
   116  Environment variables (declared with [the `ENV` statement](#env)) can also be used in
   117  certain instructions as variables to be interpreted by the `Dockerfile`. Escapes
   118  are also handled for including variable-like syntax into a statement literally.
   119  
   120  Environment variables are notated in the `Dockerfile` either with
   121  `$variable_name` or `${variable_name}`. They are treated equivalently and the
   122  brace syntax is typically used to address issues with variable names with no
   123  whitespace, like `${foo}_bar`.
   124  
   125  Escaping is possible by adding a `\` before the variable: `\$foo` or `\${foo}`,
   126  for example, will translate to `$foo` and `${foo}` literals respectively.
   127   
   128  Example (parsed representation is displayed after the `#`):
   129  
   130      FROM busybox
   131      ENV foo /bar
   132      WORKDIR ${foo}   # WORKDIR /bar
   133      ADD . $foo       # ADD . /bar
   134      COPY \$foo /quux # COPY $foo /quux
   135  
   136  The instructions that handle environment variables in the `Dockerfile` are:
   137  
   138  * `ENV`
   139  * `ADD`
   140  * `COPY`
   141  * `WORKDIR`
   142  * `EXPOSE`
   143  * `VOLUME`
   144  * `USER`
   145  
   146  `ONBUILD` instructions are **NOT** supported for environment replacement, even
   147  the instructions above.
   148  
   149  Environment variable subtitution will use the same value for each variable
   150  throughout the entire command.  In other words, in this example:
   151  
   152      ENV abc=hello
   153      ENV abc=bye def=$abc
   154      ENV ghi=$abc
   155  
   156  will result in `def` having a value of `hello`, not `bye`.  However, 
   157  `ghi` will have a value of `bye` because it is not part of the same command
   158  that set `abc` to `bye`.
   159  
   160  ## The `.dockerignore` file
   161  
   162  If a file named `.dockerignore` exists in the source repository, then it
   163  is interpreted as a newline-separated list of exclusion patterns.
   164  Exclusion patterns match files or directories relative to the source repository
   165  that will be excluded from the context. Globbing is done using Go's
   166  [filepath.Match](http://golang.org/pkg/path/filepath#Match) rules.
   167  
   168  > **Note**:
   169  > The `.dockerignore` file can even be used to ignore the `Dockerfile` and
   170  > `.dockerignore` files. This might be useful if you are copying files from
   171  > the root of the build context into your new containter but do not want to 
   172  > include the `Dockerfile` or `.dockerignore` files (e.g. `ADD . /someDir/`).
   173  
   174  The following example shows the use of the `.dockerignore` file to exclude the
   175  `.git` directory from the context. Its effect can be seen in the changed size of
   176  the uploaded context.
   177  
   178      $ sudo docker build .
   179      Uploading context 18.829 MB
   180      Uploading context
   181      Step 0 : FROM busybox
   182       ---> 769b9341d937
   183      Step 1 : CMD echo Hello World
   184       ---> Using cache
   185       ---> 99cc1ad10469
   186      Successfully built 99cc1ad10469
   187      $ echo ".git" > .dockerignore
   188      $ sudo docker build .
   189      Uploading context  6.76 MB
   190      Uploading context
   191      Step 0 : FROM busybox
   192       ---> 769b9341d937
   193      Step 1 : CMD echo Hello World
   194       ---> Using cache
   195       ---> 99cc1ad10469
   196      Successfully built 99cc1ad10469
   197  
   198  ## FROM
   199  
   200      FROM <image>
   201  
   202  Or
   203  
   204      FROM <image>:<tag>
   205  
   206  Or
   207  
   208      FROM <image>@<digest>
   209  
   210  The `FROM` instruction sets the [*Base Image*](/terms/image/#base-image)
   211  for subsequent instructions. As such, a valid `Dockerfile` must have `FROM` as
   212  its first instruction. The image can be any valid image – it is especially easy
   213  to start by **pulling an image** from the [*Public Repositories*](
   214  /userguide/dockerrepos).
   215  
   216  `FROM` must be the first non-comment instruction in the `Dockerfile`.
   217  
   218  `FROM` can appear multiple times within a single `Dockerfile` in order to create
   219  multiple images. Simply make a note of the last image ID output by the commit
   220  before each new `FROM` command.
   221  
   222  The `tag` or `digest` values are optional. If you omit either of them, the builder
   223  assumes a `latest` by default. The builder returns an error if it cannot match
   224  the `tag` value.
   225  
   226  ## MAINTAINER
   227  
   228      MAINTAINER <name>
   229  
   230  The `MAINTAINER` instruction allows you to set the *Author* field of the
   231  generated images.
   232  
   233  ## RUN
   234  
   235  RUN has 2 forms:
   236  
   237  - `RUN <command>` (the command is run in a shell - `/bin/sh -c` - *shell* form)
   238  - `RUN ["executable", "param1", "param2"]` (*exec* form)
   239  
   240  The `RUN` instruction will execute any commands in a new layer on top of the
   241  current image and commit the results. The resulting committed image will be
   242  used for the next step in the `Dockerfile`.
   243  
   244  Layering `RUN` instructions and generating commits conforms to the core
   245  concepts of Docker where commits are cheap and containers can be created from
   246  any point in an image's history, much like source control.
   247  
   248  The *exec* form makes it possible to avoid shell string munging, and to `RUN`
   249  commands using a base image that does not contain `/bin/sh`.
   250  
   251  > **Note**:
   252  > To use a different shell, other than '/bin/sh', use the *exec* form
   253  > passing in the desired shell. For example,
   254  > `RUN ["/bin/bash", "-c", "echo hello"]`
   255  
   256  > **Note**:
   257  > The *exec* form is parsed as a JSON array, which means that
   258  > you must use double-quotes (") around words not single-quotes (').
   259  
   260  > **Note**:
   261  > Unlike the *shell* form, the *exec* form does not invoke a command shell.
   262  > This means that normal shell processing does not happen. For example,
   263  > `RUN [ "echo", "$HOME" ]` will not do variable substitution on `$HOME`.
   264  > If you want shell processing then either use the *shell* form or execute 
   265  > a shell directly, for example: `RUN [ "sh", "-c", "echo", "$HOME" ]`.
   266  
   267  The cache for `RUN` instructions isn't invalidated automatically during
   268  the next build. The cache for an instruction like 
   269  `RUN apt-get dist-upgrade -y` will be reused during the next build.  The 
   270  cache for `RUN` instructions can be invalidated by using the `--no-cache` 
   271  flag, for example `docker build --no-cache`.
   272  
   273  See the [`Dockerfile` Best Practices
   274  guide](/articles/dockerfile_best-practices/#build-cache) for more information.
   275  
   276  The cache for `RUN` instructions can be invalidated by `ADD` instructions. See
   277  [below](#add) for details.
   278  
   279  ### Known Issues (RUN)
   280  
   281  - [Issue 783](https://github.com/docker/docker/issues/783) is about file
   282    permissions problems that can occur when using the AUFS file system. You
   283    might notice it during an attempt to `rm` a file, for example. The issue
   284    describes a workaround.
   285  
   286  ## CMD
   287  
   288  The `CMD` instruction has three forms:
   289  
   290  - `CMD ["executable","param1","param2"]` (*exec* form, this is the preferred form)
   291  - `CMD ["param1","param2"]` (as *default parameters to ENTRYPOINT*)
   292  - `CMD command param1 param2` (*shell* form)
   293  
   294  There can only be one `CMD` instruction in a `Dockerfile`. If you list more than one `CMD`
   295  then only the last `CMD` will take effect.
   296  
   297  **The main purpose of a `CMD` is to provide defaults for an executing
   298  container.** These defaults can include an executable, or they can omit
   299  the executable, in which case you must specify an `ENTRYPOINT`
   300  instruction as well.
   301  
   302  > **Note**:
   303  > If `CMD` is used to provide default arguments for the `ENTRYPOINT` 
   304  > instruction, both the `CMD` and `ENTRYPOINT` instructions should be specified 
   305  > with the JSON array format.
   306  
   307  > **Note**:
   308  > The *exec* form is parsed as a JSON array, which means that
   309  > you must use double-quotes (") around words not single-quotes (').
   310  
   311  > **Note**:
   312  > Unlike the *shell* form, the *exec* form does not invoke a command shell.
   313  > This means that normal shell processing does not happen. For example,
   314  > `CMD [ "echo", "$HOME" ]` will not do variable substitution on `$HOME`.
   315  > If you want shell processing then either use the *shell* form or execute 
   316  > a shell directly, for example: `CMD [ "sh", "-c", "echo", "$HOME" ]`.
   317  
   318  When used in the shell or exec formats, the `CMD` instruction sets the command
   319  to be executed when running the image.
   320  
   321  If you use the *shell* form of the `CMD`, then the `<command>` will execute in
   322  `/bin/sh -c`:
   323  
   324      FROM ubuntu
   325      CMD echo "This is a test." | wc -
   326  
   327  If you want to **run your** `<command>` **without a shell** then you must
   328  express the command as a JSON array and give the full path to the executable.
   329  **This array form is the preferred format of `CMD`.** Any additional parameters
   330  must be individually expressed as strings in the array:
   331  
   332      FROM ubuntu
   333      CMD ["/usr/bin/wc","--help"]
   334  
   335  If you would like your container to run the same executable every time, then
   336  you should consider using `ENTRYPOINT` in combination with `CMD`. See
   337  [*ENTRYPOINT*](#entrypoint).
   338  
   339  If the user specifies arguments to `docker run` then they will override the
   340  default specified in `CMD`.
   341  
   342  > **Note**:
   343  > don't confuse `RUN` with `CMD`. `RUN` actually runs a command and commits
   344  > the result; `CMD` does not execute anything at build time, but specifies
   345  > the intended command for the image.
   346  
   347  ## LABEL
   348  
   349      LABEL <key>=<value> <key>=<value> <key>=<value> ...
   350  
   351  The `LABEL` instruction adds metadata to an image. A `LABEL` is a
   352  key-value pair. To include spaces within a `LABEL` value, use quotes and
   353  blackslashes as you would in command-line parsing.
   354  
   355      LABEL "com.example.vendor"="ACME Incorporated"
   356  
   357  An image can have more than one label. To specify multiple labels, separate each
   358  key-value pair by an EOL.
   359  
   360      LABEL com.example.label-without-value
   361      LABEL com.example.label-with-value="foo"
   362      LABEL version="1.0"
   363      LABEL description="This text illustrates \
   364      that label-values can span multiple lines."
   365  
   366  Docker recommends combining labels in a single `LABEL` instruction where
   367  possible. Each `LABEL` instruction produces a new layer which can result in an
   368  inefficient image if you use many labels. This example results in four image
   369  layers. 
   370      
   371  Labels are additive including `LABEL`s in `FROM` images. As the system
   372  encounters and then applies a new label, new `key`s override any previous labels
   373  with identical keys.    
   374  
   375  To view an image's labels, use the `docker inspect` command.
   376  
   377  ## EXPOSE
   378  
   379      EXPOSE <port> [<port>...]
   380  
   381  The `EXPOSE` instructions informs Docker that the container will listen on the
   382  specified network ports at runtime. Docker uses this information to interconnect
   383  containers using links (see the [Docker User
   384  Guide](/userguide/dockerlinks)) and to determine which ports to expose to the
   385  host when [using the -P flag](/reference/run/#expose-incoming-ports).
   386  
   387  > **Note**:
   388  > `EXPOSE` doesn't define which ports can be exposed to the host or make ports
   389  > accessible from the host by default. To expose ports to the host, at runtime,
   390  > [use the `-p` flag](/userguide/dockerlinks) or
   391  > [the -P flag](/reference/run/#expose-incoming-ports).
   392  
   393  ## ENV
   394  
   395      ENV <key> <value>
   396      ENV <key>=<value> ...
   397  
   398  The `ENV` instruction sets the environment variable `<key>` to the value
   399  `<value>`. This value will be in the environment of all "descendent" `Dockerfile`
   400  commands and can be [replaced inline](#environment-replacement) in many as well.
   401  
   402  The `ENV` instruction has two forms. The first form, `ENV <key> <value>`,
   403  will set a single variable to a value. The entire string after the first
   404  space will be treated as the `<value>` - including characters such as 
   405  spaces and quotes.
   406  
   407  The second form, `ENV <key>=<value> ...`, allows for multiple variables to 
   408  be set at one time. Notice that the second form uses the equals sign (=) 
   409  in the syntax, while the first form does not. Like command line parsing, 
   410  quotes and backslashes can be used to include spaces within values.
   411  
   412  For example:
   413  
   414      ENV myName="John Doe" myDog=Rex\ The\ Dog \
   415          myCat=fluffy
   416  
   417  and
   418  
   419      ENV myName John Doe
   420      ENV myDog Rex The Dog
   421      ENV myCat fluffy
   422  
   423  will yield the same net results in the final container, but the first form 
   424  does it all in one layer.
   425  
   426  The environment variables set using `ENV` will persist when a container is run
   427  from the resulting image. You can view the values using `docker inspect`, and
   428  change them using `docker run --env <key>=<value>`.
   429  
   430  > **Note**:
   431  > Environment persistence can cause unexpected effects. For example,
   432  > setting `ENV DEBIAN_FRONTEND noninteractive` may confuse apt-get
   433  > users on a Debian-based image. To set a value for a single command, use
   434  > `RUN <key>=<value> <command>`.
   435  
   436  ## ADD
   437  
   438  ADD has two forms:
   439  
   440  - `ADD <src>... <dest>`
   441  - `ADD ["<src>"... "<dest>"]` (this form is required for paths containing
   442  whitespace)
   443  
   444  The `ADD` instruction copies new files, directories or remote file URLs from `<src>`
   445  and adds them to the filesystem of the container at the path `<dest>`.  
   446  
   447  Multiple `<src>` resource may be specified but if they are files or 
   448  directories then they must be relative to the source directory that is 
   449  being built (the context of the build).
   450  
   451  Each `<src>` may contain wildcards and matching will be done using Go's
   452  [filepath.Match](http://golang.org/pkg/path/filepath#Match) rules.
   453  For most command line uses this should act as expected, for example:
   454  
   455      ADD hom* /mydir/        # adds all files starting with "hom"
   456      ADD hom?.txt /mydir/    # ? is replaced with any single character
   457  
   458  The `<dest>` is an absolute path, or a path relative to `WORKDIR`, into which
   459  the source will be copied inside the destination container.
   460  
   461      ADD test aDir/          # adds "test" to `WORKDIR`/aDir/
   462  
   463  All new files and directories are created with a UID and GID of 0.
   464  
   465  In the case where `<src>` is a remote file URL, the destination will
   466  have permissions of 600. If the remote file being retrieved has an HTTP
   467  `Last-Modified` header, the timestamp from that header will be used
   468  to set the `mtime` on the destination file. Then, like any other file
   469  processed during an `ADD`, `mtime` will be included in the determination
   470  of whether or not the file has changed and the cache should be updated.
   471  
   472  > **Note**:
   473  > If you build by passing a `Dockerfile` through STDIN (`docker
   474  > build - < somefile`), there is no build context, so the `Dockerfile`
   475  > can only contain a URL based `ADD` instruction. You can also pass a
   476  > compressed archive through STDIN: (`docker build - < archive.tar.gz`),
   477  > the `Dockerfile` at the root of the archive and the rest of the
   478  > archive will get used at the context of the build.
   479  
   480  > **Note**:
   481  > If your URL files are protected using authentication, you
   482  > will need to use `RUN wget`, `RUN curl` or use another tool from
   483  > within the container as the `ADD` instruction does not support
   484  > authentication.
   485  
   486  > **Note**:
   487  > The first encountered `ADD` instruction will invalidate the cache for all
   488  > following instructions from the Dockerfile if the contents of `<src>` have
   489  > changed. This includes invalidating the cache for `RUN` instructions.
   490  > See the [`Dockerfile` Best Practices
   491  guide](/articles/dockerfile_best-practices/#build-cache) for more information.
   492  
   493  
   494  The copy obeys the following rules:
   495  
   496  - The `<src>` path must be inside the *context* of the build;
   497    you cannot `ADD ../something /something`, because the first step of a
   498    `docker build` is to send the context directory (and subdirectories) to the
   499    docker daemon.
   500  
   501  - If `<src>` is a URL and `<dest>` does not end with a trailing slash, then a
   502    file is downloaded from the URL and copied to `<dest>`.
   503  
   504  - If `<src>` is a URL and `<dest>` does end with a trailing slash, then the
   505    filename is inferred from the URL and the file is downloaded to
   506    `<dest>/<filename>`. For instance, `ADD http://example.com/foobar /` would
   507    create the file `/foobar`. The URL must have a nontrivial path so that an
   508    appropriate filename can be discovered in this case (`http://example.com`
   509    will not work).
   510  
   511  - If `<src>` is a directory, the entire contents of the directory are copied, 
   512    including filesystem metadata. 
   513  > **Note**:
   514  > The directory itself is not copied, just its contents.
   515  
   516  - If `<src>` is a *local* tar archive in a recognized compression format
   517    (identity, gzip, bzip2 or xz) then it is unpacked as a directory. Resources
   518    from *remote* URLs are **not** decompressed. When a directory is copied or
   519    unpacked, it has the same behavior as `tar -x`: the result is the union of:
   520  
   521      1. Whatever existed at the destination path and
   522      2. The contents of the source tree, with conflicts resolved in favor
   523         of "2." on a file-by-file basis.
   524  
   525  - If `<src>` is any other kind of file, it is copied individually along with
   526    its metadata. In this case, if `<dest>` ends with a trailing slash `/`, it
   527    will be considered a directory and the contents of `<src>` will be written
   528    at `<dest>/base(<src>)`.
   529  
   530  - If multiple `<src>` resources are specified, either directly or due to the
   531    use of a wildcard, then `<dest>` must be a directory, and it must end with 
   532    a slash `/`.
   533  
   534  - If `<dest>` does not end with a trailing slash, it will be considered a
   535    regular file and the contents of `<src>` will be written at `<dest>`.
   536  
   537  - If `<dest>` doesn't exist, it is created along with all missing directories
   538    in its path.
   539  
   540  ## COPY
   541  
   542  COPY has two forms:
   543  
   544  - `COPY <src>... <dest>`
   545  - `COPY ["<src>"... "<dest>"]` (this form is required for paths containing
   546  whitespace)
   547  
   548  The `COPY` instruction copies new files or directories from `<src>`
   549  and adds them to the filesystem of the container at the path `<dest>`.
   550  
   551  Multiple `<src>` resource may be specified but they must be relative
   552  to the source directory that is being built (the context of the build).
   553  
   554  Each `<src>` may contain wildcards and matching will be done using Go's
   555  [filepath.Match](http://golang.org/pkg/path/filepath#Match) rules.
   556  For most command line uses this should act as expected, for example:
   557  
   558      COPY hom* /mydir/        # adds all files starting with "hom"
   559      COPY hom?.txt /mydir/    # ? is replaced with any single character
   560  
   561  The `<dest>` is an absolute path, or a path relative to `WORKDIR`, into which
   562  the source will be copied inside the destination container.
   563  
   564      COPY test aDir/          # adds "test" to `WORKDIR`/aDir/
   565  
   566  All new files and directories are created with a UID and GID of 0.
   567  
   568  > **Note**:
   569  > If you build using STDIN (`docker build - < somefile`), there is no
   570  > build context, so `COPY` can't be used.
   571  
   572  The copy obeys the following rules:
   573  
   574  - The `<src>` path must be inside the *context* of the build;
   575    you cannot `COPY ../something /something`, because the first step of a
   576    `docker build` is to send the context directory (and subdirectories) to the
   577    docker daemon.
   578  
   579  - If `<src>` is a directory, the entire contents of the directory are copied, 
   580    including filesystem metadata. 
   581  > **Note**:
   582  > The directory itself is not copied, just its contents.
   583  
   584  - If `<src>` is any other kind of file, it is copied individually along with
   585    its metadata. In this case, if `<dest>` ends with a trailing slash `/`, it
   586    will be considered a directory and the contents of `<src>` will be written
   587    at `<dest>/base(<src>)`.
   588  
   589  - If multiple `<src>` resources are specified, either directly or due to the
   590    use of a wildcard, then `<dest>` must be a directory, and it must end with 
   591    a slash `/`.
   592  
   593  - If `<dest>` does not end with a trailing slash, it will be considered a
   594    regular file and the contents of `<src>` will be written at `<dest>`.
   595  
   596  - If `<dest>` doesn't exist, it is created along with all missing directories
   597    in its path.
   598  
   599  ## ENTRYPOINT
   600  
   601  ENTRYPOINT has two forms:
   602  
   603  - `ENTRYPOINT ["executable", "param1", "param2"]`
   604    (the preferred *exec* form)
   605  - `ENTRYPOINT command param1 param2`
   606    (*shell* form)
   607  
   608  An `ENTRYPOINT` allows you to configure a container that will run as an executable.
   609  
   610  For example, the following will start nginx with its default content, listening
   611  on port 80:
   612  
   613      docker run -i -t --rm -p 80:80 nginx
   614  
   615  Command line arguments to `docker run <image>` will be appended after all
   616  elements in an *exec* form `ENTRYPOINT`, and will override all elements specified
   617  using `CMD`.
   618  This allows arguments to be passed to the entry point, i.e., `docker run <image> -d`
   619  will pass the `-d` argument to the entry point. 
   620  You can override the `ENTRYPOINT` instruction using the `docker run --entrypoint`
   621  flag.
   622  
   623  The *shell* form prevents any `CMD` or `run` command line arguments from being
   624  used, but has the disadvantage that your `ENTRYPOINT` will be started as a
   625  subcommand of `/bin/sh -c`, which does not pass signals.
   626  This means that the executable will not be the container's `PID 1` - and
   627  will _not_ receive Unix signals - so your executable will not receive a
   628  `SIGTERM` from `docker stop <container>`.
   629  
   630  Only the last `ENTRYPOINT` instruction in the `Dockerfile` will have an effect.
   631  
   632  ### Exec form ENTRYPOINT example
   633  
   634  You can use the *exec* form of `ENTRYPOINT` to set fairly stable default commands
   635  and arguments and then use either form of `CMD` to set additional defaults that
   636  are more likely to be changed.
   637  
   638      FROM ubuntu
   639      ENTRYPOINT ["top", "-b"]
   640      CMD ["-c"]
   641  
   642  When you run the container, you can see that `top` is the only process:
   643  
   644      $ docker run -it --rm --name test  top -H
   645      top - 08:25:00 up  7:27,  0 users,  load average: 0.00, 0.01, 0.05
   646      Threads:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
   647      %Cpu(s):  0.1 us,  0.1 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
   648      KiB Mem:   2056668 total,  1616832 used,   439836 free,    99352 buffers
   649      KiB Swap:  1441840 total,        0 used,  1441840 free.  1324440 cached Mem
   650      
   651        PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
   652          1 root      20   0   19744   2336   2080 R  0.0  0.1   0:00.04 top
   653      
   654  To examine the result further, you can use `docker exec`:
   655  
   656      $ docker exec -it test ps aux
   657      USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
   658      root         1  2.6  0.1  19752  2352 ?        Ss+  08:24   0:00 top -b -H
   659      root         7  0.0  0.1  15572  2164 ?        R+   08:25   0:00 ps aux
   660  
   661  And you can gracefully request `top` to shut down using `docker stop test`.
   662  
   663  The following `Dockerfile` shows using the `ENTRYPOINT` to run Apache in the
   664  foreground (i.e., as `PID 1`):
   665  
   666  ```
   667  FROM debian:stable
   668  RUN apt-get update && apt-get install -y --force-yes apache2
   669  EXPOSE 80 443
   670  VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"]
   671  ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
   672  ```
   673  
   674  If you need to write a starter script for a single executable, you can ensure that
   675  the final executable receives the Unix signals by using `exec` and `gosu`
   676  commands:
   677  
   678  ```bash
   679  #!/bin/bash
   680  set -e
   681  
   682  if [ "$1" = 'postgres' ]; then
   683      chown -R postgres "$PGDATA"
   684  
   685      if [ -z "$(ls -A "$PGDATA")" ]; then
   686          gosu postgres initdb
   687      fi
   688  
   689      exec gosu postgres "$@"
   690  fi
   691  
   692  exec "$@"
   693  ```
   694  
   695  Lastly, if you need to do some extra cleanup (or communicate with other containers)
   696  on shutdown, or are co-ordinating more than one executable, you may need to ensure
   697  that the `ENTRYPOINT` script receives the Unix signals, passes them on, and then
   698  does some more work:
   699  
   700  ```
   701  #!/bin/sh
   702  # Note: I've written this using sh so it works in the busybox container too
   703  
   704  # USE the trap if you need to also do manual cleanup after the service is stopped,
   705  #     or need to start multiple services in the one container
   706  trap "echo TRAPed signal" HUP INT QUIT KILL TERM
   707  
   708  # start service in background here
   709  /usr/sbin/apachectl start
   710  
   711  echo "[hit enter key to exit] or run 'docker stop <container>'"
   712  read
   713  
   714  # stop service and clean up here
   715  echo "stopping apache"
   716  /usr/sbin/apachectl stop
   717  
   718  echo "exited $0"
   719  ```
   720  
   721  If you run this image with `docker run -it --rm -p 80:80 --name test apache`,
   722  you can then examine the container's processes with `docker exec`, or `docker top`,
   723  and then ask the script to stop Apache:
   724  
   725  ```bash
   726  $ docker exec -it test ps aux
   727  USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
   728  root         1  0.1  0.0   4448   692 ?        Ss+  00:42   0:00 /bin/sh /run.sh 123 cmd cmd2
   729  root        19  0.0  0.2  71304  4440 ?        Ss   00:42   0:00 /usr/sbin/apache2 -k start
   730  www-data    20  0.2  0.2 360468  6004 ?        Sl   00:42   0:00 /usr/sbin/apache2 -k start
   731  www-data    21  0.2  0.2 360468  6000 ?        Sl   00:42   0:00 /usr/sbin/apache2 -k start
   732  root        81  0.0  0.1  15572  2140 ?        R+   00:44   0:00 ps aux
   733  $ docker top test
   734  PID                 USER                COMMAND
   735  10035               root                {run.sh} /bin/sh /run.sh 123 cmd cmd2
   736  10054               root                /usr/sbin/apache2 -k start
   737  10055               33                  /usr/sbin/apache2 -k start
   738  10056               33                  /usr/sbin/apache2 -k start
   739  $ /usr/bin/time docker stop test
   740  test
   741  real	0m 0.27s
   742  user	0m 0.03s
   743  sys	0m 0.03s
   744  ```
   745  
   746  > **Note:** you can over ride the `ENTRYPOINT` setting using `--entrypoint`,
   747  > but this can only set the binary to *exec* (no `sh -c` will be used).
   748  
   749  > **Note**:
   750  > The *exec* form is parsed as a JSON array, which means that
   751  > you must use double-quotes (") around words not single-quotes (').
   752  
   753  > **Note**:
   754  > Unlike the *shell* form, the *exec* form does not invoke a command shell.
   755  > This means that normal shell processing does not happen. For example,
   756  > `ENTRYPOINT [ "echo", "$HOME" ]` will not do variable substitution on `$HOME`.
   757  > If you want shell processing then either use the *shell* form or execute 
   758  > a shell directly, for example: `ENTRYPOINT [ "sh", "-c", "echo", "$HOME" ]`.
   759  > Variables that are defined in the `Dockerfile`using `ENV`, will be substituted by
   760  > the `Dockerfile` parser.
   761  
   762  ### Shell form ENTRYPOINT example
   763  
   764  You can specify a plain string for the `ENTRYPOINT` and it will execute in `/bin/sh -c`.
   765  This form will use shell processing to substitute shell environment variables,
   766  and will ignore any `CMD` or `docker run` command line arguments.
   767  To ensure that `docker stop` will signal any long running `ENTRYPOINT` executable
   768  correctly, you need to remember to start it with `exec`:
   769  
   770      FROM ubuntu
   771      ENTRYPOINT exec top -b
   772  
   773  When you run this image, you'll see the single `PID 1` process:
   774  
   775      $ docker run -it --rm --name test top
   776      Mem: 1704520K used, 352148K free, 0K shrd, 0K buff, 140368121167873K cached
   777      CPU:   5% usr   0% sys   0% nic  94% idle   0% io   0% irq   0% sirq
   778      Load average: 0.08 0.03 0.05 2/98 6
   779        PID  PPID USER     STAT   VSZ %VSZ %CPU COMMAND
   780          1     0 root     R     3164   0%   0% top -b
   781  
   782  Which will exit cleanly on `docker stop`:
   783  
   784      $ /usr/bin/time docker stop test
   785      test
   786      real	0m 0.20s
   787      user	0m 0.02s
   788      sys	0m 0.04s
   789  
   790  If you forget to add `exec` to the beginning of your `ENTRYPOINT`:
   791  
   792      FROM ubuntu
   793      ENTRYPOINT top -b
   794      CMD --ignored-param1
   795  
   796  You can then run it (giving it a name for the next step):
   797  
   798      $ docker run -it --name test top --ignored-param2
   799      Mem: 1704184K used, 352484K free, 0K shrd, 0K buff, 140621524238337K cached
   800      CPU:   9% usr   2% sys   0% nic  88% idle   0% io   0% irq   0% sirq
   801      Load average: 0.01 0.02 0.05 2/101 7
   802        PID  PPID USER     STAT   VSZ %VSZ %CPU COMMAND
   803          1     0 root     S     3168   0%   0% /bin/sh -c top -b cmd cmd2
   804          7     1 root     R     3164   0%   0% top -b
   805  
   806  You can see from the output of `top` that the specified `ENTRYPOINT` is not `PID 1`.
   807  
   808  If you then run `docker stop test`, the container will not exit cleanly - the
   809  `stop` command will be forced to send a `SIGKILL` after the timeout:
   810  
   811      $ docker exec -it test ps aux
   812      PID   USER     COMMAND
   813          1 root     /bin/sh -c top -b cmd cmd2
   814          7 root     top -b
   815          8 root     ps aux
   816      $ /usr/bin/time docker stop test
   817      test
   818      real	0m 10.19s
   819      user	0m 0.04s
   820      sys	0m 0.03s
   821  
   822  ## VOLUME
   823  
   824      VOLUME ["/data"]
   825  
   826  The `VOLUME` instruction creates a mount point with the specified name
   827  and marks it as holding externally mounted volumes from native host or other
   828  containers. The value can be a JSON array, `VOLUME ["/var/log/"]`, or a plain
   829  string with multiple arguments, such as `VOLUME /var/log` or `VOLUME /var/log
   830  /var/db`.  For more information/examples and mounting instructions via the
   831  Docker client, refer to 
   832  [*Share Directories via Volumes*](/userguide/dockervolumes/#volume)
   833  documentation.
   834  
   835  The `docker run` command initializes the newly created volume with any data 
   836  that exists at the specified location within the base image. For example, 
   837  consider the following Dockerfile snippet:
   838  
   839      FROM ubuntu
   840      RUN mkdir /myvol
   841      RUN echo "hello world" > /myvol/greating
   842      VOLUME /myvol
   843  
   844  This Dockerfile results in an image that causes `docker run`, to
   845  create a new mount point at `/myvol` and copy the  `greating` file 
   846  into the newly created volume.
   847  
   848  > **Note**:
   849  > The list is parsed as a JSON array, which means that
   850  > you must use double-quotes (") around words not single-quotes (').
   851  
   852  ## USER
   853  
   854      USER daemon
   855  
   856  The `USER` instruction sets the user name or UID to use when running the image
   857  and for any `RUN`, `CMD` and `ENTRYPOINT` instructions that follow it in the
   858  `Dockerfile`.
   859  
   860  ## WORKDIR
   861  
   862      WORKDIR /path/to/workdir
   863  
   864  The `WORKDIR` instruction sets the working directory for any `RUN`, `CMD`,
   865  `ENTRYPOINT`, `COPY` and `ADD` instructions that follow it in the `Dockerfile`.
   866  
   867  It can be used multiple times in the one `Dockerfile`. If a relative path
   868  is provided, it will be relative to the path of the previous `WORKDIR`
   869  instruction. For example:
   870  
   871      WORKDIR /a
   872      WORKDIR b
   873      WORKDIR c
   874      RUN pwd
   875  
   876  The output of the final `pwd` command in this `Dockerfile` would be
   877  `/a/b/c`.
   878  
   879  The `WORKDIR` instruction can resolve environment variables previously set using
   880  `ENV`. You can only use environment variables explicitly set in the `Dockerfile`.
   881  For example:
   882  
   883      ENV DIRPATH /path
   884      WORKDIR $DIRPATH/$DIRNAME
   885  
   886  The output of the final `pwd` command in this `Dockerfile` would be
   887  `/path/$DIRNAME`
   888  
   889  ## ONBUILD
   890  
   891      ONBUILD [INSTRUCTION]
   892  
   893  The `ONBUILD` instruction adds to the image a *trigger* instruction to
   894  be executed at a later time, when the image is used as the base for
   895  another build. The trigger will be executed in the context of the
   896  downstream build, as if it had been inserted immediately after the
   897  `FROM` instruction in the downstream `Dockerfile`.
   898  
   899  Any build instruction can be registered as a trigger.
   900  
   901  This is useful if you are building an image which will be used as a base
   902  to build other images, for example an application build environment or a
   903  daemon which may be customized with user-specific configuration.
   904  
   905  For example, if your image is a reusable Python application builder, it
   906  will require application source code to be added in a particular
   907  directory, and it might require a build script to be called *after*
   908  that. You can't just call `ADD` and `RUN` now, because you don't yet
   909  have access to the application source code, and it will be different for
   910  each application build. You could simply provide application developers
   911  with a boilerplate `Dockerfile` to copy-paste into their application, but
   912  that is inefficient, error-prone and difficult to update because it
   913  mixes with application-specific code.
   914  
   915  The solution is to use `ONBUILD` to register advance instructions to
   916  run later, during the next build stage.
   917  
   918  Here's how it works:
   919  
   920  1. When it encounters an `ONBUILD` instruction, the builder adds a
   921     trigger to the metadata of the image being built. The instruction
   922     does not otherwise affect the current build.
   923  2. At the end of the build, a list of all triggers is stored in the
   924     image manifest, under the key `OnBuild`. They can be inspected with
   925     the `docker inspect` command.
   926  3. Later the image may be used as a base for a new build, using the
   927     `FROM` instruction. As part of processing the `FROM` instruction,
   928     the downstream builder looks for `ONBUILD` triggers, and executes
   929     them in the same order they were registered. If any of the triggers
   930     fail, the `FROM` instruction is aborted which in turn causes the
   931     build to fail. If all triggers succeed, the `FROM` instruction
   932     completes and the build continues as usual.
   933  4. Triggers are cleared from the final image after being executed. In
   934     other words they are not inherited by "grand-children" builds.
   935  
   936  For example you might add something like this:
   937  
   938      [...]
   939      ONBUILD ADD . /app/src
   940      ONBUILD RUN /usr/local/bin/python-build --dir /app/src
   941      [...]
   942  
   943  > **Warning**: Chaining `ONBUILD` instructions using `ONBUILD ONBUILD` isn't allowed.
   944  
   945  > **Warning**: The `ONBUILD` instruction may not trigger `FROM` or `MAINTAINER` instructions.
   946  
   947  ## Dockerfile Examples
   948  
   949      # Nginx
   950      #
   951      # VERSION               0.0.1
   952  
   953      FROM      ubuntu
   954      MAINTAINER Victor Vieux <victor@docker.com>
   955  
   956      LABEL Description="This image is used to start the foobar executable" Vendor="ACME Products" Version="1.0"
   957      RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server
   958  
   959      # Firefox over VNC
   960      #
   961      # VERSION               0.3
   962  
   963      FROM ubuntu
   964  
   965      # Install vnc, xvfb in order to create a 'fake' display and firefox
   966      RUN apt-get update && apt-get install -y x11vnc xvfb firefox
   967      RUN mkdir ~/.vnc
   968      # Setup a password
   969      RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
   970      # Autostart firefox (might not be the best way, but it does the trick)
   971      RUN bash -c 'echo "firefox" >> /.bashrc'
   972  
   973      EXPOSE 5900
   974      CMD    ["x11vnc", "-forever", "-usepw", "-create"]
   975  
   976      # Multiple images example
   977      #
   978      # VERSION               0.1
   979  
   980      FROM ubuntu
   981      RUN echo foo > bar
   982      # Will output something like ===> 907ad6c2736f
   983  
   984      FROM ubuntu
   985      RUN echo moo > oink
   986      # Will output something like ===> 695d7793cbe4
   987  
   988      # You᾿ll now have two images, 907ad6c2736f with /bar, and 695d7793cbe4 with
   989      # /oink.
   990