github.com/stchris/docker@v1.4.2-0.20150106053530-1510a324dbd5/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) 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  ## The `.dockerignore` file
   150  
   151  If a file named `.dockerignore` exists in the source repository, then it
   152  is interpreted as a newline-separated list of exclusion patterns.
   153  Exclusion patterns match files or directories relative to the source repository
   154  that will be excluded from the context. Globbing is done using Go's
   155  [filepath.Match](http://golang.org/pkg/path/filepath#Match) rules.
   156  
   157  The following example shows the use of the `.dockerignore` file to exclude the
   158  `.git` directory from the context. Its effect can be seen in the changed size of
   159  the uploaded context.
   160  
   161      $ sudo docker build .
   162      Uploading context 18.829 MB
   163      Uploading context
   164      Step 0 : FROM busybox
   165       ---> 769b9341d937
   166      Step 1 : CMD echo Hello World
   167       ---> Using cache
   168       ---> 99cc1ad10469
   169      Successfully built 99cc1ad10469
   170      $ echo ".git" > .dockerignore
   171      $ sudo docker build .
   172      Uploading context  6.76 MB
   173      Uploading context
   174      Step 0 : FROM busybox
   175       ---> 769b9341d937
   176      Step 1 : CMD echo Hello World
   177       ---> Using cache
   178       ---> 99cc1ad10469
   179      Successfully built 99cc1ad10469
   180  
   181  ## FROM
   182  
   183      FROM <image>
   184  
   185  Or
   186  
   187      FROM <image>:<tag>
   188  
   189  The `FROM` instruction sets the [*Base Image*](/terms/image/#base-image)
   190  for subsequent instructions. As such, a valid `Dockerfile` must have `FROM` as
   191  its first instruction. The image can be any valid image – it is especially easy
   192  to start by **pulling an image** from the [*Public Repositories*](
   193  /userguide/dockerrepos).
   194  
   195  `FROM` must be the first non-comment instruction in the `Dockerfile`.
   196  
   197  `FROM` can appear multiple times within a single `Dockerfile` in order to create
   198  multiple images. Simply make a note of the last image ID output by the commit
   199  before each new `FROM` command.
   200  
   201  If no `tag` is given to the `FROM` instruction, `latest` is assumed. If the
   202  used tag does not exist, an error will be returned.
   203  
   204  ## MAINTAINER
   205  
   206      MAINTAINER <name>
   207  
   208  The `MAINTAINER` instruction allows you to set the *Author* field of the
   209  generated images.
   210  
   211  ## RUN
   212  
   213  RUN has 2 forms:
   214  
   215  - `RUN <command>` (the command is run in a shell - `/bin/sh -c` - *shell* form)
   216  - `RUN ["executable", "param1", "param2"]` (*exec* form)
   217  
   218  The `RUN` instruction will execute any commands in a new layer on top of the
   219  current image and commit the results. The resulting committed image will be
   220  used for the next step in the `Dockerfile`.
   221  
   222  Layering `RUN` instructions and generating commits conforms to the core
   223  concepts of Docker where commits are cheap and containers can be created from
   224  any point in an image's history, much like source control.
   225  
   226  The *exec* form makes it possible to avoid shell string munging, and to `RUN`
   227  commands using a base image that does not contain `/bin/sh`.
   228  
   229  > **Note**:
   230  > To use a different shell, other than '/bin/sh', use the *exec* form
   231  > passing in the desired shell. For example,
   232  > `RUN ["/bin/bash", "-c", "echo hello"]`
   233  
   234  > **Note**:
   235  > The *exec* form is parsed as a JSON array, which means that
   236  > you must use double-quotes (") around words not single-quotes (').
   237  
   238  > **Note**:
   239  > Unlike the *shell* form, the *exec* form does not invoke a command shell.
   240  > This means that normal shell processing does not happen. For example,
   241  > `RUN [ "echo", "$HOME" ]` will not do variable substitution on `$HOME`.
   242  > If you want shell processing then either use the *shell* form or execute 
   243  > a shell directly, for example: `RUN [ "sh", "-c", "echo", "$HOME" ]`.
   244  
   245  The cache for `RUN` instructions isn't invalidated automatically during
   246  the next build. The cache for an instruction like 
   247  `RUN apt-get dist-upgrade -y` will be reused during the next build.  The 
   248  cache for `RUN` instructions can be invalidated by using the `--no-cache` 
   249  flag, for example `docker build --no-cache`.
   250  
   251  See the [`Dockerfile` Best Practices
   252  guide](/articles/dockerfile_best-practices/#build-cache) for more information.
   253  
   254  The cache for `RUN` instructions can be invalidated by `ADD` instructions. See
   255  [below](#add) for details.
   256  
   257  ### Known Issues (RUN)
   258  
   259  - [Issue 783](https://github.com/docker/docker/issues/783) is about file
   260    permissions problems that can occur when using the AUFS file system. You
   261    might notice it during an attempt to `rm` a file, for example. The issue
   262    describes a workaround.
   263  
   264  ## CMD
   265  
   266  The `CMD` instruction has three forms:
   267  
   268  - `CMD ["executable","param1","param2"]` (*exec* form, this is the preferred form)
   269  - `CMD ["param1","param2"]` (as *default parameters to ENTRYPOINT*)
   270  - `CMD command param1 param2` (*shell* form)
   271  
   272  There can only be one `CMD` instruction in a `Dockerfile`. If you list more than one `CMD`
   273  then only the last `CMD` will take effect.
   274  
   275  **The main purpose of a `CMD` is to provide defaults for an executing
   276  container.** These defaults can include an executable, or they can omit
   277  the executable, in which case you must specify an `ENTRYPOINT`
   278  instruction as well.
   279  
   280  > **Note**:
   281  > If `CMD` is used to provide default arguments for the `ENTRYPOINT` 
   282  > instruction, both the `CMD` and `ENTRYPOINT` instructions should be specified 
   283  > with the JSON array format.
   284  
   285  > **Note**:
   286  > The *exec* form is parsed as a JSON array, which means that
   287  > you must use double-quotes (") around words not single-quotes (').
   288  
   289  > **Note**:
   290  > Unlike the *shell* form, the *exec* form does not invoke a command shell.
   291  > This means that normal shell processing does not happen. For example,
   292  > `CMD [ "echo", "$HOME" ]` will not do variable substitution on `$HOME`.
   293  > If you want shell processing then either use the *shell* form or execute 
   294  > a shell directly, for example: `CMD [ "sh", "-c", "echo", "$HOME" ]`.
   295  
   296  When used in the shell or exec formats, the `CMD` instruction sets the command
   297  to be executed when running the image.
   298  
   299  If you use the *shell* form of the `CMD`, then the `<command>` will execute in
   300  `/bin/sh -c`:
   301  
   302      FROM ubuntu
   303      CMD echo "This is a test." | wc -
   304  
   305  If you want to **run your** `<command>` **without a shell** then you must
   306  express the command as a JSON array and give the full path to the executable.
   307  **This array form is the preferred format of `CMD`.** Any additional parameters
   308  must be individually expressed as strings in the array:
   309  
   310      FROM ubuntu
   311      CMD ["/usr/bin/wc","--help"]
   312  
   313  If you would like your container to run the same executable every time, then
   314  you should consider using `ENTRYPOINT` in combination with `CMD`. See
   315  [*ENTRYPOINT*](#entrypoint).
   316  
   317  If the user specifies arguments to `docker run` then they will override the
   318  default specified in `CMD`.
   319  
   320  > **Note**:
   321  > don't confuse `RUN` with `CMD`. `RUN` actually runs a command and commits
   322  > the result; `CMD` does not execute anything at build time, but specifies
   323  > the intended command for the image.
   324  
   325  ## EXPOSE
   326  
   327      EXPOSE <port> [<port>...]
   328  
   329  The `EXPOSE` instructions informs Docker that the container will listen on the
   330  specified network ports at runtime. Docker uses this information to interconnect
   331  containers using links (see the [Docker User
   332  Guide](/userguide/dockerlinks)) and to determine which ports to expose to the
   333  host when [using the -P flag](/reference/run/#expose-incoming-ports).
   334  **Note:**
   335  `EXPOSE` doesn't define which ports can be exposed to the host or make ports
   336  accessible from the host by default. To expose ports to the host, at runtime, 
   337  [use the `-p` flag](/userguide/dockerlinks) or
   338  [the -P flag](/reference/run/#expose-incoming-ports).
   339  
   340  ## ENV
   341  
   342      ENV <key> <value>
   343      ENV <key>=<value> ...
   344  
   345  The `ENV` instruction sets the environment variable `<key>` to the value
   346  `<value>`. This value will be passed to all future `RUN` instructions. This is
   347  functionally equivalent to prefixing the command with `<key>=<value>`
   348  
   349  The `ENV` instruction has two forms. The first form, `ENV <key> <value>`,
   350  will set a single variable to a value. The entire string after the first
   351  space will be treated as the `<value>` - including characters such as 
   352  spaces and quotes.
   353  
   354  The second form, `ENV <key>=<value> ...`, allows for multiple variables to 
   355  be set at one time. Notice that the second form uses the equals sign (=) 
   356  in the syntax, while the first form does not. Like command line parsing, 
   357  quotes and backslashes can be used to include spaces within values.
   358  
   359  For example:
   360  
   361      ENV myName="John Doe" myDog=Rex\ The\ Dog \
   362          myCat=fluffy
   363  
   364  and
   365  
   366      ENV myName John Doe
   367      ENV myDog Rex The Dog
   368      ENV myCat fluffy
   369  
   370  will yield the same net results in the final container, but the first form 
   371  does it all in one layer.
   372  
   373  The environment variables set using `ENV` will persist when a container is run
   374  from the resulting image. You can view the values using `docker inspect`, and
   375  change them using `docker run --env <key>=<value>`.
   376  
   377  > **Note**:
   378  > One example where this can cause unexpected consequences, is setting
   379  > `ENV DEBIAN_FRONTEND noninteractive`. Which will persist when the container
   380  > is run interactively; for example: `docker run -t -i image bash`
   381  
   382  ## ADD
   383  
   384      ADD <src>... <dest>
   385  
   386  The `ADD` instruction copies new files, directories or remote file URLs from `<src>`
   387  and adds them to the filesystem of the container at the path `<dest>`.  
   388  
   389  Multiple `<src>` resource may be specified but if they are files or 
   390  directories then they must be relative to the source directory that is 
   391  being built (the context of the build).
   392  
   393  Each `<src>` may contain wildcards and matching will be done using Go's
   394  [filepath.Match](http://golang.org/pkg/path/filepath#Match) rules.
   395  For most command line uses this should act as expected, for example:
   396  
   397      ADD hom* /mydir/        # adds all files starting with "hom"
   398      ADD hom?.txt /mydir/    # ? is replaced with any single character
   399  
   400  The `<dest>` is an absolute path, or a path relative to `WORKDIR`, into which
   401  the source will be copied inside the destination container.
   402  
   403      ADD test aDir/          # adds "test" to `WORKDIR`/aDir/
   404  
   405  All new files and directories are created with a UID and GID of 0.
   406  
   407  In the case where `<src>` is a remote file URL, the destination will
   408  have permissions of 600. If the remote file being retrieved has an HTTP
   409  `Last-Modified` header, the timestamp from that header will be used
   410  to set the `mtime` on the destination file. Then, like any other file
   411  processed during an `ADD`, `mtime` will be included in the determination
   412  of whether or not the file has changed and the cache should be updated.
   413  
   414  > **Note**:
   415  > If you build by passing a `Dockerfile` through STDIN (`docker
   416  > build - < somefile`), there is no build context, so the `Dockerfile`
   417  > can only contain a URL based `ADD` instruction. You can also pass a
   418  > compressed archive through STDIN: (`docker build - < archive.tar.gz`),
   419  > the `Dockerfile` at the root of the archive and the rest of the
   420  > archive will get used at the context of the build.
   421  
   422  > **Note**:
   423  > If your URL files are protected using authentication, you
   424  > will need to use `RUN wget`, `RUN curl` or use another tool from
   425  > within the container as the `ADD` instruction does not support
   426  > authentication.
   427  
   428  > **Note**:
   429  > The first encountered `ADD` instruction will invalidate the cache for all
   430  > following instructions from the Dockerfile if the contents of `<src>` have
   431  > changed. This includes invalidating the cache for `RUN` instructions.
   432  > See the [`Dockerfile` Best Practices
   433  guide](/articles/dockerfile_best-practices/#build-cache) for more information.
   434  
   435  
   436  The copy obeys the following rules:
   437  
   438  - The `<src>` path must be inside the *context* of the build;
   439    you cannot `ADD ../something /something`, because the first step of a
   440    `docker build` is to send the context directory (and subdirectories) to the
   441    docker daemon.
   442  
   443  - If `<src>` is a URL and `<dest>` does not end with a trailing slash, then a
   444    file is downloaded from the URL and copied to `<dest>`.
   445  
   446  - If `<src>` is a URL and `<dest>` does end with a trailing slash, then the
   447    filename is inferred from the URL and the file is downloaded to
   448    `<dest>/<filename>`. For instance, `ADD http://example.com/foobar /` would
   449    create the file `/foobar`. The URL must have a nontrivial path so that an
   450    appropriate filename can be discovered in this case (`http://example.com`
   451    will not work).
   452  
   453  - If `<src>` is a directory, the entire contents of the directory are copied, 
   454    including filesystem metadata. 
   455  > **Note**:
   456  > The directory itself is not copied, just its contents.
   457  
   458  - If `<src>` is a *local* tar archive in a recognized compression format
   459    (identity, gzip, bzip2 or xz) then it is unpacked as a directory. Resources
   460    from *remote* URLs are **not** decompressed. When a directory is copied or
   461    unpacked, it has the same behavior as `tar -x`: the result is the union of:
   462  
   463      1. Whatever existed at the destination path and
   464      2. The contents of the source tree, with conflicts resolved in favor
   465         of "2." on a file-by-file basis.
   466  
   467  - If `<src>` is any other kind of file, it is copied individually along with
   468    its metadata. In this case, if `<dest>` ends with a trailing slash `/`, it
   469    will be considered a directory and the contents of `<src>` will be written
   470    at `<dest>/base(<src>)`.
   471  
   472  - If multiple `<src>` resources are specified, either directly or due to the
   473    use of a wildcard, then `<dest>` must be a directory, and it must end with 
   474    a slash `/`.
   475  
   476  - If `<dest>` does not end with a trailing slash, it will be considered a
   477    regular file and the contents of `<src>` will be written at `<dest>`.
   478  
   479  - If `<dest>` doesn't exist, it is created along with all missing directories
   480    in its path.
   481  
   482  ## COPY
   483  
   484      COPY <src>... <dest>
   485  
   486  The `COPY` instruction copies new files or directories from `<src>`
   487  and adds them to the filesystem of the container at the path `<dest>`.
   488  
   489  Multiple `<src>` resource may be specified but they must be relative
   490  to the source directory that is being built (the context of the build).
   491  
   492  Each `<src>` may contain wildcards and matching will be done using Go's
   493  [filepath.Match](http://golang.org/pkg/path/filepath#Match) rules.
   494  For most command line uses this should act as expected, for example:
   495  
   496      COPY hom* /mydir/        # adds all files starting with "hom"
   497      COPY hom?.txt /mydir/    # ? is replaced with any single character
   498  
   499  The `<dest>` is an absolute path, or a path relative to `WORKDIR`, into which
   500  the source will be copied inside the destination container.
   501  
   502      COPY test aDir/          # adds "test" to `WORKDIR`/aDir/
   503  
   504  All new files and directories are created with a UID and GID of 0.
   505  
   506  > **Note**:
   507  > If you build using STDIN (`docker build - < somefile`), there is no
   508  > build context, so `COPY` can't be used.
   509  
   510  The copy obeys the following rules:
   511  
   512  - The `<src>` path must be inside the *context* of the build;
   513    you cannot `COPY ../something /something`, because the first step of a
   514    `docker build` is to send the context directory (and subdirectories) to the
   515    docker daemon.
   516  
   517  - If `<src>` is a directory, the entire contents of the directory are copied, 
   518    including filesystem metadata. 
   519  > **Note**:
   520  > The directory itself is not copied, just its contents.
   521  
   522  - If `<src>` is any other kind of file, it is copied individually along with
   523    its metadata. In this case, if `<dest>` ends with a trailing slash `/`, it
   524    will be considered a directory and the contents of `<src>` will be written
   525    at `<dest>/base(<src>)`.
   526  
   527  - If multiple `<src>` resources are specified, either directly or due to the
   528    use of a wildcard, then `<dest>` must be a directory, and it must end with 
   529    a slash `/`.
   530  
   531  - If `<dest>` does not end with a trailing slash, it will be considered a
   532    regular file and the contents of `<src>` will be written at `<dest>`.
   533  
   534  - If `<dest>` doesn't exist, it is created along with all missing directories
   535    in its path.
   536  
   537  ## ENTRYPOINT
   538  
   539  ENTRYPOINT has two forms:
   540  
   541  - `ENTRYPOINT ["executable", "param1", "param2"]`
   542    (the preferred *exec* form)
   543  - `ENTRYPOINT command param1 param2`
   544    (*shell* form)
   545  
   546  An `ENTRYPOINT` allows you to configure a container that will run as an executable.
   547  
   548  For example, the following will start nginx with its default content, listening
   549  on port 80:
   550  
   551      docker run -i -t --rm -p 80:80 nginx
   552  
   553  Command line arguments to `docker run <image>` will be appended after all
   554  elements in an *exec* form `ENTRYPOINT`, and will override all elements specified
   555  using `CMD`.
   556  This allows arguments to be passed to the entry point, i.e., `docker run <image> -d`
   557  will pass the `-d` argument to the entry point. 
   558  You can override the `ENTRYPOINT` instruction using the `docker run --entrypoint`
   559  flag.
   560  
   561  The *shell* form prevents any `CMD` or `run` command line arguments from being
   562  used, but has the disadvantage that your `ENTRYPOINT` will be started as a
   563  subcommand of `/bin/sh -c`, which does not pass signals.
   564  This means that the executable will not be the container's `PID 1` - and
   565  will _not_ receive Unix signals - so your executable will not receive a
   566  `SIGTERM` from `docker stop <container>`.
   567  
   568  Only the last `ENTRYPOINT` instruction in the `Dockerfile` will have an effect.
   569  
   570  ### Exec form ENTRYPOINT example
   571  
   572  You can use the *exec* form of `ENTRYPOINT` to set fairly stable default commands
   573  and arguments and then use either form of `CMD` to set additional defaults that
   574  are more likely to be changed.
   575  
   576      FROM ubuntu
   577      ENTRYPOINT ["top", "-b"]
   578      CMD ["-c"]
   579  
   580  When you run the container, you can see that `top` is the only process:
   581  
   582      $ docker run -it --rm --name test  top -H
   583      top - 08:25:00 up  7:27,  0 users,  load average: 0.00, 0.01, 0.05
   584      Threads:   1 total,   1 running,   0 sleeping,   0 stopped,   0 zombie
   585      %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
   586      KiB Mem:   2056668 total,  1616832 used,   439836 free,    99352 buffers
   587      KiB Swap:  1441840 total,        0 used,  1441840 free.  1324440 cached Mem
   588      
   589        PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
   590          1 root      20   0   19744   2336   2080 R  0.0  0.1   0:00.04 top
   591      
   592  To examine the result further, you can use `docker exec`:
   593  
   594      $ docker exec -it test ps aux
   595      USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
   596      root         1  2.6  0.1  19752  2352 ?        Ss+  08:24   0:00 top -b -H
   597      root         7  0.0  0.1  15572  2164 ?        R+   08:25   0:00 ps aux
   598  
   599  And you can gracefully request `top` to shut down using `docker stop test`.
   600  
   601  The following `Dockerfile` shows using the `ENTRYPOINT` to run Apache in the
   602  foreground (i.e., as `PID 1`):
   603  
   604  ```
   605  FROM debian:stable
   606  RUN apt-get update && apt-get install -y --force-yes apache2
   607  EXPOSE 80 443
   608  VOLUME ["/var/www", "/var/log/apache2", "/etc/apache2"]
   609  ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
   610  ```
   611  
   612  If you need to write a starter script for a single executable, you can ensure that
   613  the final executable receives the Unix signals by using `exec` and `gosu`
   614  (see [the Dockerfile best practices](/articles/dockerfile_best-practices/#entrypoint)
   615  for more details):
   616  
   617  ```bash
   618  #!/bin/bash
   619  set -e
   620  
   621  if [ "$1" = 'postgres' ]; then
   622      chown -R postgres "$PGDATA"
   623  
   624      if [ -z "$(ls -A "$PGDATA")" ]; then
   625          gosu postgres initdb
   626      fi
   627  
   628      exec gosu postgres "$@"
   629  fi
   630  
   631  exec "$@"
   632  ```
   633  
   634  Lastly, if you need to do some extra cleanup (or communicate with other containers)
   635  on shutdown, or are co-ordinating more than one executable, you may need to ensure
   636  that the `ENTRYPOINT` script receives the Unix signals, passes them on, and then
   637  does some more work:
   638  
   639  ```
   640  #!/bin/sh
   641  # Note: I've written this using sh so it works in the busybox container too
   642  
   643  # USE the trap if you need to also do manual cleanup after the service is stopped,
   644  #     or need to start multiple services in the one container
   645  trap "echo TRAPed signal" HUP INT QUIT KILL TERM
   646  
   647  # start service in background here
   648  /usr/sbin/apachectl start
   649  
   650  echo "[hit enter key to exit] or run 'docker stop <container>'"
   651  read
   652  
   653  # stop service and clean up here
   654  echo "stopping apache"
   655  /usr/sbin/apachectl stop
   656  
   657  echo "exited $0"
   658  ```
   659  
   660  If you run this image with `docker run -it --rm -p 80:80 --name test apache`,
   661  you can then examine the container's processes with `docker exec`, or `docker top`,
   662  and then ask the script to stop Apache:
   663  
   664  ```bash
   665  $ docker exec -it test ps aux
   666  USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
   667  root         1  0.1  0.0   4448   692 ?        Ss+  00:42   0:00 /bin/sh /run.sh 123 cmd cmd2
   668  root        19  0.0  0.2  71304  4440 ?        Ss   00:42   0:00 /usr/sbin/apache2 -k start
   669  www-data    20  0.2  0.2 360468  6004 ?        Sl   00:42   0:00 /usr/sbin/apache2 -k start
   670  www-data    21  0.2  0.2 360468  6000 ?        Sl   00:42   0:00 /usr/sbin/apache2 -k start
   671  root        81  0.0  0.1  15572  2140 ?        R+   00:44   0:00 ps aux
   672  $ docker top test
   673  PID                 USER                COMMAND
   674  10035               root                {run.sh} /bin/sh /run.sh 123 cmd cmd2
   675  10054               root                /usr/sbin/apache2 -k start
   676  10055               33                  /usr/sbin/apache2 -k start
   677  10056               33                  /usr/sbin/apache2 -k start
   678  $ /usr/bin/time docker stop test
   679  test
   680  real	0m 0.27s
   681  user	0m 0.03s
   682  sys	0m 0.03s
   683  ```
   684  
   685  > **Note:** you can over ride the `ENTRYPOINT` setting using `--entrypoint`,
   686  > but this can only set the binary to *exec* (no `sh -c` will be used).
   687  
   688  > **Note**:
   689  > The *exec* form is parsed as a JSON array, which means that
   690  > you must use double-quotes (") around words not single-quotes (').
   691  
   692  > **Note**:
   693  > Unlike the *shell* form, the *exec* form does not invoke a command shell.
   694  > This means that normal shell processing does not happen. For example,
   695  > `ENTRYPOINT [ "echo", "$HOME" ]` will not do variable substitution on `$HOME`.
   696  > If you want shell processing then either use the *shell* form or execute 
   697  > a shell directly, for example: `ENTRYPOINT [ "sh", "-c", "echo", "$HOME" ]`.
   698  > Variables that are defined in the `Dockerfile`using `ENV`, will be substituted by
   699  > the `Dockerfile` parser.
   700  
   701  ### Shell form ENTRYPOINT example
   702  
   703  You can specify a plain string for the `ENTRYPOINT` and it will execute in `/bin/sh -c`.
   704  This form will use shell processing to substitute shell environment variables,
   705  and will ignore any `CMD` or `docker run` command line arguments.
   706  To ensure that `docker stop` will signal any long running `ENTRYPOINT` executable
   707  correctly, you need to remember to start it with `exec`:
   708  
   709      FROM ubuntu
   710      ENTRYPOINT exec top -b
   711  
   712  When you run this image, you'll see the single `PID 1` process:
   713  
   714      $ docker run -it --rm --name test top
   715      Mem: 1704520K used, 352148K free, 0K shrd, 0K buff, 140368121167873K cached
   716      CPU:   5% usr   0% sys   0% nic  94% idle   0% io   0% irq   0% sirq
   717      Load average: 0.08 0.03 0.05 2/98 6
   718        PID  PPID USER     STAT   VSZ %VSZ %CPU COMMAND
   719          1     0 root     R     3164   0%   0% top -b
   720  
   721  Which will exit cleanly on `docker stop`:
   722  
   723      $ /usr/bin/time docker stop test
   724      test
   725      real	0m 0.20s
   726      user	0m 0.02s
   727      sys	0m 0.04s
   728  
   729  If you forget to add `exec` to the beginning of your `ENTRYPOINT`:
   730  
   731      FROM ubuntu
   732      ENTRYPOINT top -b
   733      CMD --ignored-param1
   734  
   735  You can then run it (giving it a name for the next step):
   736  
   737      $ docker run -it --name test top --ignored-param2
   738      Mem: 1704184K used, 352484K free, 0K shrd, 0K buff, 140621524238337K cached
   739      CPU:   9% usr   2% sys   0% nic  88% idle   0% io   0% irq   0% sirq
   740      Load average: 0.01 0.02 0.05 2/101 7
   741        PID  PPID USER     STAT   VSZ %VSZ %CPU COMMAND
   742          1     0 root     S     3168   0%   0% /bin/sh -c top -b cmd cmd2
   743          7     1 root     R     3164   0%   0% top -b
   744  
   745  You can see from the output of `top` that the specified `ENTRYPOINT` is not `PID 1`.
   746  
   747  If you then run `docker stop test`, the container will not exit cleanly - the
   748  `stop` command will be forced to send a `SIGKILL` after the timeout:
   749  
   750      $ docker exec -it test ps aux
   751      PID   USER     COMMAND
   752          1 root     /bin/sh -c top -b cmd cmd2
   753          7 root     top -b
   754          8 root     ps aux
   755      $ /usr/bin/time docker stop test
   756      test
   757      real	0m 10.19s
   758      user	0m 0.04s
   759      sys	0m 0.03s
   760  
   761  ## VOLUME
   762  
   763      VOLUME ["/data"]
   764  
   765  The `VOLUME` instruction will create a mount point with the specified name
   766  and mark it as holding externally mounted volumes from native host or other
   767  containers. The value can be a JSON array, `VOLUME ["/var/log/"]`, or a plain
   768  string with multiple arguments, such as `VOLUME /var/log` or `VOLUME /var/log
   769  /var/db`.  For more information/examples and mounting instructions via the
   770  Docker client, refer to [*Share Directories via Volumes*](/userguide/dockervolumes/#volume)
   771  documentation.
   772  
   773  > **Note**:
   774  > The list is parsed as a JSON array, which means that
   775  > you must use double-quotes (") around words not single-quotes (').
   776  
   777  ## USER
   778  
   779      USER daemon
   780  
   781  The `USER` instruction sets the user name or UID to use when running the image
   782  and for any `RUN`, `CMD` and `ENTRYPOINT` instructions that follow it in the
   783  `Dockerfile`.
   784  
   785  ## WORKDIR
   786  
   787      WORKDIR /path/to/workdir
   788  
   789  The `WORKDIR` instruction sets the working directory for any `RUN`, `CMD` and
   790  `ENTRYPOINT` instructions that follow it in the `Dockerfile`.
   791  
   792  It can be used multiple times in the one `Dockerfile`. If a relative path
   793  is provided, it will be relative to the path of the previous `WORKDIR`
   794  instruction. For example:
   795  
   796      WORKDIR /a
   797      WORKDIR b
   798      WORKDIR c
   799      RUN pwd
   800  
   801  The output of the final `pwd` command in this `Dockerfile` would be
   802  `/a/b/c`.
   803  
   804  The `WORKDIR` instruction can resolve environment variables previously set using
   805  `ENV`. You can only use environment variables explicitly set in the `Dockerfile`.
   806  For example:
   807  
   808      ENV DIRPATH /path
   809      WORKDIR $DIRPATH/$DIRNAME
   810  
   811  The output of the final `pwd` command in this `Dockerfile` would be
   812  `/path/$DIRNAME`
   813  
   814  ## ONBUILD
   815  
   816      ONBUILD [INSTRUCTION]
   817  
   818  The `ONBUILD` instruction adds to the image a *trigger* instruction to
   819  be executed at a later time, when the image is used as the base for
   820  another build. The trigger will be executed in the context of the
   821  downstream build, as if it had been inserted immediately after the
   822  `FROM` instruction in the downstream `Dockerfile`.
   823  
   824  Any build instruction can be registered as a trigger.
   825  
   826  This is useful if you are building an image which will be used as a base
   827  to build other images, for example an application build environment or a
   828  daemon which may be customized with user-specific configuration.
   829  
   830  For example, if your image is a reusable Python application builder, it
   831  will require application source code to be added in a particular
   832  directory, and it might require a build script to be called *after*
   833  that. You can't just call `ADD` and `RUN` now, because you don't yet
   834  have access to the application source code, and it will be different for
   835  each application build. You could simply provide application developers
   836  with a boilerplate `Dockerfile` to copy-paste into their application, but
   837  that is inefficient, error-prone and difficult to update because it
   838  mixes with application-specific code.
   839  
   840  The solution is to use `ONBUILD` to register advance instructions to
   841  run later, during the next build stage.
   842  
   843  Here's how it works:
   844  
   845  1. When it encounters an `ONBUILD` instruction, the builder adds a
   846     trigger to the metadata of the image being built. The instruction
   847     does not otherwise affect the current build.
   848  2. At the end of the build, a list of all triggers is stored in the
   849     image manifest, under the key `OnBuild`. They can be inspected with
   850     the `docker inspect` command.
   851  3. Later the image may be used as a base for a new build, using the
   852     `FROM` instruction. As part of processing the `FROM` instruction,
   853     the downstream builder looks for `ONBUILD` triggers, and executes
   854     them in the same order they were registered. If any of the triggers
   855     fail, the `FROM` instruction is aborted which in turn causes the
   856     build to fail. If all triggers succeed, the `FROM` instruction
   857     completes and the build continues as usual.
   858  4. Triggers are cleared from the final image after being executed. In
   859     other words they are not inherited by "grand-children" builds.
   860  
   861  For example you might add something like this:
   862  
   863      [...]
   864      ONBUILD ADD . /app/src
   865      ONBUILD RUN /usr/local/bin/python-build --dir /app/src
   866      [...]
   867  
   868  > **Warning**: Chaining `ONBUILD` instructions using `ONBUILD ONBUILD` isn't allowed.
   869  
   870  > **Warning**: The `ONBUILD` instruction may not trigger `FROM` or `MAINTAINER` instructions.
   871  
   872  ## Dockerfile Examples
   873  
   874      # Nginx
   875      #
   876      # VERSION               0.0.1
   877  
   878      FROM      ubuntu
   879      MAINTAINER Victor Vieux <victor@docker.com>
   880  
   881      RUN apt-get update && apt-get install -y inotify-tools nginx apache2 openssh-server
   882  
   883      # Firefox over VNC
   884      #
   885      # VERSION               0.3
   886  
   887      FROM ubuntu
   888  
   889      # Install vnc, xvfb in order to create a 'fake' display and firefox
   890      RUN apt-get update && apt-get install -y x11vnc xvfb firefox
   891      RUN mkdir ~/.vnc
   892      # Setup a password
   893      RUN x11vnc -storepasswd 1234 ~/.vnc/passwd
   894      # Autostart firefox (might not be the best way, but it does the trick)
   895      RUN bash -c 'echo "firefox" >> /.bashrc'
   896  
   897      EXPOSE 5900
   898      CMD    ["x11vnc", "-forever", "-usepw", "-create"]
   899  
   900      # Multiple images example
   901      #
   902      # VERSION               0.1
   903  
   904      FROM ubuntu
   905      RUN echo foo > bar
   906      # Will output something like ===> 907ad6c2736f
   907  
   908      FROM ubuntu
   909      RUN echo moo > oink
   910      # Will output something like ===> 695d7793cbe4
   911  
   912      # You᾿ll now have two images, 907ad6c2736f with /bar, and 695d7793cbe4 with
   913      # /oink.
   914