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