Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Well done!
You have completed Introduction to Docker!
You have completed Introduction to Docker!
Preview
We've created an image based on our Dockerfile for Mongodb. Now let's run a container based on that image.
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign up
We've created an image based on
our docker file for MongoDB.
0:00
Now let's run a container
based on that image.
0:03
As before,
we'll use the docker run subcommand.
0:07
Normally our terminal would be attached to
the main process on the running container.
0:10
That's MongoDB in this case, that lets
us control that process directly,
0:15
but it prevents us from running any
other commands on our docker host.
0:20
So I'm going to add the -d flag,
which stands for detach.
0:24
That way after the container launches
we'll be dropped back to the shell,
0:28
on our Docker host.
0:34
Our Docker file is set up
to expose ports 27017 and
0:35
to 82017 because those
are used by MongoDB.
0:39
So next we'll need to publish
those two ports using -p options,
0:42
so they can be accessed
from our Docker host.
0:47
We'll publish 27017 as 27017, and
0:50
we'll also publish 28017 as 28017.
0:56
We'll also assign an easily recognizable
name to our container so that we don't
1:01
have to use the randomly generated name or
the container ID to operate on it.
1:05
We do that with the --name option.
1:10
We'll use the name of mongo,
lastly, and most importantly,
1:13
we need to provide the name of the image
that our container will be based on.
1:17
We'll use the name of the image
we provided to Docker Build in
1:22
the previous video mongodb.
1:26
Again we won't provide a particular tag so
that it defaults to latest.
1:28
When we hit Enter, Docker will launch
a container based on the MongoDB image,
1:34
print the ID for the new container, and
1:39
then drop us back to
the shell on our Docker host.
1:42
We can get a list of running containers
with the docker ps subcommand,
1:45
ps stands for process status.
1:50
Presumably it's named after the ps unix
command which gives you the status of
1:52
programs on your computer.
1:56
But docker ps gives you
the status of docker containers.
1:58
In the output we'll see a partial ID for
each running container,
2:01
the image it was started from,
the command that's running.
2:06
When it was created,
its current running status,
2:10
any published ports,
and finally its name.
2:15
So there's our container, started from the
MongoDB image and with a name of mongo.
2:19
We can view logs for our container
with the docker log subcommand.
2:23
We need to identify which
container to show logs for, so
2:31
type the first few characters
of the container ID 0fe,
2:34
you don't need to type the whole ID,
just the first few characters of it.
2:37
Press Enter and
2:42
you'll see a log of output from
the processes running on the container.
2:43
We can see a message that MongoDB
is starting up at the top.
2:49
And there's a message that it's listening
on port 27017 down at the bottom.
2:52
Since we provided the name for
our container when we launched it,
2:58
we can use that name and commands instead
of the more cumbersome container ID.
3:02
Let's try the docker
logs command again but
3:06
this time we'll use the container name,
mongo.
3:09
We'll get the same result.
3:12
The logs say that MongoDB is listening for
connections so let's try connecting to it.
3:13
Here in the shell for our Docker host,
we'll run the MongoClient,
3:19
which connects to local host port 27017,
by default.
3:23
If you don't have the MongoClient
installed on your computer, and
3:26
would like to, see the teacher's notes for
installation instructions.
3:30
The client won't care at all if Port 27017
is being forwarded to a docker container
3:35
as long as it gets a response from
a Mongo database, it'll work just fine.
3:40
We can run the Mongo show DBs
command to show a list of databases.
3:44
And run the exit command to disconnect and
return to the shell on our Docker host.
3:50
We can execute additional commands
on the container while keeping
3:55
the main process running with
the docker exec command.
3:59
So if we want to open a shell and look
around in the container, we can run docker
4:03
exec, pass the i and t flags to open
an interactive terminal session.
4:08
Specify the ID or name of the container
we want to execute on, mongo,
4:13
and lastly give the executable
we want to run, /bin/bash.
4:17
Running the bash executable
launches a shell on the container,
4:21
allowing us to run commands just like we
would have on the other Linux system.
4:26
So we can print the working directory, we
can get a list of the directory contents,
4:32
and we can show a list
of running processes.
4:36
We can type exit, when we want to quit
the shell and return to our host system.
4:39
Once we're done working
with the Mongol database,
4:45
we can safely shut the container down.
4:48
We do that with docker stop subcommand,
again we need to specify which container
4:50
we're working with using either
the container ID or the container name.
4:56
We'll use the name mongo, oops,
made a little typo here at the start,
5:01
with the container stopped, it'll no
longer appear in the output of docker ps.
5:06
And of course, it won't be able to
accept network connections either.
5:11
If we try running the mongo client
again now, it'll fail to connect.
5:15
If we need the container again, we can
start it back up with docker start mongo.
5:20
After that it'll appear in
the docker ps output again, and
5:27
it'll resume accepting
network connections.
5:31
The mongo client will resume work,
docker stop mongo will shut it down again.
5:34
Docker ps only shows running containers.
5:45
We can get a list of all
containers by adding the -a flag.
5:45
If we do that we'll see the stopped
mongo container listed in the output.
5:52
We can remove these stopped containers
with a docker rm sub command.
5:57
Again we need to specify which container,
so provide either the container ID or
6:04
the container name,
we'll use the name mongo.
6:10
If we run docker ps -a again, the mongo
container will be gone from the list.
6:13
Remember how we tried to remove
the temp image earlier, and
6:19
couldn't because the container
based on it still existed?
6:22
We can see a container based on the temp
image, here in the output of docker ps -a.
6:25
Let's remove that container
as well using its ID.
6:30
So I'll copy the ID and enter the command,
docker rm and paste the ID here.
6:36
Then if we try to remove
the temp image again with docker
6:42
rmi that's remove image temp
it should be successful.
6:47
Looks like I'm still getting an error
that I can't remove it though.
6:53
Let's try docker ps -a again.
6:58
It looks like we have a couple additional
containers that are based on the temp
7:01
image.
7:05
So I'm gonna remove those one by one, I'll
copy the ID, docker rm and remove that ID.
7:06
And then copy the ID for the second
container and docker rm that as well.
7:12
Okay, let's try this one more time,
docker remove image temp,
7:17
and this time,
removing the image is successful.
7:23
Now you know the basic commands
to manage images and containers,
7:27
but Docker has some great facilities for
sharing images too.
7:31
We'll look at those next.
7:34
You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up