15 docker tips in 5 minutes
DESCRIPTION
15 Docker Tips in 5 MinutesTRANSCRIPT
-
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
2
-
You could do this:
But you have to keep assigning IDs. Try this instead:
!$ ID=$(docker run ubuntu echo hello world)!hello world!$ docker commit $ID helloworld!fd08a884dc79!
15 Docker Tips in 5 Minutes
3
-
!$ 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
4
-
2. Why you always want a Dockerle, even if you install everything in the shell
15 Docker Tips in 5 Minutes
5
-
$ 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
6
-
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
7
-
3. Su-su-sudo
15 Docker Tips in 5 Minutes
8
-
TOMATO TOMAHTO
15 Docker Tips in 5 Minutes
9
-
# 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
10
-
4. Take out the garbage
15 Docker Tips in 5 Minutes
11
-
!!$ 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
12
-
5. jq - the gangsta way to parse docker inspects output !
15 Docker Tips in 5 Minutes
13
-
!$ 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
14
-
6. What environment variables does an image have?
15 Docker Tips in 5 Minutes
15
-
!$ 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
16
-
7. RUN vs. CMD instruction
15 Docker Tips in 5 Minutes
17
-
!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
18
-
8. CMD vs. ENTRYPOINT instruction
15 Docker Tips in 5 Minutes
19
-
!$ cat Dockerfile!FROM ubuntu!CMD ["echo"]!!$ docker run \ imagename \ echo hello!hello!!
15 Docker Tips in 5 Minutes
20
!$ cat Dockerfile!FROM ubuntu!ENTRYPOINT ["echo"]!!$ docker run \ imagename \ echo hello!echo hello!!
Overrideable.
Not overrideable.
-
9. Does a Docker container have its own IP address?
15 Docker Tips in 5 Minutes
21
-
!$ 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
22
-
10. Dockers architecture: thin CLI client, REST server daemon over UNIX socket
15 Docker Tips in 5 Minutes
23
-
!# 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
24
-
11. Graph the dependencies among your images
15 Docker Tips in 5 Minutes
25
-
!# 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
26
-
15 Docker Tips in 5 Minutes
27
And hope yours doesnt look like this.
-
15 Docker Tips in 5 Minutes
28
-
12. Where does Docker store everything?
15 Docker Tips in 5 Minutes
29
-
!$ 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
30
-
13. Docker source code: Go, Go, Go, Grabote.
15 Docker Tips in 5 Minutes
31
-
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.
-
14. RUN some daemons, exit the container. What happens?
15 Docker Tips in 5 Minutes
34
-
$ 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
35
-
15. Letting containers talk to each other
15 Docker Tips in 5 Minutes
36
-
15 Docker Tips in 5 Minutes
37
I saved the best for last.
-
# 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
38
-
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
39