mirror of https://github.com/docker/docs.git
Merge pull request #440 from rillig/we-you
Replace "we" with "you", as per the style guide
This commit is contained in:
commit
ff59423a39
|
@ -62,7 +62,7 @@ In this example:
|
||||||
* `ubuntu` is the image you would like to run.
|
* `ubuntu` is the image you would like to run.
|
||||||
* `-t` flag assigns a pseudo-tty or terminal inside the new container.
|
* `-t` flag assigns a pseudo-tty or terminal inside the new container.
|
||||||
* `-i` flag allows you to make an interactive connection by
|
* `-i` flag allows you to make an interactive connection by
|
||||||
grabbing the standard in (`STDIN`) of the container.
|
grabbing the standard input (`STDIN`) of the container.
|
||||||
* `/bin/bash` launches a Bash shell inside our container.
|
* `/bin/bash` launches a Bash shell inside our container.
|
||||||
|
|
||||||
The container launches. We can see there is a
|
The container launches. We can see there is a
|
||||||
|
@ -192,7 +192,7 @@ ran an *interactive container* that ran in the foreground. You also ran a
|
||||||
about several Docker commands:
|
about several Docker commands:
|
||||||
|
|
||||||
* `docker ps` - Lists containers.
|
* `docker ps` - Lists containers.
|
||||||
* `docker logs` - Shows us the standard output of a container.
|
* `docker logs` - Shows the standard output of a container.
|
||||||
* `docker stop` - Stops running containers.
|
* `docker stop` - Stops running containers.
|
||||||
|
|
||||||
Now, you have the basis learn more about Docker and how to do some more advanced
|
Now, you have the basis learn more about Docker and how to do some more advanced
|
||||||
|
|
|
@ -3,22 +3,29 @@ redirect_from:
|
||||||
- /engine/userguide/containers/usingdocker/
|
- /engine/userguide/containers/usingdocker/
|
||||||
description: Learn how to manage and operate Docker containers.
|
description: Learn how to manage and operate Docker containers.
|
||||||
keywords:
|
keywords:
|
||||||
- docker, the docker guide, documentation, docker.io, monitoring containers, docker top, docker inspect, docker port, ports, docker logs, log, Logs
|
- docker, the docker guide, documentation, docker.io, monitoring containers,
|
||||||
|
docker top, docker inspect, docker port, ports, docker logs, log, logs
|
||||||
|
menu:
|
||||||
|
main:
|
||||||
|
parent: engine_learn_menu
|
||||||
|
weight: -5
|
||||||
title: Run a simple application
|
title: Run a simple application
|
||||||
---
|
---
|
||||||
|
|
||||||
In the ["*Hello world in a container*"](dockerizing.md) you launched your
|
# Run a simple application
|
||||||
first containers using the `docker run` command. You ran an *interactive container* that ran in the foreground. You also ran a *detached container* that ran in the background. In the process you learned about several Docker commands:
|
|
||||||
|
In the ["*Hello world in a container*"](dockerizing.md) you launched your first
|
||||||
|
containers using the `docker run` command. You ran an *interactive container*
|
||||||
|
that ran in the foreground. You also ran a *detached container* that ran in the
|
||||||
|
background. In the process you learned about several Docker commands:
|
||||||
|
|
||||||
* `docker ps` - Lists containers.
|
* `docker ps` - Lists containers.
|
||||||
* `docker logs` - Shows us the standard output of a container.
|
* `docker logs` - Shows the standard output of a container.
|
||||||
* `docker stop` - Stops running containers.
|
* `docker stop` - Stops running containers.
|
||||||
|
|
||||||
## Learn about the Docker client
|
## Learn about the Docker client
|
||||||
|
|
||||||
If you didn't realize it yet, you've been using the Docker client each time you
|
The `docker` program is called the Docker client. Each action you can take with
|
||||||
typed `docker` in your Bash terminal. The client is a simple command line client
|
|
||||||
also known as a command-line interface (CLI). Each action you can take with
|
|
||||||
the client is a command and each command can take a series of flags and arguments.
|
the client is a command and each command can take a series of flags and arguments.
|
||||||
|
|
||||||
# Usage: [sudo] docker [subcommand] [flags] [arguments] ..
|
# Usage: [sudo] docker [subcommand] [flags] [arguments] ..
|
||||||
|
@ -35,20 +42,20 @@ daemon you are using, but also the version of Go (the programming
|
||||||
language powering Docker).
|
language powering Docker).
|
||||||
|
|
||||||
Client:
|
Client:
|
||||||
Version: 1.8.1
|
Version: 1.12.2
|
||||||
API version: 1.20
|
API version: 1.24
|
||||||
Go version: go1.4.2
|
Go version: go1.6.3
|
||||||
Git commit: d12ea79
|
Git commit: bb80604
|
||||||
Built: Thu Aug 13 02:35:49 UTC 2015
|
Built: Tue Oct 11 17:00:50 2016
|
||||||
OS/Arch: linux/amd64
|
OS/Arch: windows/amd64
|
||||||
|
|
||||||
Server:
|
Server:
|
||||||
Version: 1.8.1
|
Version: 1.12.3
|
||||||
API version: 1.20
|
API version: 1.24
|
||||||
Go version: go1.4.2
|
Go version: go1.6.3
|
||||||
Git commit: d12ea79
|
Git commit: 6b644ec
|
||||||
Built: Thu Aug 13 02:35:49 UTC 2015
|
Built: Wed Oct 26 23:26:11 2016
|
||||||
OS/Arch: linux/amd64
|
OS/Arch: linux/amd64
|
||||||
|
|
||||||
## Get Docker command help
|
## Get Docker command help
|
||||||
|
|
||||||
|
@ -76,36 +83,34 @@ To see usage for a specific command, specify the command with the `--help` flag:
|
||||||
> For further details and examples of each command, see the
|
> For further details and examples of each command, see the
|
||||||
> [command reference](../reference/commandline/cli.md) in this guide.
|
> [command reference](../reference/commandline/cli.md) in this guide.
|
||||||
|
|
||||||
## Running a web application in Docker
|
## Run a web application in Docker
|
||||||
|
|
||||||
So now you've learned a bit more about the `docker` client you can move onto
|
Now that you've learned a bit more about the Docker client, you can move onto
|
||||||
the important stuff: running more containers. So far none of the
|
the important stuff: running more containers. So far none of the
|
||||||
containers you've run did anything particularly useful, so you can
|
containers you've run did anything particularly useful, so you can
|
||||||
change that by running an example web application in Docker.
|
change that by running an example web application in Docker.
|
||||||
|
|
||||||
For our web application we're going to run a Python Flask application.
|
For the web application you're going to run a Python Flask application.
|
||||||
Start with a `docker run` command.
|
Start with a `docker run` command.
|
||||||
|
|
||||||
$ docker run -d -P training/webapp python app.py
|
$ docker run -d -P training/webapp python app.py
|
||||||
|
|
||||||
Review what the command did. You've specified two flags: `-d` and
|
This command consists of the following parts:
|
||||||
`-P`. You've already seen the `-d` flag which tells Docker to run the
|
|
||||||
container in the background. The `-P` flag is new and tells Docker to
|
|
||||||
map any required network ports inside our container to our host. This
|
|
||||||
lets us view our web application.
|
|
||||||
|
|
||||||
You've specified an image: `training/webapp`. This image is a
|
* The `-d` flag runs the container in the background (as a so-called daemon).
|
||||||
pre-built image you've created that contains a simple Python Flask web
|
* The `-P` flag maps any required network ports inside the container to your
|
||||||
application.
|
host. This lets you view the web application.
|
||||||
|
* The `training/webapp` image is a pre-built image that contains a simple Python
|
||||||
Lastly, you've specified a command for our container to run: `python app.py`. This launches our web application.
|
Flask web application.
|
||||||
|
* The remaining arguments make up the command that is run inside
|
||||||
|
the container. The `python app.py` command launches the web application.
|
||||||
|
|
||||||
> **Note:**
|
> **Note:**
|
||||||
> You can see more detail on the `docker run` command in the [command
|
> You can see more detail on the `docker run` command
|
||||||
> reference](../reference/commandline/run.md) and the [Docker Run
|
> in the [command reference](../reference/commandline/run.md)
|
||||||
> Reference](../reference/run.md).
|
> and the [docker run reference](../reference/run.md).
|
||||||
|
|
||||||
## Viewing our web application container
|
## View the web application container
|
||||||
|
|
||||||
Now you can see your running container using the `docker ps` command.
|
Now you can see your running container using the `docker ps` command.
|
||||||
|
|
||||||
|
@ -114,72 +119,69 @@ Now you can see your running container using the `docker ps` command.
|
||||||
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
|
||||||
bc533791f3f5 training/webapp:latest python app.py 5 seconds ago Up 2 seconds 0.0.0.0:49155->5000/tcp nostalgic_morse
|
bc533791f3f5 training/webapp:latest python app.py 5 seconds ago Up 2 seconds 0.0.0.0:49155->5000/tcp nostalgic_morse
|
||||||
|
|
||||||
You can see you've specified a new flag, `-l`, for the `docker ps`
|
The `-l` flag shows only the details of the *last* container started.
|
||||||
command. This tells the `docker ps` command to return the details of the
|
|
||||||
*last* container started.
|
|
||||||
|
|
||||||
> **Note:**
|
> **Note:**
|
||||||
> By default, the `docker ps` command only shows information about running
|
> By default, the `docker ps` command only shows information about running
|
||||||
> containers. If you want to see stopped containers too use the `-a` flag.
|
> containers. If you want to see stopped containers too, use the `-a` flag.
|
||||||
|
|
||||||
We can see the same details we saw [when we first Dockerized a
|
You can see the same details you saw [when you first dockerized a
|
||||||
container](dockerizing.md) with one important addition in the `PORTS`
|
container](dockerizing.md), with one important addition in the `PORTS`
|
||||||
column.
|
column.
|
||||||
|
|
||||||
PORTS
|
PORTS
|
||||||
0.0.0.0:49155->5000/tcp
|
0.0.0.0:49155->5000/tcp
|
||||||
|
|
||||||
When we passed the `-P` flag to the `docker run` command Docker mapped any
|
When you passed the `-P` flag to the `docker run` command,
|
||||||
ports exposed in our image to our host.
|
Docker mapped any ports exposed in the container to your host.
|
||||||
|
|
||||||
> **Note:**
|
> **Note:**
|
||||||
> We'll learn more about how to expose ports in Docker images when
|
> You'll learn more about how to expose ports in Docker images when
|
||||||
> [we learn how to build images](dockerimages.md).
|
> [you learn how to build images](dockerimages.md).
|
||||||
|
|
||||||
In this case Docker has exposed port 5000 (the default Python Flask
|
In this case Docker has exposed port 5000 (the default Python Flask
|
||||||
port) on port 49155.
|
port) on port 49155.
|
||||||
|
|
||||||
Network port bindings are very configurable in Docker. In our last example the
|
Network port bindings are very configurable in Docker. In the last example the
|
||||||
`-P` flag is a shortcut for `-p 5000` that maps port 5000 inside the container
|
`-P` flag is a shortcut for `-p 5000` that maps port 5000 inside the container
|
||||||
to a high port (from *ephemeral port range* which typically ranges from 32768
|
to a high port (from *ephemeral port range* which typically ranges from 32768
|
||||||
to 61000) on the local Docker host. We can also bind Docker containers to
|
to 61000) on the local Docker host. You can also bind Docker containers to
|
||||||
specific ports using the `-p` flag, for example:
|
specific ports using the `-p` flag, for example:
|
||||||
|
|
||||||
$ docker run -d -p 80:5000 training/webapp python app.py
|
$ docker run -d -p 80:5000 training/webapp python app.py
|
||||||
|
|
||||||
This would map port 5000 inside our container to port 80 on our local
|
This would map port 5000 inside your container to port 80 on your local
|
||||||
host. You might be asking about now: why wouldn't we just want to always
|
host. You might be asking about now: why wouldn't we just want to always
|
||||||
use 1:1 port mappings in Docker containers rather than mapping to high
|
use 1:1 port mappings in Docker containers rather than mapping to high
|
||||||
ports? Well 1:1 mappings have the constraint of only being able to map
|
ports? Well, 1:1 mappings have the constraint of only being able to map
|
||||||
one of each port on your local host.
|
one of each port on your local host.
|
||||||
|
|
||||||
Suppose you want to test two Python applications: both bound to port 5000 inside
|
Suppose you want to test two Python applications: both bound to port 5000 inside
|
||||||
their own containers. Without Docker's port mapping you could only access one at
|
their own containers. Without Docker's port mapping you could only access one at
|
||||||
a time on the Docker host.
|
a time on the Docker host.
|
||||||
|
|
||||||
So you can now browse to port 49155 in a web browser to
|
So you can now browse to port 49155 in a web browser to see the application.
|
||||||
see the application.
|
|
||||||
|
|
||||||
.
|
.
|
||||||
|
|
||||||
Our Python application is live!
|
Your Python web application is live!
|
||||||
|
|
||||||
> **Note:**
|
> **Note:**
|
||||||
> If you have been using a virtual machine on macOS, Windows or Linux,
|
> If you have been using a virtual machine on macOS, Windows or Linux,
|
||||||
> you'll need to get the IP of the virtual host instead of using localhost.
|
> you'll need to get the IP of the virtual host instead of using localhost.
|
||||||
> You can do this by running the `docker-machine ip your_vm_name` from your command line or terminal application, for example:
|
> You can do this by running `docker-machine ip` from the command line:
|
||||||
>
|
>
|
||||||
> $ docker-machine ip my-docker-vm
|
> $ docker-machine ip
|
||||||
> 192.168.99.100
|
> 192.168.99.100
|
||||||
>
|
>
|
||||||
> In this case you'd browse to `http://192.168.99.100:49155` for the above example.
|
> In this case you'd browse to `http://192.168.99.100:49155` for the above example.
|
||||||
|
|
||||||
## A network port shortcut
|
## A network port shortcut
|
||||||
|
|
||||||
Using the `docker ps` command to return the mapped port is a bit clumsy so
|
Using the `docker ps` command to return the mapped port is a bit clumsy,
|
||||||
Docker has a useful shortcut we can use: `docker port`. To use `docker port` we
|
so Docker has a useful shortcut you can use: `docker port`.
|
||||||
specify the ID or name of our container and then the port for which we need the
|
To use `docker port`, specify the ID or name of your container and then
|
||||||
corresponding public-facing port.
|
the port for which you need the corresponding public-facing port.
|
||||||
|
|
||||||
$ docker port nostalgic_morse 5000
|
$ docker port nostalgic_morse 5000
|
||||||
|
|
||||||
|
@ -188,25 +190,24 @@ corresponding public-facing port.
|
||||||
In this case you've looked up what port is mapped externally to port 5000 inside
|
In this case you've looked up what port is mapped externally to port 5000 inside
|
||||||
the container.
|
the container.
|
||||||
|
|
||||||
## Viewing the web application's logs
|
## View the web application's logs
|
||||||
|
|
||||||
You can also find out a bit more about what's happening with our application and
|
You can also find out a bit more about what's happening with your
|
||||||
use another of the commands you've learned, `docker logs`.
|
application and use another of the commands you've learned, `docker logs`.
|
||||||
|
|
||||||
$ docker logs -f nostalgic_morse
|
$ docker logs -f nostalgic_morse
|
||||||
|
|
||||||
* Running on http://0.0.0.0:5000/
|
* Running on http://0.0.0.0:5000/
|
||||||
10.0.2.2 - - [23/May/2014 20:16:31] "GET / HTTP/1.1" 200 -
|
10.0.2.2 - - [06/Nov/2016 20:16:31] "GET / HTTP/1.1" 200 -
|
||||||
10.0.2.2 - - [23/May/2014 20:16:31] "GET /favicon.ico HTTP/1.1" 404 -
|
10.0.2.2 - - [06/Nov/2016 20:16:31] "GET /favicon.ico HTTP/1.1" 404 -
|
||||||
|
|
||||||
This time though you've added a new flag, `-f`. This causes the `docker
|
The `-f` flag causes the `docker logs` command to act like the `tail -f` command
|
||||||
logs` command to act like the `tail -f` command and watch the
|
and watch the container's standard output. You can see here the logs from Flask
|
||||||
container's standard out. We can see here the logs from Flask showing
|
showing the application running on port 5000 and the access log entries for it.
|
||||||
the application running on port 5000 and the access log entries for it.
|
|
||||||
|
|
||||||
## Looking at our web application container's processes
|
## Look at the web application container's processes
|
||||||
|
|
||||||
In addition to the container's logs we can also examine the processes
|
In addition to the container's logs you can also examine the processes
|
||||||
running inside it using the `docker top` command.
|
running inside it using the `docker top` command.
|
||||||
|
|
||||||
$ docker top nostalgic_morse
|
$ docker top nostalgic_morse
|
||||||
|
@ -214,12 +215,12 @@ running inside it using the `docker top` command.
|
||||||
PID USER COMMAND
|
PID USER COMMAND
|
||||||
854 root python app.py
|
854 root python app.py
|
||||||
|
|
||||||
Here we can see our `python app.py` command is the only process running inside
|
Here you can see that the `python app.py` command is the only process
|
||||||
the container.
|
running inside the container.
|
||||||
|
|
||||||
## Inspecting our web application container
|
## Inspect the web application container
|
||||||
|
|
||||||
Lastly, we can take a low-level dive into our Docker container using the
|
Lastly, you can take a low-level dive into the Docker container using the
|
||||||
`docker inspect` command. It returns a JSON document containing useful
|
`docker inspect` command. It returns a JSON document containing useful
|
||||||
configuration and status information for the specified container.
|
configuration and status information for the specified container.
|
||||||
|
|
||||||
|
@ -240,8 +241,8 @@ You can see a sample of that JSON output.
|
||||||
"User": "",
|
"User": "",
|
||||||
. . .
|
. . .
|
||||||
|
|
||||||
We can also narrow down the information we want to return by requesting a
|
You can also narrow down the information you want to return by requesting a
|
||||||
specific element, for example to return the container's IP address we would:
|
specific element, for example to return the container's IP address, you would:
|
||||||
|
|
||||||
{% raw %}
|
{% raw %}
|
||||||
$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nostalgic_morse
|
$ docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nostalgic_morse
|
||||||
|
@ -249,21 +250,21 @@ specific element, for example to return the container's IP address we would:
|
||||||
|
|
||||||
172.17.0.5
|
172.17.0.5
|
||||||
|
|
||||||
## Stopping our web application container
|
## Stop the web application container
|
||||||
|
|
||||||
Okay you've seen web application working. Now you can stop it using the
|
The web application is still running inside the container. You can stop it using
|
||||||
`docker stop` command and the name of our container: `nostalgic_morse`.
|
the `docker stop` command and the name of the container: `nostalgic_morse`.
|
||||||
|
|
||||||
$ docker stop nostalgic_morse
|
$ docker stop nostalgic_morse
|
||||||
|
|
||||||
nostalgic_morse
|
nostalgic_morse
|
||||||
|
|
||||||
We can now use the `docker ps` command to check if the container has
|
You can now use the `docker ps` command to check if the container has
|
||||||
been stopped.
|
been stopped.
|
||||||
|
|
||||||
$ docker ps -l
|
$ docker ps -l
|
||||||
|
|
||||||
## Restarting our web application container
|
## Restart the web application container
|
||||||
|
|
||||||
Oops! Just after you stopped the container you get a call to say another
|
Oops! Just after you stopped the container you get a call to say another
|
||||||
developer needs the container back. From here you have two choices: you
|
developer needs the container back. From here you have two choices: you
|
||||||
|
@ -282,7 +283,7 @@ responds.
|
||||||
> Also available is the `docker restart` command that runs a stop and
|
> Also available is the `docker restart` command that runs a stop and
|
||||||
> then start on the container.
|
> then start on the container.
|
||||||
|
|
||||||
## Removing our web application container
|
## Remove the web application container
|
||||||
|
|
||||||
Your colleague has let you know that they've now finished with the container
|
Your colleague has let you know that they've now finished with the container
|
||||||
and won't need it again. Now, you can remove it using the `docker rm` command.
|
and won't need it again. Now, you can remove it using the `docker rm` command.
|
||||||
|
@ -292,7 +293,7 @@ and won't need it again. Now, you can remove it using the `docker rm` command.
|
||||||
Error: Impossible to remove a running container, please stop it first or use -f
|
Error: Impossible to remove a running container, please stop it first or use -f
|
||||||
2014/05/24 08:12:56 Error: failed to remove one or more containers
|
2014/05/24 08:12:56 Error: failed to remove one or more containers
|
||||||
|
|
||||||
What happened? We can't actually remove a running container. This protects
|
What happened? You can't actually remove a running container. This protects
|
||||||
you from accidentally removing a running container you might need. You can try
|
you from accidentally removing a running container you might need. You can try
|
||||||
this again by stopping the container first.
|
this again by stopping the container first.
|
||||||
|
|
||||||
|
@ -304,7 +305,7 @@ this again by stopping the container first.
|
||||||
|
|
||||||
nostalgic_morse
|
nostalgic_morse
|
||||||
|
|
||||||
And now our container is stopped and deleted.
|
And now the container is stopped and deleted.
|
||||||
|
|
||||||
> **Note:**
|
> **Note:**
|
||||||
> Always remember that removing a container is final!
|
> Always remember that removing a container is final!
|
||||||
|
@ -312,6 +313,6 @@ And now our container is stopped and deleted.
|
||||||
# Next steps
|
# Next steps
|
||||||
|
|
||||||
Until now you've only used images that you've downloaded from Docker Hub. Next,
|
Until now you've only used images that you've downloaded from Docker Hub. Next,
|
||||||
you can get introduced to building and sharing our own images.
|
you can get introduced to building and sharing your own images.
|
||||||
|
|
||||||
Go to [Working with Docker Images](dockerimages.md).
|
Go to [Working with Docker Images](dockerimages.md).
|
||||||
|
|
Loading…
Reference in New Issue