From 2eaa994b247f72c13184ddd3743980137cb28e99 Mon Sep 17 00:00:00 2001 From: bin liu Date: Mon, 10 Aug 2015 23:02:18 +0800 Subject: [PATCH 01/22] change port number through example context Signed-off-by: bin liu (cherry picked from commit b0a65f93a5ab2de540825fab43b4d2ec01f22f36) --- docs/userguide/dockerlinks.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/userguide/dockerlinks.md b/docs/userguide/dockerlinks.md index 228e46a3b..6a41db38f 100644 --- a/docs/userguide/dockerlinks.md +++ b/docs/userguide/dockerlinks.md @@ -227,11 +227,11 @@ The components in this prefix are: Docker uses this prefix format to define three distinct environment variables: * The `prefix_ADDR` variable contains the IP Address from the URL, for -example `WEBDB_PORT_8080_TCP_ADDR=172.17.0.82`. +example `WEBDB_PORT_5432_TCP_ADDR=172.17.0.82`. * The `prefix_PORT` variable contains just the port number from the URL for -example `WEBDB_PORT_8080_TCP_PORT=8080`. +example `WEBDB_PORT_5432_TCP_PORT=5432`. * The `prefix_PROTO` variable contains just the protocol from the URL for -example `WEBDB_PORT_8080_TCP_PROTO=tcp`. +example `WEBDB_PORT_5432_TCP_PROTO=tcp`. If the container exposes multiple ports, an environment variable set is defined for each one. This means, for example, if a container exposes 4 ports @@ -240,7 +240,7 @@ that Docker creates 12 environment variables, 3 for each port. Additionally, Docker creates an environment variable called `_PORT`. This variable contains the URL of the source container's first exposed port. The 'first' port is defined as the exposed port with the lowest number. -For example, consider the `WEBDB_PORT=tcp://172.17.0.82:8080` variable. If +For example, consider the `WEBDB_PORT=tcp://172.17.0.82:5432` variable. If that port is used for both tcp and udp, then the tcp one is specified. Finally, Docker also exposes each Docker originated environment variable From 551c4559ad0bf151bcc5bb1e702f20827c602413 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Thu, 13 Aug 2015 01:29:10 +0200 Subject: [PATCH 02/22] docs: fix fedora prerequisites heading Fixes the prerequisites heading not being rendered properly, because of a missing space. Signed-off-by: Sebastiaan van Stijn (cherry picked from commit 2c18e1cd053895cd1ef28ec940d4be7f94c97604) --- docs/installation/fedora.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation/fedora.md b/docs/installation/fedora.md index b1bdb19cb..82b66a014 100644 --- a/docs/installation/fedora.md +++ b/docs/installation/fedora.md @@ -21,7 +21,7 @@ installation mechanisms. Using these packages ensures you get the latest release of Docker. If you wish to install using Fedora-managed packages, consult your Fedora release documentation for information on Fedora's Docker support. -##Prerequisites +## Prerequisites Docker requires a 64-bit installation regardless of your Fedora version. Also, your kernel must be 3.10 at minimum. To check your current kernel version, open a terminal and use `uname -r` to display your kernel version: From d3fe81f9baa51b55591620aa415ef5cdb5f7471e Mon Sep 17 00:00:00 2001 From: bin liu Date: Mon, 10 Aug 2015 23:37:12 +0800 Subject: [PATCH 03/22] fix broken link to glossary page. Signed-off-by: bin liu (cherry picked from commit f6753cd9635b294f1463ef7fb6952dd2a74c0a69) --- docs/userguide/dockervolumes.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/userguide/dockervolumes.md b/docs/userguide/dockervolumes.md index 528aa1af6..f2aa70d3a 100644 --- a/docs/userguide/dockervolumes.md +++ b/docs/userguide/dockervolumes.md @@ -28,7 +28,7 @@ Docker. A *data volume* is a specially-designated directory within one or more containers that bypasses the [*Union File -System*](/terms/layer/#union-file-system). Data volumes provide several +System*](/reference/glossary#union-file-system). Data volumes provide several useful features for persistent or shared data: - Volumes are initialized when a container is created. If the container's From e1eee1290d306008ede8d6247e4a41a6b7268ea7 Mon Sep 17 00:00:00 2001 From: moxiegirl Date: Thu, 13 Aug 2015 06:42:26 -0700 Subject: [PATCH 04/22] Fixing bad formatting reported by David via email Fixed and tested Signed-off-by: Mary Anthony (cherry picked from commit ef453f7118d704319768d8d9c0cfe79e2d521afa) --- docs/security/trust/trust_automation.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/security/trust/trust_automation.md b/docs/security/trust/trust_automation.md index 0808d8cef..08caa8495 100644 --- a/docs/security/trust/trust_automation.md +++ b/docs/security/trust/trust_automation.md @@ -32,7 +32,7 @@ $ export DOCKER_CONTENT_TRUST_TAGGING_PASSPHRASE="l7pEQcTKJjUHm6Lpe4" Then, when pushing a new tag the Docker client does not request these values but signs automatically: -``bash +```bash $ docker push docker/trusttest:latest The push refers to a repository [docker.io/docker/trusttest] (len: 1) a9539b34a6ab: Image already exists @@ -45,7 +45,7 @@ Signing and pushing trust metadata You can also build with content trust. Before running the `docker build` command, you should set the environment variable `DOCKER_CONTENT_TRUST` either manually or in in a scripted fashion. Consider the simple Dockerfile below. -```Dockerfilea +```Dockerfile FROM docker/trusttest:latest RUN echo ``` From 67baebe9e7fee5a62b6a19d04734ae09cf7e681d Mon Sep 17 00:00:00 2001 From: Diogo Monica Date: Thu, 13 Aug 2015 19:16:00 -0700 Subject: [PATCH 05/22] Fixing race condition on private key backup how-to Signed-off-by: Diogo Monica (cherry picked from commit fbb268c12ab12fa282f11eabdedf7fdee3d24b4a) --- docs/security/trust/trust_key_mng.md | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/security/trust/trust_key_mng.md b/docs/security/trust/trust_key_mng.md index a9bd02b75..fbd7085e3 100644 --- a/docs/security/trust/trust_key_mng.md +++ b/docs/security/trust/trust_key_mng.md @@ -45,8 +45,7 @@ The Docker client stores the keys in the `~/.docker/trust/private` directory. Before backing them up, you should `tar` them into an archive: ```bash -$ tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private -$ chmod 600 private_keys_backup.tar.gz +$ umask 077; tar -zcvf private_keys_backup.tar.gz ~/.docker/trust/private; umask 022 ``` ## Lost keys From 172c412ae8cd9ebfb5db4d0ba8c66b17f3315afa Mon Sep 17 00:00:00 2001 From: Morgan Bauer Date: Wed, 12 Aug 2015 16:55:21 -0700 Subject: [PATCH 06/22] fix link Signed-off-by: Morgan Bauer (cherry picked from commit c50e78e799a3e66306d6376c60337d38de1bd59a) --- docs/reference/run.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference/run.md b/docs/reference/run.md index 2ae99377d..a7c6d97ba 100644 --- a/docs/reference/run.md +++ b/docs/reference/run.md @@ -908,7 +908,7 @@ container's logging driver. The following options are supported: The `docker logs`command is available only for the `json-file` logging driver. For detailed information on working with logging drivers, see -[Configure a logging driver](reference/logging/overview.md). +[Configure a logging driver](/reference/logging/overview/). ## Overriding Dockerfile image defaults From 8f7cdbb060931a1dc3affc7e826808a7c78d24c7 Mon Sep 17 00:00:00 2001 From: Charles Chan Date: Sat, 8 Aug 2015 16:06:25 -0700 Subject: [PATCH 07/22] Improve/fix "Dockerizing Applications" page. * Try to update the wording for the notes. Signed-off-by: Charles Chan (cherry picked from commit 316eb2979eb04d2d9524d6856b8e415c33c460f0) --- docs/userguide/dockerizing.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/userguide/dockerizing.md b/docs/userguide/dockerizing.md index 3f9c730de..21c3061c9 100644 --- a/docs/userguide/dockerizing.md +++ b/docs/userguide/dockerizing.md @@ -133,8 +133,8 @@ This really long string is called a *container ID*. It uniquely identifies a container so we can work with it. > **Note:** -> The container ID is a bit long and unwieldy and a bit later -> on we'll see a shorter ID and some ways to name our containers to make +> The container ID is a bit long and unwieldy. A bit later, +> we'll see a shorter ID and ways to name our containers to make > working with them easier. We can use this container ID to see what's happening with our `hello world` daemon. @@ -157,8 +157,8 @@ is running, its status and an automatically assigned name, `insane_babbage`. > **Note:** -> Docker automatically names any containers you start, a -> little later on we'll see how you can specify your own names. +> Docker automatically generates names for any containers started. +> We'll see how to specify your own names a bit later. Okay, so we now know it's running. But is it doing what we asked it to do? To see this we're going to look inside the container using the `docker logs` From 87f58529b27718e53ce2eec2d7886d5776e43cd3 Mon Sep 17 00:00:00 2001 From: Charles Chan Date: Sun, 2 Aug 2015 12:09:01 -0700 Subject: [PATCH 08/22] Reformat /containers/(id)/resize to make it consistent with "Exec Resize" section. Signed-off-by: Charles Chan (cherry picked from commit 6cd2d8946902eddab5e3902efeef3c7ffd748a1e) Conflicts: docs/reference/api/docker_remote_api_v1.21.md --- docs/reference/api/docker_remote_api_v1.21.md | 2277 +++++++++++++++++ 1 file changed, 2277 insertions(+) create mode 100644 docs/reference/api/docker_remote_api_v1.21.md diff --git a/docs/reference/api/docker_remote_api_v1.21.md b/docs/reference/api/docker_remote_api_v1.21.md new file mode 100644 index 000000000..dd76abd44 --- /dev/null +++ b/docs/reference/api/docker_remote_api_v1.21.md @@ -0,0 +1,2277 @@ + + +# Docker Remote API v1.21 + +## 1. Brief introduction + + - The Remote API has replaced `rcli`. + - The daemon listens on `unix:///var/run/docker.sock` but you can + [Bind Docker to another host/port or a Unix socket]( + /articles/basics/#bind-docker-to-another-hostport-or-a-unix-socket). + - The API tends to be REST. However, for some complex commands, like `attach` + or `pull`, the HTTP connection is hijacked to transport `stdout`, + `stdin` and `stderr`. + - When the client API version is newer than the daemon's, these calls return an HTTP + `400 Bad Request` error message. + +# 2. Endpoints + +## 2.1 Containers + +### List containers + +`GET /containers/json` + +List containers + +**Example request**: + + GET /containers/json?all=1&before=8dfafdbc3a40&size=1 HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "Id": "8dfafdbc3a40", + "Names":["/boring_feynman"], + "Image": "ubuntu:latest", + "Command": "echo 1", + "Created": 1367854155, + "Status": "Exit 0", + "Ports": [{"PrivatePort": 2222, "PublicPort": 3333, "Type": "tcp"}], + "SizeRw": 12288, + "SizeRootFs": 0 + }, + { + "Id": "9cd87474be90", + "Names":["/coolName"] + "Image": "ubuntu:latest", + "Command": "echo 222222", + "Created": 1367854155, + "Status": "Exit 0", + "Ports": [], + "SizeRw": 12288, + "SizeRootFs": 0 + }, + { + "Id": "3176a2479c92", + "Names":["/sleepy_dog"] + "Image": "ubuntu:latest", + "Command": "echo 3333333333333333", + "Created": 1367854154, + "Status": "Exit 0", + "Ports":[], + "SizeRw":12288, + "SizeRootFs":0 + }, + { + "Id": "4cb07b47f9fb", + "Names":["/running_cat"] + "Image": "ubuntu:latest", + "Command": "echo 444444444444444444444444444444444", + "Created": 1367854152, + "Status": "Exit 0", + "Ports": [], + "SizeRw": 12288, + "SizeRootFs": 0 + } + ] + +Query Parameters: + +- **all** – 1/True/true or 0/False/false, Show all containers. + Only running containers are shown by default (i.e., this defaults to false) +- **limit** – Show `limit` last created + containers, include non-running ones. +- **since** – Show only containers created since Id, include + non-running ones. +- **before** – Show only containers created before Id, include + non-running ones. +- **size** – 1/True/true or 0/False/false, Show the containers + sizes +- **filters** - a JSON encoded value of the filters (a `map[string][]string`) to process on the containers list. Available filters: + - `exited=`; -- containers with exit code of `` ; + - `status=`(`created`|`restarting`|`running`|`paused`|`exited`) + - `label=key` or `label="key=value"` of a container label + +Status Codes: + +- **200** – no error +- **400** – bad parameter +- **500** – server error + +### Create a container + +`POST /containers/create` + +Create a container + +**Example request**: + + POST /containers/create HTTP/1.1 + Content-Type: application/json + + { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": null, + "Cmd": [ + "date" + ], + "Entrypoint": "", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Mounts": [ + { + "Source": "/data", + "Destination": "/data", + "Mode": "ro,Z", + "RW": false + } + ], + "WorkingDir": "", + "NetworkDisabled": false, + "MacAddress": "12:34:56:78:9a:bc", + "ExposedPorts": { + "22/tcp": {} + }, + "HostConfig": { + "Binds": ["/tmp:/tmp"], + "Links": ["redis3:redis"], + "LxcConf": {"lxc.utsname":"docker"}, + "Memory": 0, + "MemorySwap": 0, + "CpuShares": 512, + "CpuPeriod": 100000, + "CpusetCpus": "0,1", + "CpusetMems": "0,1", + "BlkioWeight": 300, + "MemorySwappiness": 60, + "OomKillDisable": false, + "PortBindings": { "22/tcp": [{ "HostPort": "11022" }] }, + "PublishAllPorts": false, + "Privileged": false, + "ReadonlyRootfs": false, + "Dns": ["8.8.8.8"], + "DnsSearch": [""], + "ExtraHosts": null, + "VolumesFrom": ["parent", "other:ro"], + "CapAdd": ["NET_ADMIN"], + "CapDrop": ["MKNOD"], + "RestartPolicy": { "Name": "", "MaximumRetryCount": 0 }, + "NetworkMode": "bridge", + "Devices": [], + "Ulimits": [{}], + "LogConfig": { "Type": "json-file", "Config": {} }, + "SecurityOpt": [""], + "CgroupParent": "" + } + } + +**Example response**: + + HTTP/1.1 201 Created + Content-Type: application/json + + { + "Id":"e90e34656806" + "Warnings":[] + } + +Json Parameters: + +- **Hostname** - A string value containing the hostname to use for the + container. +- **Domainname** - A string value containing the domain name to use + for the container. +- **User** - A string value specifying the user inside the container. +- **Memory** - Memory limit in bytes. +- **MemorySwap**- Total memory limit (memory + swap); set `-1` to disable swap + You must use this with `memory` and make the swap value larger than `memory`. +- **CpuShares** - An integer value containing the container's CPU Shares + (ie. the relative weight vs other containers). +- **CpuPeriod** - The length of a CPU period in microseconds. +- **Cpuset** - Deprecated please don't use. Use `CpusetCpus` instead. +- **CpusetCpus** - String value containing the `cgroups CpusetCpus` to use. +- **CpusetMems** - Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. +- **BlkioWeight** - Block IO weight (relative weight) accepts a weight value between 10 and 1000. +- **MemorySwappiness** - Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. +- **OomKillDisable** - Boolean value, whether to disable OOM Killer for the container or not. +- **AttachStdin** - Boolean value, attaches to `stdin`. +- **AttachStdout** - Boolean value, attaches to `stdout`. +- **AttachStderr** - Boolean value, attaches to `stderr`. +- **Tty** - Boolean value, Attach standard streams to a `tty`, including `stdin` if it is not closed. +- **OpenStdin** - Boolean value, opens stdin, +- **StdinOnce** - Boolean value, close `stdin` after the 1 attached client disconnects. +- **Env** - A list of environment variables in the form of `VAR=value` +- **Labels** - Adds a map of labels to a container. To specify a map: `{"key":"value"[,"key2":"value2"]}` +- **Cmd** - Command to run specified as a string or an array of strings. +- **Entrypoint** - Set the entry point for the container as a string or an array + of strings. +- **Image** - A string specifying the image name to use for the container. +- **Mounts** - An array of mount points in the container. +- **WorkingDir** - A string specifying the working directory for commands to + run in. +- **NetworkDisabled** - Boolean value, when true disables networking for the + container +- **ExposedPorts** - An object mapping ports to an empty object in the form of: + `"ExposedPorts": { "/: {}" }` +- **HostConfig** + - **Binds** – A list of volume bindings for this container. Each volume binding is a string in one of these forms: + + `container_path` to create a new volume for the container + + `host_path:container_path` to bind-mount a host path into the container + + `host_path:container_path:ro` to make the bind-mount read-only inside the container. + - **Links** - A list of links for the container. Each link entry should be + in the form of `container_name:alias`. + - **LxcConf** - LXC specific configurations. These configurations only + work when using the `lxc` execution driver. + - **PortBindings** - A map of exposed container ports and the host port they + should map to. A JSON object in the form + `{ /: [{ "HostPort": "" }] }` + Take note that `port` is specified as a string and not an integer value. + - **PublishAllPorts** - Allocates a random host port for all of a container's + exposed ports. Specified as a boolean value. + - **Privileged** - Gives the container full access to the host. Specified as + a boolean value. + - **ReadonlyRootfs** - Mount the container's root filesystem as read only. + Specified as a boolean value. + - **Dns** - A list of DNS servers for the container to use. + - **DnsSearch** - A list of DNS search domains + - **ExtraHosts** - A list of hostnames/IP mappings to add to the + container's `/etc/hosts` file. Specified in the form `["hostname:IP"]`. + - **VolumesFrom** - A list of volumes to inherit from another container. + Specified in the form `[:]` + - **CapAdd** - A list of kernel capabilities to add to the container. + - **Capdrop** - A list of kernel capabilities to drop from the container. + - **RestartPolicy** – The behavior to apply when the container exits. The + value is an object with a `Name` property of either `"always"` to + always restart or `"on-failure"` to restart only when the container + exit code is non-zero. If `on-failure` is used, `MaximumRetryCount` + controls the number of times to retry before giving up. + The default is not to restart. (optional) + An ever increasing delay (double the previous delay, starting at 100mS) + is added before each restart to prevent flooding the server. + - **NetworkMode** - Sets the networking mode for the container. Supported + values are: `bridge`, `host`, and `container:` + - **Devices** - A list of devices to add to the container specified as a JSON object in the + form + `{ "PathOnHost": "/dev/deviceName", "PathInContainer": "/dev/deviceName", "CgroupPermissions": "mrw"}` + - **Ulimits** - A list of ulimits to set in the container, specified as + `{ "Name": , "Soft": , "Hard": }`, for example: + `Ulimits: { "Name": "nofile", "Soft": 1024, "Hard", 2048 }}` + - **SecurityOpt**: A list of string values to customize labels for MLS + systems, such as SELinux. + - **LogConfig** - Log configuration for the container, specified as a JSON object in the form + `{ "Type": "", "Config": {"key1": "val1"}}`. + Available types: `json-file`, `syslog`, `journald`, `gelf`, `none`. + `json-file` logging driver. + - **CgroupParent** - Path to `cgroups` under which the container's `cgroup` is created. If the path is not absolute, the path is considered to be relative to the `cgroups` path of the init process. Cgroups are created if they do not already exist. + +Query Parameters: + +- **name** – Assign the specified name to the container. Must + match `/?[a-zA-Z0-9_-]+`. + +Status Codes: + +- **201** – no error +- **404** – no such container +- **406** – impossible to attach (container not running) +- **500** – server error + +### Inspect a container + +`GET /containers/(id)/json` + +Return low-level information on the container `id` + + +**Example request**: + + GET /containers/4fa6e0f0c678/json HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "AppArmorProfile": "", + "Args": [ + "-c", + "exit 9" + ], + "Config": { + "AttachStderr": true, + "AttachStdin": false, + "AttachStdout": true, + "Cmd": [ + "/bin/sh", + "-c", + "exit 9" + ], + "Domainname": "", + "Entrypoint": null, + "Env": [ + "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" + ], + "ExposedPorts": null, + "Hostname": "ba033ac44011", + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "MacAddress": "", + "NetworkDisabled": false, + "OnBuild": null, + "OpenStdin": false, + "StdinOnce": false, + "Tty": false, + "User": "", + "Volumes": null, + "WorkingDir": "" + }, + "Created": "2015-01-06T15:47:31.485331387Z", + "Driver": "devicemapper", + "ExecDriver": "native-0.2", + "ExecIDs": null, + "HostConfig": { + "Binds": null, + "BlkioWeight": 0, + "CapAdd": null, + "CapDrop": null, + "ContainerIDFile": "", + "CpusetCpus": "", + "CpusetMems": "", + "CpuShares": 0, + "CpuPeriod": 100000, + "Devices": [], + "Dns": null, + "DnsSearch": null, + "ExtraHosts": null, + "IpcMode": "", + "Links": null, + "LxcConf": [], + "Memory": 0, + "MemorySwap": 0, + "OomKillDisable": false, + "NetworkMode": "bridge", + "PortBindings": {}, + "Privileged": false, + "ReadonlyRootfs": false, + "PublishAllPorts": false, + "RestartPolicy": { + "MaximumRetryCount": 2, + "Name": "on-failure" + }, + "LogConfig": { + "Config": null, + "Type": "json-file" + }, + "SecurityOpt": null, + "VolumesFrom": null, + "Ulimits": [{}] + }, + "HostnamePath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hostname", + "HostsPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/hosts", + "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", + "Id": "ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39", + "Image": "04c5d3b7b0656168630d3ba35d8889bd0e9caafcaeb3004d2bfbc47e7c5d35d2", + "MountLabel": "", + "Name": "/boring_euclid", + "NetworkSettings": { + "Bridge": "", + "Gateway": "", + "IPAddress": "", + "IPPrefixLen": 0, + "MacAddress": "", + "PortMapping": null, + "Ports": null + }, + "Path": "/bin/sh", + "ProcessLabel": "", + "ResolvConfPath": "/var/lib/docker/containers/ba033ac4401106a3b513bc9d639eee123ad78ca3616b921167cd74b20e25ed39/resolv.conf", + "RestartCount": 1, + "State": { + "Error": "", + "ExitCode": 9, + "FinishedAt": "2015-01-06T15:47:32.080254511Z", + "OOMKilled": false, + "Paused": false, + "Pid": 0, + "Restarting": false, + "Running": false, + "StartedAt": "2015-01-06T15:47:32.072697474Z" + }, + "Mounts": [ + { + "Source": "/data", + "Destination": "/data", + "Mode": "ro,Z", + "RW": false + } + ] + } + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +### List processes running inside a container + +`GET /containers/(id)/top` + +List processes running inside the container `id` + +**Example request**: + + GET /containers/4fa6e0f0c678/top HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "Titles": [ + "USER", + "PID", + "%CPU", + "%MEM", + "VSZ", + "RSS", + "TTY", + "STAT", + "START", + "TIME", + "COMMAND" + ], + "Processes": [ + ["root","20147","0.0","0.1","18060","1864","pts/4","S","10:06","0:00","bash"], + ["root","20271","0.0","0.0","4312","352","pts/4","S+","10:07","0:00","sleep","10"] + ] + } + +Query Parameters: + +- **ps_args** – ps arguments to use (e.g., aux) + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +### Get container logs + +`GET /containers/(id)/logs` + +Get `stdout` and `stderr` logs from the container ``id`` + +> **Note**: +> This endpoint works only for containers with `json-file` logging driver. + +**Example request**: + + GET /containers/4fa6e0f0c678/logs?stderr=1&stdout=1×tamps=1&follow=1&tail=10&since=1428990821 HTTP/1.1 + +**Example response**: + + HTTP/1.1 101 UPGRADED + Content-Type: application/vnd.docker.raw-stream + Connection: Upgrade + Upgrade: tcp + + {{ STREAM }} + +Query Parameters: + +- **follow** – 1/True/true or 0/False/false, return stream. Default `false`. +- **stdout** – 1/True/true or 0/False/false, show `stdout` log. Default `false`. +- **stderr** – 1/True/true or 0/False/false, show `stderr` log. Default `false`. +- **since** – UNIX timestamp (integer) to filter logs. Specifying a timestamp + will only output log-entries since that timestamp. Default: 0 (unfiltered) +- **timestamps** – 1/True/true or 0/False/false, print timestamps for + every log line. Default `false`. +- **tail** – Output specified number of lines at the end of logs: `all` or ``. Default all. + +Status Codes: + +- **101** – no error, hints proxy about hijacking +- **200** – no error, no upgrade header found +- **404** – no such container +- **500** – server error + +### Inspect changes on a container's filesystem + +`GET /containers/(id)/changes` + +Inspect changes on container `id`'s filesystem + +**Example request**: + + GET /containers/4fa6e0f0c678/changes HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "Path": "/dev", + "Kind": 0 + }, + { + "Path": "/dev/kmsg", + "Kind": 1 + }, + { + "Path": "/test", + "Kind": 1 + } + ] + +Values for `Kind`: + +- `0`: Modify +- `1`: Add +- `2`: Delete + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +### Export a container + +`GET /containers/(id)/export` + +Export the contents of container `id` + +**Example request**: + + GET /containers/4fa6e0f0c678/export HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/octet-stream + + {{ TAR STREAM }} + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +### Get container stats based on resource usage + +`GET /containers/(id)/stats` + +This endpoint returns a live stream of a container's resource usage statistics. + +> **Note**: this functionality currently only works when using the *libcontainer* exec-driver. + +**Example request**: + + GET /containers/redis1/stats HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "read" : "2015-01-08T22:57:31.547920715Z", + "network" : { + "rx_dropped" : 0, + "rx_bytes" : 648, + "rx_errors" : 0, + "tx_packets" : 8, + "tx_dropped" : 0, + "rx_packets" : 8, + "tx_errors" : 0, + "tx_bytes" : 648 + }, + "memory_stats" : { + "stats" : { + "total_pgmajfault" : 0, + "cache" : 0, + "mapped_file" : 0, + "total_inactive_file" : 0, + "pgpgout" : 414, + "rss" : 6537216, + "total_mapped_file" : 0, + "writeback" : 0, + "unevictable" : 0, + "pgpgin" : 477, + "total_unevictable" : 0, + "pgmajfault" : 0, + "total_rss" : 6537216, + "total_rss_huge" : 6291456, + "total_writeback" : 0, + "total_inactive_anon" : 0, + "rss_huge" : 6291456, + "hierarchical_memory_limit" : 67108864, + "total_pgfault" : 964, + "total_active_file" : 0, + "active_anon" : 6537216, + "total_active_anon" : 6537216, + "total_pgpgout" : 414, + "total_cache" : 0, + "inactive_anon" : 0, + "active_file" : 0, + "pgfault" : 964, + "inactive_file" : 0, + "total_pgpgin" : 477 + }, + "max_usage" : 6651904, + "usage" : 6537216, + "failcnt" : 0, + "limit" : 67108864 + }, + "blkio_stats" : {}, + "cpu_stats" : { + "cpu_usage" : { + "percpu_usage" : [ + 16970827, + 1839451, + 7107380, + 10571290 + ], + "usage_in_usermode" : 10000000, + "total_usage" : 36488948, + "usage_in_kernelmode" : 20000000 + }, + "system_cpu_usage" : 20091722000000000, + "throttling_data" : {} + } + } + +Query Parameters: + +- **stream** – 1/True/true or 0/False/false, pull stats once then disconnect. Default `true`. + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +### Resize a container TTY + +`POST /containers/(id)/resize` + +Resize the TTY for container with `id`. The unit is number of characters. You must restart the container for the resize to take effect. + +**Example request**: + + POST /containers/4fa6e0f0c678/resize?h=40&w=80 HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Length: 0 + Content-Type: text/plain; charset=utf-8 + +Query Parameters: + +- **h** – height of `tty` session +- **w** – width + +Status Codes: + +- **200** – no error +- **404** – No such container +- **500** – Cannot resize container + +### Start a container + +`POST /containers/(id)/start` + +Start the container `id` + +> **Note**: +> For backwards compatibility, this endpoint accepts a `HostConfig` as JSON-encoded request body. +> See [create a container](#create-a-container) for details. + +**Example request**: + + POST /containers/(id)/start HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Status Codes: + +- **204** – no error +- **304** – container already started +- **404** – no such container +- **500** – server error + +### Stop a container + +`POST /containers/(id)/stop` + +Stop the container `id` + +**Example request**: + + POST /containers/e90e34656806/stop?t=5 HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Query Parameters: + +- **t** – number of seconds to wait before killing the container + +Status Codes: + +- **204** – no error +- **304** – container already stopped +- **404** – no such container +- **500** – server error + +### Restart a container + +`POST /containers/(id)/restart` + +Restart the container `id` + +**Example request**: + + POST /containers/e90e34656806/restart?t=5 HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Query Parameters: + +- **t** – number of seconds to wait before killing the container + +Status Codes: + +- **204** – no error +- **404** – no such container +- **500** – server error + +### Kill a container + +`POST /containers/(id)/kill` + +Kill the container `id` + +**Example request**: + + POST /containers/e90e34656806/kill HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Query Parameters + +- **signal** - Signal to send to the container: integer or string like `SIGINT`. + When not set, `SIGKILL` is assumed and the call waits for the container to exit. + +Status Codes: + +- **204** – no error +- **404** – no such container +- **500** – server error + +### Rename a container + +`POST /containers/(id)/rename` + +Rename the container `id` to a `new_name` + +**Example request**: + + POST /containers/e90e34656806/rename?name=new_name HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Query Parameters: + +- **name** – new name for the container + +Status Codes: + +- **204** – no error +- **404** – no such container +- **409** - conflict name already assigned +- **500** – server error + +### Pause a container + +`POST /containers/(id)/pause` + +Pause the container `id` + +**Example request**: + + POST /containers/e90e34656806/pause HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Status Codes: + +- **204** – no error +- **404** – no such container +- **500** – server error + +### Unpause a container + +`POST /containers/(id)/unpause` + +Unpause the container `id` + +**Example request**: + + POST /containers/e90e34656806/unpause HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Status Codes: + +- **204** – no error +- **404** – no such container +- **500** – server error + +### Attach to a container + +`POST /containers/(id)/attach` + +Attach to the container `id` + +**Example request**: + + POST /containers/16253994b7c4/attach?logs=1&stream=0&stdout=1 HTTP/1.1 + +**Example response**: + + HTTP/1.1 101 UPGRADED + Content-Type: application/vnd.docker.raw-stream + Connection: Upgrade + Upgrade: tcp + + {{ STREAM }} + +Query Parameters: + +- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. +- **stream** – 1/True/true or 0/False/false, return stream. + Default `false`. +- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach + to `stdin`. Default `false`. +- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return + `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. +- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return + `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. + +Status Codes: + +- **101** – no error, hints proxy about hijacking +- **200** – no error, no upgrade header found +- **400** – bad parameter +- **404** – no such container +- **500** – server error + + **Stream details**: + + When using the TTY setting is enabled in + [`POST /containers/create` + ](/reference/api/docker_remote_api_v1.9/#create-a-container "POST /containers/create"), + the stream is the raw data from the process PTY and client's `stdin`. + When the TTY is disabled, then the stream is multiplexed to separate + `stdout` and `stderr`. + + The format is a **Header** and a **Payload** (frame). + + **HEADER** + + The header contains the information which the stream writes (`stdout` or + `stderr`). It also contains the size of the associated frame encoded in the + last four bytes (`uint32`). + + It is encoded on the first eight bytes like this: + + header := [8]byte{STREAM_TYPE, 0, 0, 0, SIZE1, SIZE2, SIZE3, SIZE4} + + `STREAM_TYPE` can be: + +- 0: `stdin` (is written on `stdout`) +- 1: `stdout` +- 2: `stderr` + + `SIZE1, SIZE2, SIZE3, SIZE4` are the four bytes of + the `uint32` size encoded as big endian. + + **PAYLOAD** + + The payload is the raw stream. + + **IMPLEMENTATION** + + The simplest way to implement the Attach protocol is the following: + + 1. Read eight bytes. + 2. Choose `stdout` or `stderr` depending on the first byte. + 3. Extract the frame size from the last four bytes. + 4. Read the extracted size and output it on the correct output. + 5. Goto 1. + +### Attach to a container (websocket) + +`GET /containers/(id)/attach/ws` + +Attach to the container `id` via websocket + +Implements websocket protocol handshake according to [RFC 6455](http://tools.ietf.org/html/rfc6455) + +**Example request** + + GET /containers/e90e34656806/attach/ws?logs=0&stream=1&stdin=1&stdout=1&stderr=1 HTTP/1.1 + +**Example response** + + {{ STREAM }} + +Query Parameters: + +- **logs** – 1/True/true or 0/False/false, return logs. Default `false`. +- **stream** – 1/True/true or 0/False/false, return stream. + Default `false`. +- **stdin** – 1/True/true or 0/False/false, if `stream=true`, attach + to `stdin`. Default `false`. +- **stdout** – 1/True/true or 0/False/false, if `logs=true`, return + `stdout` log, if `stream=true`, attach to `stdout`. Default `false`. +- **stderr** – 1/True/true or 0/False/false, if `logs=true`, return + `stderr` log, if `stream=true`, attach to `stderr`. Default `false`. + +Status Codes: + +- **200** – no error +- **400** – bad parameter +- **404** – no such container +- **500** – server error + +### Wait a container + +`POST /containers/(id)/wait` + +Block until container `id` stops, then returns the exit code + +**Example request**: + + POST /containers/16253994b7c4/wait HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + {"StatusCode": 0} + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +### Remove a container + +`DELETE /containers/(id)` + +Remove the container `id` from the filesystem + +**Example request**: + + DELETE /containers/16253994b7c4?v=1 HTTP/1.1 + +**Example response**: + + HTTP/1.1 204 No Content + +Query Parameters: + +- **v** – 1/True/true or 0/False/false, Remove the volumes + associated to the container. Default `false`. +- **force** - 1/True/true or 0/False/false, Kill then remove the container. + Default `false`. + +Status Codes: + +- **204** – no error +- **400** – bad parameter +- **404** – no such container +- **500** – server error + +### Copy files or folders from a container + +`POST /containers/(id)/copy` + +Copy files or folders of container `id` + +**Deprecated** in favor of the `archive` endpoint below. + +**Example request**: + + POST /containers/4fa6e0f0c678/copy HTTP/1.1 + Content-Type: application/json + + { + "Resource": "test.txt" + } + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/x-tar + + {{ TAR STREAM }} + +Status Codes: + +- **200** – no error +- **404** – no such container +- **500** – server error + +### Retrieving information about files and folders in a container + +`HEAD /containers/(id)/archive` + +See the description of the `X-Docker-Container-Path-Stat` header in the +folowing section. + +### Get an archive of a filesystem resource in a container + +`GET /containers/(id)/archive` + +Get an tar archive of a resource in the filesystem of container `id`. + +Query Parameters: + +- **path** - resource in the container's filesystem to archive. Required. + + If not an absolute path, it is relative to the container's root directory. + The resource specified by **path** must exist. To assert that the resource + is expected to be a directory, **path** should end in `/` or `/.` + (assuming a path separator of `/`). If **path** ends in `/.` then this + indicates that only the contents of the **path** directory should be + copied. A symlink is always resolved to its target. + + **Note**: It is not possible to copy certain system files such as resources + under `/proc`, `/sys`, `/dev`, and mounts created by the user in the + container. + +**Example request**: + + GET /containers/8cce319429b2/archive?path=/root HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/x-tar + X-Docker-Container-Path-Stat: eyJuYW1lIjoicm9vdCIsInNpemUiOjQwOTYsIm1vZGUiOjIxNDc0ODQwOTYsIm10aW1lIjoiMjAxNC0wMi0yN1QyMDo1MToyM1oiLCJsaW5rVGFyZ2V0IjoiIn0= + + {{ TAR STREAM }} + +On success, a response header `X-Docker-Container-Path-Stat` will be set to a +base64-encoded JSON object containing some filesystem header information about +the archived resource. The above example value would decode to the following +JSON object (whitespace added for readability): + + { + "name": "root", + "size": 4096, + "mode": 2147484096, + "mtime": "2014-02-27T20:51:23Z", + "linkTarget": "" + } + +A `HEAD` request can also be made to this endpoint if only this information is +desired. + +Status Codes: + +- **200** - success, returns archive of copied resource +- **400** - client error, bad parameter, details in JSON response body, one of: + - must specify path parameter (**path** cannot be empty) + - not a directory (**path** was asserted to be a directory but exists as a + file) +- **404** - client error, resource not found, one of: + – no such container (container `id` does not exist) + - no such file or directory (**path** does not exist) +- **500** - server error + +### Extract an archive of files or folders to a directory in a container + +`PUT /containers/(id)/archive` + +Upload a tar archive to be extracted to a path in the filesystem of container +`id`. + +Query Parameters: + +- **path** - path to a directory in the container + to extract the archive's contents into. Required. + + If not an absolute path, it is relative to the container's root directory. + The **path** resource must exist. +- **noOverwriteDirNonDir** - If "1", "true", or "True" then it will be an error + if unpacking the given content would cause an existing directory to be + replaced with a non-directory and vice versa. + +**Example request**: + + PUT /containers/8cce319429b2/archive?path=/vol1 HTTP/1.1 + Content-Type: application/x-tar + + {{ TAR STREAM }} + +**Example response**: + + HTTP/1.1 200 OK + +Status Codes: + +- **200** – the content was extracted successfully +- **400** - client error, bad parameter, details in JSON response body, one of: + - must specify path parameter (**path** cannot be empty) + - not a directory (**path** should be a directory but exists as a file) + - unable to overwrite existing directory with non-directory + (if **noOverwriteDirNonDir**) + - unable to overwrite existing non-directory with directory + (if **noOverwriteDirNonDir**) +- **403** - client error, permission denied, the volume + or container rootfs is marked as read-only. +- **404** - client error, resource not found, one of: + – no such container (container `id` does not exist) + - no such file or directory (**path** resource does not exist) +- **500** – server error + +## 2.2 Images + +### List Images + +`GET /images/json` + +**Example request**: + + GET /images/json?all=0 HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "RepoTags": [ + "ubuntu:12.04", + "ubuntu:precise", + "ubuntu:latest" + ], + "Id": "8dbd9e392a964056420e5d58ca5cc376ef18e2de93b5cc90e868a1bbc8318c1c", + "Created": 1365714795, + "Size": 131506275, + "VirtualSize": 131506275 + }, + { + "RepoTags": [ + "ubuntu:12.10", + "ubuntu:quantal" + ], + "ParentId": "27cf784147099545", + "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", + "Created": 1364102658, + "Size": 24653, + "VirtualSize": 180116135 + } + ] + +**Example request, with digest information**: + + GET /images/json?digests=1 HTTP/1.1 + +**Example response, with digest information**: + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "Created": 1420064636, + "Id": "4986bf8c15363d1c5d15512d5266f8777bfba4974ac56e3270e7760f6f0a8125", + "ParentId": "ea13149945cb6b1e746bf28032f02e9b5a793523481a0a18645fc77ad53c4ea2", + "RepoDigests": [ + "localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf" + ], + "RepoTags": [ + "localhost:5000/test/busybox:latest", + "playdate:latest" + ], + "Size": 0, + "VirtualSize": 2429728 + } + ] + +The response shows a single image `Id` associated with two repositories +(`RepoTags`): `localhost:5000/test/busybox`: and `playdate`. A caller can use +either of the `RepoTags` values `localhost:5000/test/busybox:latest` or +`playdate:latest` to reference the image. + +You can also use `RepoDigests` values to reference an image. In this response, +the array has only one reference and that is to the +`localhost:5000/test/busybox` repository; the `playdate` repository has no +digest. You can reference this digest using the value: +`localhost:5000/test/busybox@sha256:cbbf2f9a99b47fc460d...` + +See the `docker run` and `docker build` commands for examples of digest and tag +references on the command line. + +Query Parameters: + +- **all** – 1/True/true or 0/False/false, default false +- **filters** – a JSON encoded value of the filters (a map[string][]string) to process on the images list. Available filters: + - `dangling=true` + - `label=key` or `label="key=value"` of an image label +- **filter** - only return images with the specified name + +### Build image from a Dockerfile + +`POST /build` + +Build an image from a Dockerfile + +**Example request**: + + POST /build HTTP/1.1 + + {{ TAR STREAM }} + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + {"stream": "Step 1..."} + {"stream": "..."} + {"error": "Error...", "errorDetail": {"code": 123, "message": "Error..."}} + +The input stream must be a `tar` archive compressed with one of the +following algorithms: `identity` (no compression), `gzip`, `bzip2`, `xz`. + +The archive must include a build instructions file, typically called +`Dockerfile` at the archive's root. The `dockerfile` parameter may be +used to specify a different build instructions file. To do this, its value must be +the path to the alternate build instructions file to use. + +The archive may include any number of other files, +which are accessible in the build context (See the [*ADD build +command*](/reference/builder/#dockerbuilder)). + +The build is canceled if the client drops the connection by quitting +or being killed. + +Query Parameters: + +- **dockerfile** - Path within the build context to the Dockerfile. This is + ignored if `remote` is specified and points to an individual filename. +- **t** – A repository name (and optionally a tag) to apply to + the resulting image in case of success. +- **remote** – A Git repository URI or HTTP/HTTPS URI build source. If the + URI specifies a filename, the file's contents are placed into a file + called `Dockerfile`. +- **q** – Suppress verbose build output. +- **nocache** – Do not use the cache when building the image. +- **pull** - Attempt to pull the image even if an older image exists locally. +- **rm** - Remove intermediate containers after a successful build (default behavior). +- **forcerm** - Always remove intermediate containers (includes `rm`). +- **memory** - Set memory limit for build. +- **memswap** - Total memory (memory + swap), `-1` to disable swap. +- **cpushares** - CPU shares (relative weight). +- **cpusetcpus** - CPUs in which to allow execution (e.g., `0-3`, `0,1`). + + Request Headers: + +- **Content-type** – Set to `"application/tar"`. +- **X-Registry-Config** – base64-encoded ConfigFile object + +Status Codes: + +- **200** – no error +- **500** – server error + +### Create an image + +`POST /images/create` + +Create an image either by pulling it from the registry or by importing it + +**Example request**: + + POST /images/create?fromImage=ubuntu HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + {"status": "Pulling..."} + {"status": "Pulling", "progress": "1 B/ 100 B", "progressDetail": {"current": 1, "total": 100}} + {"error": "Invalid..."} + ... + +When using this endpoint to pull an image from the registry, the +`X-Registry-Auth` header can be used to include +a base64-encoded AuthConfig object. + +Query Parameters: + +- **fromImage** – Name of the image to pull. +- **fromSrc** – Source to import. The value may be a URL from which the image + can be retrieved or `-` to read the image from the request body. +- **repo** – Repository name. +- **tag** – Tag. +- **registry** – The registry to pull from. + + Request Headers: + +- **X-Registry-Auth** – base64-encoded AuthConfig object + +Status Codes: + +- **200** – no error +- **500** – server error + + + +### Inspect an image + +`GET /images/(name)/json` + +Return low-level information on the image `name` + +**Example request**: + + GET /images/ubuntu/json HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "Created": "2013-03-23T22:24:18.818426-07:00", + "Container": "3d67245a8d72ecf13f33dffac9f79dcdf70f75acb84d308770391510e0c23ad0", + "ContainerConfig": + { + "Hostname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": false, + "AttachStderr": false, + "Tty": true, + "OpenStdin": true, + "StdinOnce": false, + "Env": null, + "Cmd": ["/bin/bash"], + "Dns": null, + "Image": "ubuntu", + "Labels": { + "com.example.vendor": "Acme", + "com.example.license": "GPL", + "com.example.version": "1.0" + }, + "Volumes": null, + "VolumesFrom": "", + "WorkingDir": "" + }, + "Id": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc", + "Parent": "27cf784147099545", + "Size": 6824592 + } + +Status Codes: + +- **200** – no error +- **404** – no such image +- **500** – server error + +### Get the history of an image + +`GET /images/(name)/history` + +Return the history of the image `name` + +**Example request**: + + GET /images/ubuntu/history HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "Id": "3db9c44f45209632d6050b35958829c3a2aa256d81b9a7be45b362ff85c54710", + "Created": 1398108230, + "CreatedBy": "/bin/sh -c #(nop) ADD file:eb15dbd63394e063b805a3c32ca7bf0266ef64676d5a6fab4801f2e81e2a5148 in /", + "Tags": [ + "ubuntu:lucid", + "ubuntu:10.04" + ], + "Size": 182964289, + "Comment": "" + }, + { + "Id": "6cfa4d1f33fb861d4d114f43b25abd0ac737509268065cdfd69d544a59c85ab8", + "Created": 1398108222, + "CreatedBy": "/bin/sh -c #(nop) MAINTAINER Tianon Gravi - mkimage-debootstrap.sh -i iproute,iputils-ping,ubuntu-minimal -t lucid.tar.xz lucid http://archive.ubuntu.com/ubuntu/", + "Tags": null, + "Size": 0, + "Comment": "" + }, + { + "Id": "511136ea3c5a64f264b78b5433614aec563103b4d4702f3ba7d4d2698e22c158", + "Created": 1371157430, + "CreatedBy": "", + "Tags": [ + "scratch12:latest", + "scratch:latest" + ], + "Size": 0, + "Comment": "Imported from -" + } + ] + +Status Codes: + +- **200** – no error +- **404** – no such image +- **500** – server error + +### Push an image on the registry + +`POST /images/(name)/push` + +Push the image `name` on the registry + +**Example request**: + + POST /images/test/push HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + {"status": "Pushing..."} + {"status": "Pushing", "progress": "1/? (n/a)", "progressDetail": {"current": 1}}} + {"error": "Invalid..."} + ... + +If you wish to push an image on to a private registry, that image must already have a tag +into a repository which references that registry `hostname` and `port`. This repository name should +then be used in the URL. This duplicates the command line's flow. + +**Example request**: + + POST /images/registry.acme.com:5000/test/push HTTP/1.1 + + +Query Parameters: + +- **tag** – The tag to associate with the image on the registry. This is optional. + +Request Headers: + +- **X-Registry-Auth** – Include a base64-encoded AuthConfig. + object. + +Status Codes: + +- **200** – no error +- **404** – no such image +- **500** – server error + +### Tag an image into a repository + +`POST /images/(name)/tag` + +Tag the image `name` into a repository + +**Example request**: + + POST /images/test/tag?repo=myrepo&force=0&tag=v42 HTTP/1.1 + +**Example response**: + + HTTP/1.1 201 OK + +Query Parameters: + +- **repo** – The repository to tag in +- **force** – 1/True/true or 0/False/false, default false +- **tag** - The new tag name + +Status Codes: + +- **201** – no error +- **400** – bad parameter +- **404** – no such image +- **409** – conflict +- **500** – server error + +### Remove an image + +`DELETE /images/(name)` + +Remove the image `name` from the filesystem + +**Example request**: + + DELETE /images/test HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-type: application/json + + [ + {"Untagged": "3e2f21a89f"}, + {"Deleted": "3e2f21a89f"}, + {"Deleted": "53b4f83ac9"} + ] + +Query Parameters: + +- **force** – 1/True/true or 0/False/false, default false +- **noprune** – 1/True/true or 0/False/false, default false + +Status Codes: + +- **200** – no error +- **404** – no such image +- **409** – conflict +- **500** – server error + +### Search images + +`GET /images/search` + +Search for an image on [Docker Hub](https://hub.docker.com). + +> **Note**: +> The response keys have changed from API v1.6 to reflect the JSON +> sent by the registry server to the docker daemon's request. + +**Example request**: + + GET /images/search?term=sshd HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + [ + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "wma55/u1210sshd", + "star_count": 0 + }, + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "jdswinbank/sshd", + "star_count": 0 + }, + { + "description": "", + "is_official": false, + "is_automated": false, + "name": "vgauthier/sshd", + "star_count": 0 + } + ... + ] + +Query Parameters: + +- **term** – term to search + +Status Codes: + +- **200** – no error +- **500** – server error + +## 2.3 Misc + +### Check auth configuration + +`POST /auth` + +Get the default username and email + +**Example request**: + + POST /auth HTTP/1.1 + Content-Type: application/json + + { + "username":" hannibal", + "password: "xxxx", + "email": "hannibal@a-team.com", + "serveraddress": "https://index.docker.io/v1/" + } + +**Example response**: + + HTTP/1.1 200 OK + +Status Codes: + +- **200** – no error +- **204** – no error +- **500** – server error + +### Display system-wide information + +`GET /info` + +Display system-wide information + +**Example request**: + + GET /info HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "Containers": 11, + "CpuCfsPeriod": true, + "CpuCfsQuota": true, + "Debug": false, + "DockerRootDir": "/var/lib/docker", + "Driver": "btrfs", + "DriverStatus": [[""]], + "ExecutionDriver": "native-0.1", + "ExperimentalBuild": false, + "HttpProxy": "http://test:test@localhost:8080", + "HttpsProxy": "https://test:test@localhost:8080", + "ID": "7TRN:IPZB:QYBB:VPBQ:UMPP:KARE:6ZNR:XE6T:7EWV:PKF4:ZOJD:TPYS", + "IPv4Forwarding": true, + "Images": 16, + "IndexServerAddress": "https://index.docker.io/v1/", + "InitPath": "/usr/bin/docker", + "InitSha1": "", + "KernelVersion": "3.12.0-1-amd64", + "Labels": [ + "storage=ssd" + ], + "MemTotal": 2099236864, + "MemoryLimit": true, + "NCPU": 1, + "NEventsListener": 0, + "NFd": 11, + "NGoroutines": 21, + "Name": "prod-server-42", + "NoProxy": "9.81.1.160", + "OomKillDisable": true, + "OperatingSystem": "Boot2Docker", + "RegistryConfig": { + "IndexConfigs": { + "docker.io": { + "Mirrors": null, + "Name": "docker.io", + "Official": true, + "Secure": true + } + }, + "InsecureRegistryCIDRs": [ + "127.0.0.0/8" + ] + }, + "SwapLimit": false, + "SystemTime": "2015-03-10T11:11:23.730591467-07:00" + } + +Status Codes: + +- **200** – no error +- **500** – server error + +### Show the docker version information + +`GET /version` + +Show the docker version information + +**Example request**: + + GET /version HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + { + "Version": "1.5.0", + "Os": "linux", + "KernelVersion": "3.18.5-tinycore64", + "GoVersion": "go1.4.1", + "GitCommit": "a8a31ef", + "Arch": "amd64", + "ApiVersion": "1.20", + "Experimental": false + } + +Status Codes: + +- **200** – no error +- **500** – server error + +### Ping the docker server + +`GET /_ping` + +Ping the docker server + +**Example request**: + + GET /_ping HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: text/plain + + OK + +Status Codes: + +- **200** - no error +- **500** - server error + +### Create a new image from a container's changes + +`POST /commit` + +Create a new image from a container's changes + +**Example request**: + + POST /commit?container=44c004db4b17&comment=message&repo=myrepo HTTP/1.1 + Content-Type: application/json + + { + "Hostname": "", + "Domainname": "", + "User": "", + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "OpenStdin": false, + "StdinOnce": false, + "Env": null, + "Cmd": [ + "date" + ], + "Mounts": [ + { + "Source": "/data", + "Destination": "/data", + "Mode": "ro,Z", + "RW": false + } + ], + "Labels": { + "key1": "value1", + "key2": "value2" + }, + "WorkingDir": "", + "NetworkDisabled": false, + "ExposedPorts": { + "22/tcp": {} + } + } + +**Example response**: + + HTTP/1.1 201 Created + Content-Type: application/vnd.docker.raw-stream + + {"Id": "596069db4bf5"} + +Json Parameters: + +- **config** - the container's configuration + +Query Parameters: + +- **container** – source container +- **repo** – repository +- **tag** – tag +- **comment** – commit message +- **author** – author (e.g., "John Hannibal Smith + <[hannibal@a-team.com](mailto:hannibal%40a-team.com)>") + +Status Codes: + +- **201** – no error +- **404** – no such container +- **500** – server error + +### Monitor Docker's events + +`GET /events` + +Get container events from docker, either in real time via streaming, or via +polling (using since). + +Docker containers report the following events: + + attach, commit, copy, create, destroy, die, exec_create, exec_start, export, kill, oom, pause, rename, resize, restart, start, stop, top, unpause + +and Docker images report: + + delete, import, pull, push, tag, untag + +**Example request**: + + GET /events?since=1374067924 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/json + + {"status": "create", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924} + {"status": "start", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067924} + {"status": "stop", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067966} + {"status": "destroy", "id": "dfdf82bd3881","from": "ubuntu:latest", "time":1374067970} + +Query Parameters: + +- **since** – Timestamp used for polling +- **until** – Timestamp used for polling +- **filters** – A json encoded value of the filters (a map[string][]string) to process on the event list. Available filters: + - `event=`; -- event to filter + - `image=`; -- image to filter + - `container=`; -- container to filter + +Status Codes: + +- **200** – no error +- **500** – server error + +### Get a tarball containing all images in a repository + +`GET /images/(name)/get` + +Get a tarball containing all images and metadata for the repository specified +by `name`. + +If `name` is a specific name and tag (e.g. ubuntu:latest), then only that image +(and its parents) are returned. If `name` is an image ID, similarly only that +image (and its parents) are returned, but with the exclusion of the +'repositories' file in the tarball, as there were no image names referenced. + +See the [image tarball format](#image-tarball-format) for more details. + +**Example request** + + GET /images/ubuntu/get + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/x-tar + + Binary data stream + +Status Codes: + +- **200** – no error +- **500** – server error + +### Get a tarball containing all images. + +`GET /images/get` + +Get a tarball containing all images and metadata for one or more repositories. + +For each value of the `names` parameter: if it is a specific name and tag (e.g. +`ubuntu:latest`), then only that image (and its parents) are returned; if it is +an image ID, similarly only that image (and its parents) are returned and there +would be no names referenced in the 'repositories' file for this image ID. + +See the [image tarball format](#image-tarball-format) for more details. + +**Example request** + + GET /images/get?names=myname%2Fmyapp%3Alatest&names=busybox + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: application/x-tar + + Binary data stream + +Status Codes: + +- **200** – no error +- **500** – server error + +### Load a tarball with a set of images and tags into docker + +`POST /images/load` + +Load a set of images and tags into a Docker repository. +See the [image tarball format](#image-tarball-format) for more details. + +**Example request** + + POST /images/load + + Tarball in body + +**Example response**: + + HTTP/1.1 200 OK + +Status Codes: + +- **200** – no error +- **500** – server error + +### Image tarball format + +An image tarball contains one directory per image layer (named using its long ID), +each containing these files: + +- `VERSION`: currently `1.0` - the file format version +- `json`: detailed layer information, similar to `docker inspect layer_id` +- `layer.tar`: A tarfile containing the filesystem changes in this layer + +The `layer.tar` file contains `aufs` style `.wh..wh.aufs` files and directories +for storing attribute changes and deletions. + +If the tarball defines a repository, the tarball should also include a `repositories` file at +the root that contains a list of repository and tag names mapped to layer IDs. + +``` +{"hello-world": + {"latest": "565a9d68a73f6706862bfe8409a7f659776d4d60a8d096eb4a3cbce6999cc2a1"} +} +``` + +### Exec Create + +`POST /containers/(id)/exec` + +Sets up an exec instance in a running container `id` + +**Example request**: + + POST /containers/e90e34656806/exec HTTP/1.1 + Content-Type: application/json + + { + "AttachStdin": false, + "AttachStdout": true, + "AttachStderr": true, + "Tty": false, + "Cmd": [ + "date" + ] + } + +**Example response**: + + HTTP/1.1 201 OK + Content-Type: application/json + + { + "Id": "f90e34656806" + "Warnings":[] + } + +Json Parameters: + +- **AttachStdin** - Boolean value, attaches to `stdin` of the `exec` command. +- **AttachStdout** - Boolean value, attaches to `stdout` of the `exec` command. +- **AttachStderr** - Boolean value, attaches to `stderr` of the `exec` command. +- **Tty** - Boolean value to allocate a pseudo-TTY. +- **Cmd** - Command to run specified as a string or an array of strings. + + +Status Codes: + +- **201** – no error +- **404** – no such container + +### Exec Start + +`POST /exec/(id)/start` + +Starts a previously set up `exec` instance `id`. If `detach` is true, this API +returns after starting the `exec` command. Otherwise, this API sets up an +interactive session with the `exec` command. + +**Example request**: + + POST /exec/e90e34656806/start HTTP/1.1 + Content-Type: application/json + + { + "Detach": false, + "Tty": false + } + +**Example response**: + + HTTP/1.1 201 OK + Content-Type: application/json + + {{ STREAM }} + +Json Parameters: + +- **Detach** - Detach from the `exec` command. +- **Tty** - Boolean value to allocate a pseudo-TTY. + +Status Codes: + +- **201** – no error +- **404** – no such exec instance + + **Stream details**: + Similar to the stream behavior of `POST /container/(id)/attach` API + +### Exec Resize + +`POST /exec/(id)/resize` + +Resizes the `tty` session used by the `exec` command `id`. The unit is number of characters. +This API is valid only if `tty` was specified as part of creating and starting the `exec` command. + +**Example request**: + + POST /exec/e90e34656806/resize?h=40&w=80 HTTP/1.1 + Content-Type: text/plain + +**Example response**: + + HTTP/1.1 201 OK + Content-Type: text/plain + +Query Parameters: + +- **h** – height of `tty` session +- **w** – width + +Status Codes: + +- **201** – no error +- **404** – no such exec instance + +### Exec Inspect + +`GET /exec/(id)/json` + +Return low-level information about the `exec` command `id`. + +**Example request**: + + GET /exec/11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39/json HTTP/1.1 + +**Example response**: + + HTTP/1.1 200 OK + Content-Type: plain/text + + { + "ID" : "11fb006128e8ceb3942e7c58d77750f24210e35f879dd204ac975c184b820b39", + "Running" : false, + "ExitCode" : 2, + "ProcessConfig" : { + "privileged" : false, + "user" : "", + "tty" : false, + "entrypoint" : "sh", + "arguments" : [ + "-c", + "exit 2" + ] + }, + "OpenStdin" : false, + "OpenStderr" : false, + "OpenStdout" : false, + "Container" : { + "State" : { + "Running" : true, + "Paused" : false, + "Restarting" : false, + "OOMKilled" : false, + "Pid" : 3650, + "ExitCode" : 0, + "Error" : "", + "StartedAt" : "2014-11-17T22:26:03.717657531Z", + "FinishedAt" : "0001-01-01T00:00:00Z" + }, + "ID" : "8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c", + "Created" : "2014-11-17T22:26:03.626304998Z", + "Path" : "date", + "Args" : [], + "Config" : { + "Hostname" : "8f177a186b97", + "Domainname" : "", + "User" : "", + "AttachStdin" : false, + "AttachStdout" : false, + "AttachStderr" : false, + "ExposedPorts" : null, + "Tty" : false, + "OpenStdin" : false, + "StdinOnce" : false, + "Env" : [ "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" ], + "Cmd" : [ + "date" + ], + "Image" : "ubuntu", + "Volumes" : null, + "WorkingDir" : "", + "Entrypoint" : null, + "NetworkDisabled" : false, + "MacAddress" : "", + "OnBuild" : null, + "SecurityOpt" : null + }, + "Image" : "5506de2b643be1e6febbf3b8a240760c6843244c41e12aa2f60ccbb7153d17f5", + "NetworkSettings" : { + "IPAddress" : "172.17.0.2", + "IPPrefixLen" : 16, + "MacAddress" : "02:42:ac:11:00:02", + "Gateway" : "172.17.42.1", + "Bridge" : "docker0", + "PortMapping" : null, + "Ports" : {} + }, + "ResolvConfPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/resolv.conf", + "HostnamePath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hostname", + "HostsPath" : "/var/lib/docker/containers/8f177a186b977fb451136e0fdf182abff5599a08b3c7f6ef0d36a55aaf89634c/hosts", + "LogPath": "/var/lib/docker/containers/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b/1eb5fabf5a03807136561b3c00adcd2992b535d624d5e18b6cdc6a6844d9767b-json.log", + "Name" : "/test", + "Driver" : "aufs", + "ExecDriver" : "native-0.2", + "MountLabel" : "", + "ProcessLabel" : "", + "AppArmorProfile" : "", + "RestartCount" : 0, + "Mounts" : [], + } + } + +Status Codes: + +- **200** – no error +- **404** – no such exec instance +- **500** - server error + +# 3. Going further + +## 3.1 Inside `docker run` + +As an example, the `docker run` command line makes the following API calls: + +- Create the container + +- If the status code is 404, it means the image doesn't exist: + - Try to pull it. + - Then, retry to create the container. + +- Start the container. + +- If you are not in detached mode: +- Attach to the container, using `logs=1` (to have `stdout` and + `stderr` from the container's start) and `stream=1` + +- If in detached mode or only `stdin` is attached, display the container's id. + +## 3.2 Hijacking + +In this version of the API, `/attach`, uses hijacking to transport `stdin`, +`stdout`, and `stderr` on the same socket. + +To hint potential proxies about connection hijacking, Docker client sends +connection upgrade headers similarly to websocket. + + Upgrade: tcp + Connection: Upgrade + +When Docker daemon detects the `Upgrade` header, it switches its status code +from **200 OK** to **101 UPGRADED** and resends the same headers. + + +## 3.3 CORS Requests + +To set cross origin requests to the remote api please give values to +`--api-cors-header` when running Docker in daemon mode. Set * (asterisk) allows all, +default or blank means CORS disabled + + $ docker daemon -H="192.168.1.9:2375" --api-cors-header="http://foo.bar" From 745722293db70aa9d33325fc0866495e27a8f41c Mon Sep 17 00:00:00 2001 From: Charles Chan Date: Sat, 8 Aug 2015 16:48:46 -0700 Subject: [PATCH 09/22] Cleanup "Working with containers" page. * Cleanup introduction * Update output of `docker version` * Cleanup explaination of `docker inspect` * Change 'deleting' to 'removing' for consistency Signed-off-by: Charles Chan (cherry picked from commit 2fcae333e840ee513702cebed0b6a41e8915263c) --- docs/userguide/usingdocker.md | 39 ++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/docs/userguide/usingdocker.md b/docs/userguide/usingdocker.md index cdf5f2543..491566fac 100644 --- a/docs/userguide/usingdocker.md +++ b/docs/userguide/usingdocker.md @@ -11,11 +11,11 @@ parent="smn_containers" # Working with containers In the [last section of the Docker User Guide](/userguide/dockerizing) -we launched our first containers. We launched two containers using the -`docker run` command. +we launched our first containers. We launched containers using the +`docker run` command: -* Containers we ran interactively in the foreground. -* One container we ran daemonized in the background. +* Interactive container runs in the foreground. +* Daemonized container runs in the background. In the process we learned about several Docker commands: @@ -43,17 +43,22 @@ version information on the currently installed Docker client and daemon. This command will not only provide you the version of Docker client and daemon you are using, but also the version of Go (the programming language powering Docker). + + Client: + Version: 1.8.1 + API version: 1.20 + Go version: go1.4.2 + Git commit: d12ea79 + Built: Thu Aug 13 02:35:49 UTC 2015 + OS/Arch: linux/amd64 - Client version: 0.8.0 - Go version (client): go1.2 - - Git commit (client): cc3a8c8 - Server version: 0.8.0 - - Git commit (server): cc3a8c8 - Go version (server): go1.2 - - Last stable version: 0.8.0 + Server: + Version: 1.8.1 + API version: 1.20 + Go version: go1.4.2 + Git commit: d12ea79 + Built: Thu Aug 13 02:35:49 UTC 2015 + OS/Arch: linux/amd64 ## Get Docker command help @@ -219,8 +224,8 @@ the container. ## Inspecting our web application container Lastly, we can take a low-level dive into our Docker container using the -`docker inspect` command. It returns a JSON hash of useful configuration -and status information about Docker containers. +`docker inspect` command. It returns a JSON document containing useful +configuration and status information for the specified container. $ docker inspect nostalgic_morse @@ -297,7 +302,7 @@ this again by stopping the container first. And now our container is stopped and deleted. > **Note:** -> Always remember that deleting a container is final! +> Always remember that removing a container is final! # Next steps From 512f486e0c99ded3b6e883121742022d98b989d7 Mon Sep 17 00:00:00 2001 From: Michael Grauer Date: Sat, 15 Aug 2015 15:56:41 -0400 Subject: [PATCH 10/22] Update dev machine name to default in mac installation docs Signed-off-by: Michael Grauer (cherry picked from commit f26045a53457fd99b0d5f20817f8b7b25db8b6d0) --- docs/installation/mac.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/installation/mac.md b/docs/installation/mac.md index eb364c09e..df6eac0c5 100644 --- a/docs/installation/mac.md +++ b/docs/installation/mac.md @@ -280,9 +280,9 @@ To verify this, run the following commands: $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM - dev * virtualbox Running tcp://192.168.99.100:2376 + default * virtualbox Running tcp://192.168.99.100:2376 -The `ACTIVE` machine, in this case `dev`, is the one your environment is pointing to. +The `ACTIVE` machine, in this case `default`, is the one your environment is pointing to. ### Access container ports @@ -319,9 +319,9 @@ The `ACTIVE` machine, in this case `dev`, is the one your environment is pointin not the localhost address (0.0.0.0) but is instead the address of the your Docker VM. -5. Get the address of the `dev` VM. +5. Get the address of the `default` VM. - $ docker-machine ip dev + $ docker-machine ip default 192.168.59.103 6. Enter the `http://192.168.59.103:49157` address in your browser: From 3e2e0397f390827b59a5d2f96eb8d563e4fc7139 Mon Sep 17 00:00:00 2001 From: Dharmit Shah Date: Sat, 15 Aug 2015 12:00:21 +0530 Subject: [PATCH 11/22] Fixing docs to remove references to links under terms/ Removed terms/ directory Signed-off-by: Dharmit Shah (cherry picked from commit 0a925d07a8f87a8333ded429da656a711fd06214) --- docs/articles/baseimages.md | 2 +- docs/reference/builder.md | 4 +- docs/reference/glossary.md | 4 + docs/reference/run.md | 2 +- docs/terms/container.md | 51 - docs/terms/filesystem.md | 42 - docs/terms/image.md | 47 - .../images/docker-filesystems-busyboxrw.png | Bin 31855 -> 0 bytes .../images/docker-filesystems-debian.png | Bin 16903 -> 0 bytes .../images/docker-filesystems-debianrw.png | Bin 19241 -> 0 bytes .../images/docker-filesystems-generic.png | Bin 18741 -> 0 bytes .../images/docker-filesystems-multilayer.png | Bin 32189 -> 0 bytes .../images/docker-filesystems-multiroot.png | Bin 17275 -> 0 bytes docs/terms/images/docker-filesystems.svg | 1536 ----------------- docs/terms/layer.md | 42 - docs/terms/registry.md | 27 - docs/terms/repository.md | 42 - 17 files changed, 8 insertions(+), 1791 deletions(-) delete mode 100644 docs/terms/container.md delete mode 100644 docs/terms/filesystem.md delete mode 100644 docs/terms/image.md delete mode 100644 docs/terms/images/docker-filesystems-busyboxrw.png delete mode 100644 docs/terms/images/docker-filesystems-debian.png delete mode 100644 docs/terms/images/docker-filesystems-debianrw.png delete mode 100644 docs/terms/images/docker-filesystems-generic.png delete mode 100644 docs/terms/images/docker-filesystems-multilayer.png delete mode 100644 docs/terms/images/docker-filesystems-multiroot.png delete mode 100644 docs/terms/images/docker-filesystems.svg delete mode 100644 docs/terms/layer.md delete mode 100644 docs/terms/registry.md delete mode 100644 docs/terms/repository.md diff --git a/docs/articles/baseimages.md b/docs/articles/baseimages.md index b3875aa55..8777b9c20 100644 --- a/docs/articles/baseimages.md +++ b/docs/articles/baseimages.md @@ -11,7 +11,7 @@ parent = "smn_images" # Create a base image So you want to create your own [*Base Image*]( -/terms/image/#base-image)? Great! +/reference/glossary/#base-image)? Great! The specific process will depend heavily on the Linux distribution you want to package. We have some examples below, and you are encouraged to diff --git a/docs/reference/builder.md b/docs/reference/builder.md index 073fc6d5e..2d70b3da9 100644 --- a/docs/reference/builder.md +++ b/docs/reference/builder.md @@ -100,7 +100,7 @@ be UPPERCASE in order to distinguish them from arguments more easily. Docker runs the instructions in a `Dockerfile` in order. **The first instruction must be \`FROM\`** in order to specify the [*Base -Image*](/terms/image/#base-image) from which you are building. +Image*](/reference/glossary/#base-image) from which you are building. Docker will treat lines that *begin* with `#` as a comment. A `#` marker anywhere else in the line will @@ -245,7 +245,7 @@ Or FROM @ -The `FROM` instruction sets the [*Base Image*](/terms/image/#base-image) +The `FROM` instruction sets the [*Base Image*](/reference/glossary/#base-image) for subsequent instructions. As such, a valid `Dockerfile` must have `FROM` as its first instruction. The image can be any valid image – it is especially easy to start by **pulling an image** from the [*Public Repositories*]( diff --git a/docs/reference/glossary.md b/docs/reference/glossary.md index 1e2f2884b..7da13a20b 100644 --- a/docs/reference/glossary.md +++ b/docs/reference/glossary.md @@ -19,6 +19,10 @@ aufs (advanced multi layered unification filesystem) is a Linux [filesystem](#fi Docker supports as a storage backend. It implements the [union mount](http://en.wikipedia.org/wiki/Union_mount) for Linux file systems. +## Base image + +An image that has no parent is a **base image**. + ## boot2docker [boot2docker](http://boot2docker.io/) is a lightweight Linux distribution made diff --git a/docs/reference/run.md b/docs/reference/run.md index a7c6d97ba..51e27e5e6 100644 --- a/docs/reference/run.md +++ b/docs/reference/run.md @@ -19,7 +19,7 @@ parent = "mn_reference" **Docker runs processes in isolated containers**. When an operator executes `docker run`, she starts a process with its own file system, its own networking, and its own isolated process tree. The -[*Image*](/terms/image/#image) which starts the process may define +[*Image*](/reference/glossary/#image) which starts the process may define defaults related to the binary to run, the networking to expose, and more, but `docker run` gives final control to the operator who starts the container from the image. That's the main reason diff --git a/docs/terms/container.md b/docs/terms/container.md deleted file mode 100644 index f52f728dd..000000000 --- a/docs/terms/container.md +++ /dev/null @@ -1,51 +0,0 @@ - - -# Container - -## Introduction - -![](/terms/images/docker-filesystems-busyboxrw.png) - -Once you start a process in Docker from an [*Image*](/terms/image), Docker -fetches the image and its [*Parent Image*](/terms/image), and repeats the -process until it reaches the [*Base Image*](/terms/image/#base-image-def). Then -the [*Union File System*](/terms/layer) adds a read-write layer on top. That -read-write layer, plus the information about its [*Parent -Image*](/terms/image) -and some additional information like its unique id, networking -configuration, and resource limits is called a **container**. - -## Container state - -Containers can change, and so they have state. A container may be -**running** or **exited**. - -When a container is running, the idea of a "container" also includes a -tree of processes running on the CPU, isolated from the other processes -running on the host. - -When the container is exited, the state of the file system and its exit -value is preserved. You can start, stop, and restart a container. The -processes restart from scratch (their memory state is **not** preserved -in a container), but the file system is just as it was when the -container was stopped. - -You can promote a container to an [*Image*](/terms/image) with `docker commit`. -Once a container is an image, you can use it as a parent for new containers. - -## Container IDs - -All containers are identified by a 64 hexadecimal digit string -(internally a 256bit value). To simplify their use, a short ID of the -first 12 characters can be used on the command line. There is a small -possibility of short id collisions, so the docker server will always -return the long ID. diff --git a/docs/terms/filesystem.md b/docs/terms/filesystem.md deleted file mode 100644 index d0e0e36f0..000000000 --- a/docs/terms/filesystem.md +++ /dev/null @@ -1,42 +0,0 @@ - - -# File system - -## Introduction - -![](/terms/images/docker-filesystems-generic.png) - -In order for a Linux system to run, it typically needs two [file -systems](http://en.wikipedia.org/wiki/Filesystem): - -1. boot file system (bootfs) -2. root file system (rootfs) - -The **boot file system** contains the bootloader and the kernel. The -user never makes any changes to the boot file system. In fact, soon -after the boot process is complete, the entire kernel is in memory, and -the boot file system is unmounted to free up the RAM associated with the -initrd disk image. - -The **root file system** includes the typical directory structure we -associate with Unix-like operating systems: -`/dev, /proc, /bin, /etc, /lib, /usr,` and `/tmp` plus all the configuration -files, binaries and libraries required to run user applications (like bash, -ls, and so forth). - -While there can be important kernel differences between different Linux -distributions, the contents and organization of the root file system are -usually what make your software packages dependent on one distribution -versus another. Docker can help solve this problem by running multiple -distributions at the same time. - -![](/terms/images/docker-filesystems-multiroot.png) diff --git a/docs/terms/image.md b/docs/terms/image.md deleted file mode 100644 index a902882b4..000000000 --- a/docs/terms/image.md +++ /dev/null @@ -1,47 +0,0 @@ - - -# Image - -## Introduction - -![](/terms/images/docker-filesystems-debian.png) - -In Docker terminology, a read-only [*Layer*](/terms/layer/#layer) is -called an **image**. An image never changes. - -Since Docker uses a [*Union File System*](/terms/layer/#union-file-system), the -processes think the whole file system is mounted read-write. But all the -changes go to the top-most writeable layer, and underneath, the original -file in the read-only image is unchanged. Since images don't change, -images do not have state. - -![](/terms/images/docker-filesystems-debianrw.png) - -## Parent image - -![](/terms/images/docker-filesystems-multilayer.png) - -Each image may depend on one more image which forms the layer beneath -it. We sometimes say that the lower image is the **parent** of the upper -image. - -## Base image - -An image that has no parent is a **base image**. - -## Image IDs - -All images are identified by a 64 hexadecimal digit string (internally a -256bit value). To simplify their use, a short ID of the first 12 -characters can be used on the command line. There is a small possibility -of short id collisions, so the docker server will always return the long -ID. diff --git a/docs/terms/images/docker-filesystems-busyboxrw.png b/docs/terms/images/docker-filesystems-busyboxrw.png deleted file mode 100644 index 5f046cbc0a914058826dd56327e36f1939abbdab..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31855 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 z 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 T*^iIA{##u|N4ZML7We-Ee2jo& diff --git a/docs/terms/images/docker-filesystems-debian.png b/docs/terms/images/docker-filesystems-debian.png deleted file mode 100644 index 3502b3846092bb4268622a72bf247ee653d086bf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16903 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 diff --git a/docs/terms/images/docker-filesystems-debianrw.png b/docs/terms/images/docker-filesystems-debianrw.png deleted file mode 100644 index 387c9eb7631502ef39526f8c62ba982783832288..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19241 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 Q+>>5*!+5wpbPoRQZ_DSRbN~PV diff --git a/docs/terms/images/docker-filesystems-generic.png b/docs/terms/images/docker-filesystems-generic.png deleted file mode 100644 index e24dce635bede72a1f9496c3e63ca9672be79db6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 18741 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 diff --git a/docs/terms/images/docker-filesystems-multiroot.png b/docs/terms/images/docker-filesystems-multiroot.png deleted file mode 100644 index f9bcc38ff93709684ac0510028f2b08a6e3ea680..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17275 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 D%BP^Z diff --git a/docs/terms/images/docker-filesystems.svg b/docs/terms/images/docker-filesystems.svg deleted file mode 100644 index 054402db4..000000000 --- a/docs/terms/images/docker-filesystems.svg +++ /dev/null @@ -1,1536 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - referencesparentimage - - - - diff --git a/docs/terms/layer.md b/docs/terms/layer.md deleted file mode 100644 index 1b0ebad57..000000000 --- a/docs/terms/layer.md +++ /dev/null @@ -1,42 +0,0 @@ - - -# Layers - -## Introduction - -In a traditional Linux boot, the kernel first mounts the root [*File -System*](/terms/filesystem) as read-only, checks its -integrity, and then switches the whole rootfs volume to read-write mode. - -## Layer - -When Docker mounts the rootfs, it starts read-only, as in a traditional -Linux boot, but then, instead of changing the file system to read-write -mode, it takes advantage of a [union -mount](http://en.wikipedia.org/wiki/Union_mount) to add a read-write -file system *over* the read-only file system. In fact there may be -multiple read-only file systems stacked on top of each other. We think -of each one of these file systems as a **layer**. - -![](/terms/images/docker-filesystems-multilayer.png) - -At first, the top read-write layer has nothing in it, but any time a -process creates a file, this happens in the top layer. And if something -needs to update an existing file in a lower layer, then the file gets -copied to the upper layer and changes go into the copy. The version of -the file on the lower layer cannot be seen by the applications anymore, -but it is there, unchanged. - -## Union File System - -We call the union of the read-write layer and all the read-only layers a -**union file system**. diff --git a/docs/terms/registry.md b/docs/terms/registry.md deleted file mode 100644 index d1b268aa1..000000000 --- a/docs/terms/registry.md +++ /dev/null @@ -1,27 +0,0 @@ - - -# Registry - -## Introduction - -A Registry is a hosted service containing -[*repositories*](/terms/repository/#repository-def) of -[*images*](/terms/image/#image-def) which responds to the Registry API. - -The default registry can be accessed using a browser at -[Docker Hub](https://hub.docker.com) or using the -`docker search` command. - -## Further reading - -For more information see [*Working with -Repositories*](/userguide/dockerrepos/#working-with-the-repository) diff --git a/docs/terms/repository.md b/docs/terms/repository.md deleted file mode 100644 index 5bf429cd1..000000000 --- a/docs/terms/repository.md +++ /dev/null @@ -1,42 +0,0 @@ - - -# Repository - -## Introduction - -A repository is a set of images either on your local Docker server, or -shared, by pushing it to a [*Registry*](/terms/registry/#registry-def) -server. - -Images can be associated with a repository (or multiple) by giving them -an image name using one of three different commands: - -1. At build time (e.g., `docker build -t IMAGENAME`), -2. When committing a container (e.g., - `docker commit CONTAINERID IMAGENAME`) or -3. When tagging an image id with an image name (e.g., - `docker tag IMAGEID IMAGENAME`). - -A Fully Qualified Image Name (FQIN) can be made up of 3 parts: - -`[registry_hostname[:port]/][user_name/](repository_name:version_tag)` - -`username` and `registry_hostname` default to an empty string. When -`registry_hostname` is an empty string, then `docker push` will push to -`index.docker.io:80`. - -If you create a new repository which you want to share, you will need to -set at least the `user_name`, as the `default` blank `user_name` prefix is -reserved for [Official Repositories](/docker-hub/official_repos). - -For more information see [*Working with -Repositories*](/userguide/dockerrepos/#working-with-the-repository) From 385676735bd12cc926e346c7fe13707d65e21147 Mon Sep 17 00:00:00 2001 From: Patrick Hemmer Date: Wed, 5 Aug 2015 12:30:36 -0400 Subject: [PATCH 12/22] add documentation clarifying behavior of VOLUME instruction Signed-off-by: Patrick Hemmer (cherry picked from commit 08a867b82ffcfcb0995311b7128e75120815c122) --- docs/reference/builder.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/docs/reference/builder.md b/docs/reference/builder.md index 2d70b3da9..ddaa253cd 100644 --- a/docs/reference/builder.md +++ b/docs/reference/builder.md @@ -900,6 +900,10 @@ This Dockerfile results in an image that causes `docker run`, to create a new mount point at `/myvol` and copy the `greeting` file into the newly created volume. +> **Note**: +> If any build steps change the data within the volume after it has been +> declared, those changes will be discarded. + > **Note**: > The list is parsed as a JSON array, which means that > you must use double-quotes (") around words not single-quotes ('). From a3ae93dc2efa2520940c1e8a1771b6e157bfc219 Mon Sep 17 00:00:00 2001 From: Kai Blin Date: Tue, 18 Aug 2015 08:56:56 +0200 Subject: [PATCH 13/22] reference/run: Some editorial changes Based on the suggestions from @moxiegirl, some changes to make the wording more clear. Signed-off-by: Kai Blin (cherry picked from commit ba29d31c9cb205863d8d63542ef969e7c6fafcfe) Conflicts: docs/reference/run.md --- docs/reference/run.md | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/docs/reference/run.md b/docs/reference/run.md index 51e27e5e6..2cfb88b1e 100644 --- a/docs/reference/run.md +++ b/docs/reference/run.md @@ -1142,14 +1142,17 @@ volume mounted on the host). ### USER -The default user within a container is `root` (id = 0), but if the -developer created additional users, those are accessible too. The -developer can set a default user to run the first process with the -Dockerfile `USER` instruction, but the operator can override it: +`root` (id = 0) is the default user within a container. The image developer can +create additional users. Those users are accessible by name. When passing a numeric +ID, the user does not have to exist in the container. + +The developer can set a default user to run the first process with the +Dockerfile `USER` instruction. When starting a container, the operator can override +the `USER` instruction by passing the `-u` option. -u="": Username or UID -> **Note:** if you pass numeric uid, it must be in range 0-2147483647. +> **Note:** if you pass a numeric uid, it must be in the range of 0-2147483647. ### WORKDIR From 7324d8dd8c7c69347068ebcfa1746bd4b84f2b39 Mon Sep 17 00:00:00 2001 From: Kai Blin Date: Thu, 13 Aug 2015 06:35:48 +0200 Subject: [PATCH 14/22] reference/run: Add some articles Signed-off-by: Kai Blin (cherry picked from commit 8a61e2b151c9b8ed985c9d508fb4f31c84c155f7) Conflicts: docs/reference/run.md --- docs/reference/run.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/reference/run.md b/docs/reference/run.md index 2cfb88b1e..18fbc87d9 100644 --- a/docs/reference/run.md +++ b/docs/reference/run.md @@ -1152,7 +1152,7 @@ the `USER` instruction by passing the `-u` option. -u="": Username or UID -> **Note:** if you pass a numeric uid, it must be in the range of 0-2147483647. +> **Note:** if you pass a numeric uid, it must be in the range 0-2147483647. ### WORKDIR From 3d18cd851bf4c0628f1092bc8951e5a9b0dd3233 Mon Sep 17 00:00:00 2001 From: Kai Blin Date: Thu, 13 Aug 2015 06:34:57 +0200 Subject: [PATCH 15/22] reference/run: Add a paragraph break Signed-off-by: Kai Blin (cherry picked from commit 4d89910820e4c0fb62e1e496e5df837b77514f27) Conflicts: docs/reference/run.md --- docs/reference/run.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/reference/run.md b/docs/reference/run.md index 18fbc87d9..91262aa5e 100644 --- a/docs/reference/run.md +++ b/docs/reference/run.md @@ -1142,6 +1142,7 @@ volume mounted on the host). ### USER +<<<<<<< HEAD `root` (id = 0) is the default user within a container. The image developer can create additional users. Those users are accessible by name. When passing a numeric ID, the user does not have to exist in the container. @@ -1149,6 +1150,14 @@ ID, the user does not have to exist in the container. The developer can set a default user to run the first process with the Dockerfile `USER` instruction. When starting a container, the operator can override the `USER` instruction by passing the `-u` option. +======= +The default user within a container is `root` (id = 0), but if the developer +created additional users, those are accessible by name. When passing a numeric +ID, the user doesn't have to exist in the container. + +The developer can set a default user to run the first process with the +Dockerfile `USER` instruction, but the operator can override it: +>>>>>>> 4d89910... reference/run: Add a paragraph break -u="": Username or UID From f9f2dbcb151d09ebb8de8b0ee9ccdb20a892c51c Mon Sep 17 00:00:00 2001 From: Kai Blin Date: Wed, 12 Aug 2015 06:34:37 +0200 Subject: [PATCH 16/22] reference/run: Clarify the use of numeric UIDs it is possible to pass an UID that has not been created inside the container, clarify this in the docs. This should fix issue #14795 Signed-off-by: Kai Blin (cherry picked from commit a7cfb098d48b9b9ce19bc57fd2c219981b24b75b) Conflicts: docs/reference/run.md --- docs/reference/run.md | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/docs/reference/run.md b/docs/reference/run.md index 91262aa5e..2cfb88b1e 100644 --- a/docs/reference/run.md +++ b/docs/reference/run.md @@ -1142,7 +1142,6 @@ volume mounted on the host). ### USER -<<<<<<< HEAD `root` (id = 0) is the default user within a container. The image developer can create additional users. Those users are accessible by name. When passing a numeric ID, the user does not have to exist in the container. @@ -1150,18 +1149,10 @@ ID, the user does not have to exist in the container. The developer can set a default user to run the first process with the Dockerfile `USER` instruction. When starting a container, the operator can override the `USER` instruction by passing the `-u` option. -======= -The default user within a container is `root` (id = 0), but if the developer -created additional users, those are accessible by name. When passing a numeric -ID, the user doesn't have to exist in the container. - -The developer can set a default user to run the first process with the -Dockerfile `USER` instruction, but the operator can override it: ->>>>>>> 4d89910... reference/run: Add a paragraph break -u="": Username or UID -> **Note:** if you pass a numeric uid, it must be in the range 0-2147483647. +> **Note:** if you pass a numeric uid, it must be in the range of 0-2147483647. ### WORKDIR From 72b8e7e3ac8788ad774465b9893801fafb87fda0 Mon Sep 17 00:00:00 2001 From: Mary Anthony Date: Tue, 18 Aug 2015 12:25:59 -0700 Subject: [PATCH 17/22] Updating hashcode links to commands Signed-off-by: Mary Anthony (cherry picked from commit 85c2c771884aaa73b65753bdbdf31d596cd90111) --- docs/articles/configuring.md | 6 +++--- docs/reference/builder.md | 4 ++-- docs/reference/run.md | 12 ++++++------ docs/userguide/usingdocker.md | 2 +- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/articles/configuring.md b/docs/articles/configuring.md index d7ae834d0..b7bb07fb7 100644 --- a/docs/articles/configuring.md +++ b/docs/articles/configuring.md @@ -57,7 +57,7 @@ These options : - Set `tls` to true with the server certificate and key specified using `--tlscert` and `--tlskey` respectively - Listen for connections on `tcp://192.168.59.3:2376` -The command line reference has the [complete list of daemon flags](/reference/commandline/cli/#daemon) +The command line reference has the [complete list of daemon flags](/reference/commandline/daemon) with explanations. ## Ubuntu @@ -114,7 +114,7 @@ These options : - Set `tls` to true with the server certificate and key specified using `--tlscert` and `--tlskey` respectively - Listen for connections on `tcp://192.168.59.3:2376` -The command line reference has the [complete list of daemon flags](/reference/commandline/cli/#daemon) +The command line reference has the [complete list of daemon flags](/reference/commandline/daemon) with explanations. @@ -207,7 +207,7 @@ These options : - Set `tls` to true with the server certificate and key specified using `--tlscert` and `--tlskey` respectively - Listen for connections on `tcp://192.168.59.3:2376` -The command line reference has the [complete list of daemon flags](/reference/commandline/cli/#daemon) +The command line reference has the [complete list of daemon flags](/reference/commandline/daemon) with explanations. 5. Save and close the file. diff --git a/docs/reference/builder.md b/docs/reference/builder.md index ddaa253cd..179d7c5cb 100644 --- a/docs/reference/builder.md +++ b/docs/reference/builder.md @@ -25,7 +25,7 @@ Dockerfile knowledge with the [Dockerfile tutorial](/userguide/level1). ## Usage -To [*build*](/reference/commandline/cli/#build) an image from a source repository, +To [*build*](/reference/commandline/build) an image from a source repository, create a description file called `Dockerfile` at the root of your repository. This file will describe the steps to assemble the image. @@ -884,7 +884,7 @@ containers. The value can be a JSON array, `VOLUME ["/var/log/"]`, or a plain string with multiple arguments, such as `VOLUME /var/log` or `VOLUME /var/log /var/db`. For more information/examples and mounting instructions via the Docker client, refer to -[*Share Directories via Volumes*](/userguide/dockervolumes/#volume) +[*Share Directories via Volumes*](/userguide/dockervolumes/#mount-a-host-directory-as-a-data-volume) documentation. The `docker run` command initializes the newly created volume with any data diff --git a/docs/reference/run.md b/docs/reference/run.md index 2cfb88b1e..c1f560c6a 100644 --- a/docs/reference/run.md +++ b/docs/reference/run.md @@ -23,7 +23,7 @@ its own networking, and its own isolated process tree. The defaults related to the binary to run, the networking to expose, and more, but `docker run` gives final control to the operator who starts the container from the image. That's the main reason -[*run*](/reference/commandline/cli/#run) has more options than any +[*run*](/reference/commandline/run) has more options than any other `docker` command. ## General form @@ -87,7 +87,7 @@ In detached mode (`-d=true` or just `-d`), all I/O should be done through network connections or shared volumes because the container is no longer listening to the command line where you executed `docker run`. You can reattach to a detached container with `docker` -[*attach*](/reference/commandline/cli/#attach). If you choose to run a +[*attach*](/reference/commandline/attach). If you choose to run a container in the detached mode, then you cannot use the `--rm` option. ### Foreground @@ -360,8 +360,8 @@ Using the `--restart` flag on Docker run you can specify a restart policy for how a container should or should not be restarted on exit. When a restart policy is active on a container, it will be shown as either `Up` -or `Restarting` in [`docker ps`](/reference/commandline/cli/#ps). It can also be -useful to use [`docker events`](/reference/commandline/cli/#events) to see the +or `Restarting` in [`docker ps`](/reference/commandline/ps). It can also be +useful to use [`docker events`](/reference/commandline/events) to see the restart policy in effect. Docker supports the following restart policies: @@ -417,7 +417,7 @@ You can specify the maximum amount of times Docker will try to restart the container when using the **on-failure** policy. The default is that Docker will try forever to restart the container. The number of (attempted) restarts for a container can be obtained via [`docker inspect`]( -/reference/commandline/cli/#inspect). For example, to get the number of restarts +/reference/commandline/inspect). For example, to get the number of restarts for container "my-container"; $ docker inspect -f "{{ .RestartCount }}" my-container @@ -1048,7 +1048,7 @@ variables automatically: The container may also include environment variables defined as a result of the container being linked with another container. See -the [*Container Links*](/userguide/dockerlinks/#container-linking) +the [*Container Links*](/userguide/dockerlinks/#connect-with-the-linking-system) section for more details. Additionally, the operator can **set any environment variable** in the diff --git a/docs/userguide/usingdocker.md b/docs/userguide/usingdocker.md index 491566fac..f8c136edf 100644 --- a/docs/userguide/usingdocker.md +++ b/docs/userguide/usingdocker.md @@ -110,7 +110,7 @@ Lastly, we've specified a command for our container to run: `python app.py`. Thi > **Note:** > You can see more detail on the `docker run` command in the [command -> reference](/reference/commandline/cli/#run) and the [Docker Run +> reference](/reference/commandline/run) and the [Docker Run > Reference](/reference/run/). ## Viewing our web application container From 8df037b7ca744ac2205a6d28e469fcfb1a51ca4c Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Tue, 18 Aug 2015 23:41:00 +0200 Subject: [PATCH 18/22] docs: fix anchor link on Ubuntu installation page Signed-off-by: Sebastiaan van Stijn (cherry picked from commit 5dd28c1f9d5933c81c24c9d5fd478239438437f1) --- docs/installation/ubuntulinux.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/installation/ubuntulinux.md b/docs/installation/ubuntulinux.md index e41c9e919..cd72d2e13 100644 --- a/docs/installation/ubuntulinux.md +++ b/docs/installation/ubuntulinux.md @@ -96,7 +96,7 @@ To upgrade your kernel and install the additional packages, do the following: $ sudo reboot -5. After your system reboots, go ahead and [install Docker](#installing-docker-on-ubuntu). +5. After your system reboots, go ahead and [install Docker](#installation). ### For Saucy 13.10 (64 bit) From c6d31c934b75b514fe3ba7fa70a326cf98bb0e25 Mon Sep 17 00:00:00 2001 From: Morgan Bauer Date: Fri, 17 Jul 2015 11:40:56 -0700 Subject: [PATCH 19/22] remove references to 'source repository' - rewrite intro to Dockerfile reference usage section to remove references to 'source repository' - Closes #14714 - Fixes: #8648 - Updating with Seb's comments Signed-off-by: Mary Anthony (cherry picked from commit b143c05d64c4532b090d1f718ab93b4f7b1c466c) --- docs/reference/builder.md | 76 ++++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 37 deletions(-) diff --git a/docs/reference/builder.md b/docs/reference/builder.md index 179d7c5cb..7dbeb18f0 100644 --- a/docs/reference/builder.md +++ b/docs/reference/builder.md @@ -10,48 +10,50 @@ parent = "mn_reference" # Dockerfile reference -**Docker can build images automatically** by reading the instructions -from a `Dockerfile`. A `Dockerfile` is a text document that contains all -the commands you would normally execute manually in order to build a -Docker image. By calling `docker build` from your terminal, you can have -Docker build your image step by step, executing the instructions -successively. +Docker can build images automatically by reading the instructions from a +`Dockerfile`. A `Dockerfile` is a text document that contains all the commands a +user could call on the command line to assemble an image. Using `docker build` +users can create an automated build that executes several command-line +instructions in succession. -This page discusses the specifics of all the instructions you can use in your -`Dockerfile`. To further help you write a clear, readable, maintainable -`Dockerfile`, we've also written a [`Dockerfile` Best Practices -guide](/articles/dockerfile_best-practices). Lastly, you can test your -Dockerfile knowledge with the [Dockerfile tutorial](/userguide/level1). +This page describes the commands you can use in a `Dockerfile`. When you are +done reading this page, refer to the [`Dockerfile` Best +Practices](/articles/dockerfile_best-practices) for a tip-oriented guide. ## Usage -To [*build*](/reference/commandline/build) an image from a source repository, -create a description file called `Dockerfile` at the root of your repository. -This file will describe the steps to assemble the image. +The [`docker build`](/reference/commandline/build/) command builds an image from +a `Dockerfile` and a *context*. The build's context is the files at a specified +location `PATH` or `URL`. The `PATH` is a directory on your local filesystem. +The `URL` is a the location of a Git repository. -Then call `docker build` with the path of your source repository as the argument -(for example, `.`): +A context is processed recursively. So, a `PATH` includes any subdirectories and +the `URL` includes the repository and its submodules. A simple build command +that uses the current directory as context: $ docker build . + Sending build context to Docker daemon 6.51 MB + ... -The path to the source repository defines where to find the *context* of -the build. The build is run by the Docker daemon, not by the CLI, so the -whole context must be transferred to the daemon. The Docker CLI reports -"Sending build context to Docker daemon" when the context is sent to the daemon. +The build is run by the Docker daemon, not by the CLI. The first thing a build +process does is send the entire context (recursively) to the daemon. In most +cases, it's best to start with an empty directory as context and keep your +Dockerfile in that directory. Add only the files needed for building the +Dockerfile. -> **Warning** -> Avoid using your root directory, `/`, as the root of the source repository. The -> `docker build` command will use whatever directory contains the Dockerfile as the build -> context (including all of its subdirectories). The build context will be sent to the -> Docker daemon before building the image, which means if you use `/` as the source -> repository, the entire contents of your hard drive will get sent to the daemon (and -> thus to the machine running the daemon). You probably don't want that. +>**Warning**: Do not use your root directory, `/`, as the `PATH` as it causes +>the build to transfer the entire contents of your hard drive to the Docker +>daemon. -In most cases, it's best to put each Dockerfile in an empty directory. Then, -only add the files needed for building the Dockerfile to the directory. To -increase the build's performance, you can exclude files and directories by -adding a `.dockerignore` file to the directory. For information about how to -[create a `.dockerignore` file](#dockerignore-file) on this page. +To use a file in the build context, the `Dockerfile` refers to the file with +an instruction, for example, a `COPY` instruction. To increase the build's +performance, exclude files and directories by adding a `.dockerignore` file to +the context directory. For information about how to [create a `.dockerignore` +file](#dockerignore-file) see the documentation on this page. + +Traditionally, the `Dockerfile` is called `Dockerfile` and located in the root +of the context. You use the `-f` flag with `docker build` to point to a Dockerfile +anywhere in your file system. You can specify a repository and tag at which to save the new image if the build succeeds: @@ -160,13 +162,13 @@ The instructions that handle environment variables in the `Dockerfile` are: the instructions above. Environment variable substitution will use the same value for each variable -throughout the entire command. In other words, in this example: +throughout the entire command. In other words, in this example: ENV abc=hello ENV abc=bye def=$abc ENV ghi=$abc -will result in `def` having a value of `hello`, not `bye`. However, +will result in `def` having a value of `hello`, not `bye`. However, `ghi` will have a value of `bye` because it is not part of the same command that set `abc` to `bye`. @@ -185,7 +187,7 @@ expansion) is done using Go's You can specify exceptions to exclusion rules. To do this, simply prefix a pattern with an `!` (exclamation mark) in the same way you would in a -`.gitignore` file. Currently there is no support for regular expressions. +`.gitignore` file. Currently there is no support for regular expressions. Formats like `[^temp*]` are ignored. The following is an example `.dockerignore` file: @@ -304,7 +306,7 @@ commands using a base image that does not contain `/bin/sh`. The cache for `RUN` instructions isn't invalidated automatically during the next build. The cache for an instruction like -`RUN apt-get dist-upgrade -y` will be reused during the next build. The +`RUN apt-get dist-upgrade -y` will be reused during the next build. The cache for `RUN` instructions can be invalidated by using the `--no-cache` flag, for example `docker build --no-cache`. @@ -882,7 +884,7 @@ The `VOLUME` instruction creates a mount point with the specified name and marks it as holding externally mounted volumes from native host or other containers. The value can be a JSON array, `VOLUME ["/var/log/"]`, or a plain string with multiple arguments, such as `VOLUME /var/log` or `VOLUME /var/log -/var/db`. For more information/examples and mounting instructions via the +/var/db`. For more information/examples and mounting instructions via the Docker client, refer to [*Share Directories via Volumes*](/userguide/dockervolumes/#mount-a-host-directory-as-a-data-volume) documentation. From 7d7ef1188bc8fee4526e4a49a196488a74d4436d Mon Sep 17 00:00:00 2001 From: Qiang Huang Date: Wed, 19 Aug 2015 10:11:08 +0800 Subject: [PATCH 20/22] Add format description in run doc And only set false to --oom-kill-disable, we just need the default value to show. Signed-off-by: Qiang Huang (cherry picked from commit 2a468ed7e409f785a51969b48f0d34a4e0d88413) --- docs/reference/run.md | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/reference/run.md b/docs/reference/run.md index c1f560c6a..9dc03a66c 100644 --- a/docs/reference/run.md +++ b/docs/reference/run.md @@ -505,18 +505,18 @@ parent group. The operator can also adjust the performance parameters of the container: -| Option | Description | -|--------------------------------------|---------------------------------------------------------------------------------------------| -| `-m`, `--memory="" ` | Memory limit (format: , where unit = b, k, m or g) | -| `--memory-swap=""` | Total memory limit (memory + swap, format: , where unit = b, k, m or g) | -| `-c`, `--cpu-shares=0` | CPU shares (relative weight) | -| `--cpu-period=0` | Limit the CPU CFS (Completely Fair Scheduler) period | -| `--cpuset-cpus="" ` | CPUs in which to allow execution (0-3, 0,1) | -| `--cpuset-mems=""` | Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. | -| `--cpu-quota=0` | Limit the CPU CFS (Completely Fair Scheduler) quota | -| `--blkio-weight=0` | Block IO weight (relative weight) accepts a weight value between 10 and 1000. | -| `--oom-kill-disable=true` or `false` | Whether to disable OOM Killer for the container or not. | -| `--memory-swappiness="" ` | Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. | +| Option | Description | +|----------------------------|---------------------------------------------------------------------------------------------| +| `-m`, `--memory="" ` | Memory limit (format: `[]`, where unit = b, k, m or g) | +| `--memory-swap=""` | Total memory limit (memory + swap, format: `[]`, where unit = b, k, m or g) | +| `-c`, `--cpu-shares=0` | CPU shares (relative weight) | +| `--cpu-period=0` | Limit the CPU CFS (Completely Fair Scheduler) period | +| `--cpuset-cpus="" ` | CPUs in which to allow execution (0-3, 0,1) | +| `--cpuset-mems=""` | Memory nodes (MEMs) in which to allow execution (0-3, 0,1). Only effective on NUMA systems. | +| `--cpu-quota=0` | Limit the CPU CFS (Completely Fair Scheduler) quota | +| `--blkio-weight=0` | Block IO weight (relative weight) accepts a weight value between 10 and 1000. | +| `--oom-kill-disable=false` | Whether to disable OOM Killer for the container or not. | +| `--memory-swappiness="" ` | Tune a container's memory swappiness behavior. Accepts an integer between 0 and 100. | ### Memory constraints From 6117b05e871af395d19cdad46fc719578f899a09 Mon Sep 17 00:00:00 2001 From: Philipp Wahala Date: Wed, 19 Aug 2015 10:53:55 +0200 Subject: [PATCH 21/22] Small fix in dev env docs Signed-off-by: Philipp Wahala (cherry picked from commit fbc0ea32e87cb760c6402d3ded250e682c60b792) Conflicts: docs/project/set-up-dev-env.md --- docs/project/set-up-dev-env.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/project/set-up-dev-env.md b/docs/project/set-up-dev-env.md index 4c70d18fe..05ca81faf 100644 --- a/docs/project/set-up-dev-env.md +++ b/docs/project/set-up-dev-env.md @@ -96,9 +96,9 @@ environment. 1. Open a terminal. - Mac users, use `boot2docker status` to make sure Boot2Docker is running. You - may need to run `eval "$(boot2docker shellinit)"` to initialize your shell - environment. + Mac users, use `docker-machine status your_vm_name` to make sure your VM is + running. You may need to run `eval "$(docker-machine env your_vm_name)"` to + initialize your shell environment. 3. Change into the root of your forked repository. @@ -193,7 +193,7 @@ environment. Keeping the ancestor images improves the build performance. When you rebuild the child image, the build process uses the local ancestors rather than retrieving them from the Hub. The build process gets new ancestors only if - DockerHub has updated versions. + Docker Hub has updated versions. ## Start a container and run a test From 44f21040282e244f86340ab8978021ee8ea773c3 Mon Sep 17 00:00:00 2001 From: Tonis Tiigi Date: Tue, 18 Aug 2015 12:16:26 -0700 Subject: [PATCH 22/22] Update volumes userguide Fixes #15644 Signed-off-by: Tonis Tiigi (cherry picked from commit cc2aab7816f555f58ef3ccaed16537989ac683a7) --- docs/userguide/dockervolumes.md | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/docs/userguide/dockervolumes.md b/docs/userguide/dockervolumes.md index f2aa70d3a..d36f7f6fa 100644 --- a/docs/userguide/dockervolumes.md +++ b/docs/userguide/dockervolumes.md @@ -74,16 +74,21 @@ The output will provide details on the container configurations including the volumes. The output should look something similar to the following: ... - "Volumes": { - "/webapp": "/var/lib/docker/volumes/fac362...80535" - }, - "VolumesRW": { - "/webapp": true - } + Mounts": [ + { + "Name": "fac362...80535", + "Source": "/var/lib/docker/volumes/fac362...80535/_data", + "Destination": "/webapp", + "Driver": "local", + "Mode": "", + "RW": true + } + ] ... -You will notice in the above 'Volumes' is specifying the location on the host and -'VolumesRW' is specifying that the volume is read/write. +You will notice in the above 'Source' is specifying the location on the host and +'Destination' is specifying the volume location inside the container. `RW` shows +if the volume is read/write. ### Mount a host directory as a data volume