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