100% found this document useful (1 vote)
598 views39 pages

15 Docker Tips in 5 Minutes

This document provides 15 tips for using Docker in under 5 minutes. It covers topics such as getting the ID of the last run container, why to always use a Dockerfile, adding yourself to the docker group for sudoless use, removing stopped containers, using jq to parse Docker inspect output, common environment variables in images, the difference between RUN and CMD in Dockerfiles, and where Docker stores images, containers, volumes and other data on the host machine.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
100% found this document useful (1 vote)
598 views39 pages

15 Docker Tips in 5 Minutes

This document provides 15 tips for using Docker in under 5 minutes. It covers topics such as getting the ID of the last run container, why to always use a Dockerfile, adding yourself to the docker group for sudoless use, removing stopped containers, using jq to parse Docker inspect output, common environment variables in images, the difference between RUN and CMD in Dockerfiles, and where Docker stores images, containers, volumes and other data on the host machine.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 39

15

Docker Tips in 5 Minutes

Brian Morearty Nov 5, 2013

1. Getting the id of the last-run


container

15 Docker Tips in 5 Minutes

You could do this:


!
$ ID=$(docker run ubuntu echo hello world)!
hello world!
$ docker commit $ID helloworld!
fd08a884dc79!

But you have to keep assigning IDs.


Try this instead:
15 Docker Tips in 5 Minutes

!
$ alias dl='docker ps -l -q'!
$ docker run ubuntu echo hello world!
hello world!
$ dl!
1904cf045887!
$ docker commit `dl` helloworld!
fd08a884dc79!

15 Docker Tips in 5 Minutes

2. Why you always want a Dockerle, even


if you install everything in the shell

15 Docker Tips in 5 Minutes

$ docker run -i -t ubuntu bash!


root@db0c3978abf8:/# apt-get install
postgresql!
Reading package lists... Done!
Building dependency tree... Done!
etc., etc., etc.!
root@db0c3978abf8:/# exit!
$ docker commit \!
-run='{"Cmd":["postgres",
"-too -many -opts"]}' \!
`dl` postgres!
5061b88e4cf0!
15 Docker Tips in 5 Minutes

Instead, make a wee liEle

Dockerle that is FROM the image


you made interacGvely.

There you can set CMD,

ENTRYPOINT, VOLUME, etc.

15 Docker Tips in 5 Minutes

3. Su-su-sudo

15 Docker Tips in 5 Minutes

TOMATO


TOMAHTO

15 Docker Tips in 5 Minutes

10

#
$
!
#
$
!
#
$
!
#
$
!

Add the docker group.!


sudo groupadd docker!
Add self to the docker group. !
sudo gpasswd -a myusername docker!
Restart the docker daemon!
sudo service docker restart!
logout and in again.!
exit!

15 Docker Tips in 5 Minutes

11

4. Take out the garbage

15 Docker Tips in 5 Minutes

12

!
!
$ docker rm $(docker ps -a -q)!

Deletes all stopped containers.


(Tries, but conveniently fails, to delete sGll-
running containers.)

15 Docker Tips in 5 Minutes

13

5. jq - the gangsta way to parse


docker inspects output !

15 Docker Tips in 5 Minutes

14

!
$ docker inspect `dl` | \!
grep IPAddress | cut -d '"' -f 4!
172.17.0.52!
!
$ docker inspect `dl` | \!
jq -r '.[0].NetworkSettings.IPAddress'!
172.17.0.52!

!

JSON is for JavaScript.


15 Docker Tips in 5 Minutes

15

6. What environment variables does


an image have?

15 Docker Tips in 5 Minutes

16

!
$ docker run ubuntu env!
HOME=/!
PATH=/usr/local/sbin:/usr/local/bin:/
usr/sbin:/usr/bin:/sbin:/bin!
container=lxc!
HOSTNAME=5e1560b7f757!

This is nice when using docker run

-link to connect containers. (Later slide.)

15 Docker Tips in 5 Minutes

17

7. RUN vs. CMD instruction

15 Docker Tips in 5 Minutes

18

!
FROM thelanddownunder!
MAINTAINER crocdundee!
!
# docker build will execute these:!
RUN apt-get update!
RUN apt-get install softwares!
!
# docker run runs this cmd by default:!
CMD ["softwares"]!

A Dockerle.
15 Docker Tips in 5 Minutes

19

8. CMD vs. ENTRYPOINT instruction

15 Docker Tips in 5 Minutes

20

!
$ cat Dockerfile!
FROM ubuntu!
CMD ["echo"]!
!
$ docker run \
imagename \
echo hello!
hello!
!

Overrideable.
15 Docker Tips in 5 Minutes

!
$ cat Dockerfile!
FROM ubuntu!
ENTRYPOINT ["echo"]!
!
$ docker run \
imagename \
echo hello!
echo hello!
!

Not overrideable.

21

9. Does a Docker container have its


own IP address?

15 Docker Tips in 5 Minutes

22

!
$ ip -4 -o addr show eth0!
2: eth0
inet 162.243.139.222/24!
!
$ docker run ubuntu \!
ip -4 -o addr show eth0!
149: eth0
inet 172.17.0.43/16!

Yep. Its like a process with an IP address.


15 Docker Tips in 5 Minutes

23

10. Dockers architecture: thin CLI client,


REST server daemon over UNIX socket

15 Docker Tips in 5 Minutes

24

!
# Connect to the UNIX socket and make!
# like an HTTP client.!
$ nc -U //var/run/docker.sock!
GET /images/json HTTP/1.1!
!
HTTP/1.1 200 OK!
Content-Type: application/json!
Date: Tue, 05 Nov 2013 23:18:09 GMT!
Transfer-Encoding: chunked!
!
16aa!
[{"Repository":"postgres","Tag":.........!

Orange is what I typed.


15 Docker Tips in 5 Minutes

25

11. Graph the dependencies among


your images

15 Docker Tips in 5 Minutes

26

!
# Generate an image dependency diagram!
$ docker images -viz | \!
dot -Tpng -o docker.png!
!
# To see it, run this on the host:!
$ python -m SimpleHTTPServer!
!
# then browse to:!

# http://machinename:8000/docker.png!

15 Docker Tips in 5 Minutes

27

And hope yours doesnt look like this.

15 Docker Tips in 5 Minutes

28

15 Docker Tips in 5 Minutes

29

12. Where does Docker store


everything?

15 Docker Tips in 5 Minutes

30

!
$ sudo su!
# cd /var/lib/docker!
# ls -F!
containers/ graph/ repositories
volumes/!

Explore!
graph means images.
Filesystem layers are in graph/imageid/layer.
15 Docker Tips in 5 Minutes

31

13. Docker source code: Go, Go, Go,


Grabote.

15 Docker Tips in 5 Minutes

32

15 Docker Tips in 5 Minutes

33

commands.go
The CLI.

api.go
The REST API router.

server.go
ImplementaGon of much of the the REST API.

buildle.go
The Dockerle parser.
15 Docker Tips in 5 Minutes

34

14. RUN some daemons, exit the


container. What happens?

15 Docker Tips in 5 Minutes

35

$ cat Dockerfile!
FROM ubuntu:12.04!
MAINTAINER Brian Morearty!
...!
RUN pg_ctl start ...!
!
$ docker run -i -t postgresimage bash!

root@08d363f57161:/# ps aux!
# Doesnt
show postgres daemon!

Dont run a daemon in your Dockerle.


15 Docker Tips in 5 Minutes

36

15. Letting containers talk to each


other

15 Docker Tips in 5 Minutes

37

I saved the best for


last.

15 Docker Tips in 5 Minutes

38

#
$
!
#
#
$

Run a container. Give it a name.!


docker run -d -name loldb loldbimage!

Run another. Link it to the first,!


using an alias.!
docker run -link /loldb:cheez \!
otherimage env!

CHEEZ_PORT=tcp://172.17.0.8:6379!

CHEEZ_PORT_1337_TCP=tcp://172.17.0.8:6379!
CHEEZ_PORT_1337_TCP_ADDR=172.17.0.12!

CHEEZ_PORT_1337_TCP_PORT=6379!
CHEEZ_PORT_1337_TCP_PROTO=tcp!

!

This sets up a bridge. 2nd container needs to


know aliased name (CHEEZ) and port (1337).

15 Docker Tips in 5 Minutes

39

Extracted from my
intro-level
Hands on with
Docker class.

(In partnership
with Docker, Inc.)

Beta class this
Monday, 6-9pm.
handsonwith.com
15 Docker Tips in 5 Minutes

You might also like