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