github.com/nf/docker@v1.8.1/docs/userguide/dockerizing.md (about) 1 <!--[metadata]> 2 +++ 3 title = "Dockerizing applications: A 'Hello world'" 4 description = "A simple 'Hello world' exercise that introduced you to Docker." 5 keywords = ["docker guide, docker, docker platform, virtualization framework, how to, dockerize, dockerizing apps, dockerizing applications, container, containers"] 6 [menu.main] 7 parent = "smn_applied" 8 +++ 9 <![end-metadata]--> 10 11 # Dockerizing applications: A "Hello world" 12 13 *So what's this Docker thing all about?* 14 15 Docker allows you to run applications inside containers. Running an 16 application inside a container takes a single command: `docker run`. 17 18 >**Note**: Depending on your Docker system configuration, you may be required to 19 >preface each `docker` command on this page with `sudo`. To avoid this behavior, 20 >your system administrator can create a Unix group called `docker` and add users 21 >to it. 22 23 ## Hello world 24 25 Let's try it now. 26 27 $ docker run ubuntu:14.04 /bin/echo 'Hello world' 28 Hello world 29 30 And you just launched your first container! 31 32 So what just happened? Let's step through what the `docker run` command 33 did. 34 35 First we specified the `docker` binary and the command we wanted to 36 execute, `run`. The `docker run` combination *runs* containers. 37 38 Next we specified an image: `ubuntu:14.04`. This is the source of the container 39 we ran. Docker calls this an image. In this case we used an Ubuntu 14.04 40 operating system image. 41 42 When you specify an image, Docker looks first for the image on your 43 Docker host. If it can't find it then it downloads the image from the public 44 image registry: [Docker Hub](https://hub.docker.com). 45 46 Next we told Docker what command to run inside our new container: 47 48 /bin/echo 'Hello world' 49 50 When our container was launched Docker created a new Ubuntu 14.04 51 environment and then executed the `/bin/echo` command inside it. We saw 52 the result on the command line: 53 54 Hello world 55 56 So what happened to our container after that? Well Docker containers 57 only run as long as the command you specify is active. Here, as soon as 58 `Hello world` was echoed, the container stopped. 59 60 ## An interactive container 61 62 Let's try the `docker run` command again, this time specifying a new 63 command to run in our container. 64 65 $ docker run -t -i ubuntu:14.04 /bin/bash 66 root@af8bae53bdd3:/# 67 68 Here we've again specified the `docker run` command and launched an 69 `ubuntu:14.04` image. But we've also passed in two flags: `-t` and `-i`. 70 The `-t` flag assigns a pseudo-tty or terminal inside our new container 71 and the `-i` flag allows us to make an interactive connection by 72 grabbing the standard in (`STDIN`) of the container. 73 74 We've also specified a new command for our container to run: 75 `/bin/bash`. This will launch a Bash shell inside our container. 76 77 So now when our container is launched we can see that we've got a 78 command prompt inside it: 79 80 root@af8bae53bdd3:/# 81 82 Let's try running some commands inside our container: 83 84 root@af8bae53bdd3:/# pwd 85 / 86 root@af8bae53bdd3:/# ls 87 bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var 88 89 You can see we've run the `pwd` to show our current directory and can 90 see we're in the `/` root directory. We've also done a directory listing 91 of the root directory which shows us what looks like a typical Linux 92 file system. 93 94 You can play around inside this container and when you're done you can 95 use the `exit` command or enter Ctrl-D to finish. 96 97 root@af8bae53bdd3:/# exit 98 99 As with our previous container, once the Bash shell process has 100 finished, the container is stopped. 101 102 ## A daemonized Hello world 103 104 Now a container that runs a command and then exits has some uses but 105 it's not overly helpful. Let's create a container that runs as a daemon, 106 like most of the applications we're probably going to run with Docker. 107 108 Again we can do this with the `docker run` command: 109 110 $ docker run -d ubuntu:14.04 /bin/sh -c "while true; do echo hello world; sleep 1; done" 111 1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147 112 113 Wait, what? Where's our "hello world" output? Let's look at what we've run here. 114 It should look pretty familiar. We ran `docker run` but this time we 115 specified a flag: `-d`. The `-d` flag tells Docker to run the container 116 and put it in the background, to daemonize it. 117 118 We also specified the same image: `ubuntu:14.04`. 119 120 Finally, we specified a command to run: 121 122 /bin/sh -c "while true; do echo hello world; sleep 1; done" 123 124 This is the (hello) world's silliest daemon: a shell script that echoes 125 `hello world` forever. 126 127 So why aren't we seeing any `hello world`'s? Instead Docker has returned 128 a really long string: 129 130 1e5535038e285177d5214659a068137486f96ee5c2e85a4ac52dc83f2ebe4147 131 132 This really long string is called a *container ID*. It uniquely 133 identifies a container so we can work with it. 134 135 > **Note:** 136 > The container ID is a bit long and unwieldy and a bit later 137 > on we'll see a shorter ID and some ways to name our containers to make 138 > working with them easier. 139 140 We can use this container ID to see what's happening with our `hello world` daemon. 141 142 Firstly let's make sure our container is running. We can 143 do that with the `docker ps` command. The `docker ps` command queries 144 the Docker daemon for information about all the containers it knows 145 about. 146 147 $ docker ps 148 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 149 1e5535038e28 ubuntu:14.04 /bin/sh -c 'while tr 2 minutes ago Up 1 minute insane_babbage 150 151 Here we can see our daemonized container. The `docker ps` has returned some useful 152 information about it, starting with a shorter variant of its container ID: 153 `1e5535038e28`. 154 155 We can also see the image we used to build it, `ubuntu:14.04`, the command it 156 is running, its status and an automatically assigned name, 157 `insane_babbage`. 158 159 > **Note:** 160 > Docker automatically names any containers you start, a 161 > little later on we'll see how you can specify your own names. 162 163 Okay, so we now know it's running. But is it doing what we asked it to do? To see this 164 we're going to look inside the container using the `docker logs` 165 command. Let's use the container name Docker assigned. 166 167 $ docker logs insane_babbage 168 hello world 169 hello world 170 hello world 171 . . . 172 173 The `docker logs` command looks inside the container and returns its standard 174 output: in this case the output of our command `hello world`. 175 176 Awesome! Our daemon is working and we've just created our first 177 Dockerized application! 178 179 Now we've established we can create our own containers let's tidy up 180 after ourselves and stop our daemonized container. To do this we use the 181 `docker stop` command. 182 183 $ docker stop insane_babbage 184 insane_babbage 185 186 The `docker stop` command tells Docker to politely stop the running 187 container. If it succeeds it will return the name of the container it 188 has just stopped. 189 190 Let's check it worked with the `docker ps` command. 191 192 $ docker ps 193 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 194 195 Excellent. Our container has been stopped. 196 197 # Next steps 198 199 Now we've seen how simple it is to get started with Docker. Let's learn how to 200 do some more advanced tasks. 201 202 Go to [Working With Containers](/userguide/usingdocker). 203