Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Dockerize Everything
Search
Thomas Einwaller
May 27, 2015
Technology
3
12k
Dockerize Everything
what is Docker and how can I use it?
Thomas Einwaller
May 27, 2015
Tweet
Share
More Decks by Thomas Einwaller
See All by Thomas Einwaller
Why Slack is not your usual messenger
tompson
0
35k
Dockerize Everything TopConf Tallinn 2015
tompson
0
460
What the Version?
tompson
0
57
Why Podcasts are awesome
tompson
0
2.7k
Other Decks in Technology
See All in Technology
What's Next in OpenShift Q2 CY2025
redhatlivestreaming
1
840
RDRA3.0を知ろう
kanzaki
2
440
mnt_data_とは?ChatGPTコード実行環境を深堀りしてみた
icck
0
210
Cursor Meetup Tokyo
iamshunta
2
800
やさしいClaude Code入門
minorun365
PRO
33
25k
AIに実況させる / AI Streamer
motemen
3
1.4k
Data Hubグループ 紹介資料
sansan33
PRO
0
1.7k
Machine Intelligence for Vision, Language, and Actions
keio_smilab
PRO
0
500
会社紹介資料 / Sansan Company Profile
sansan33
PRO
6
360k
Flutterアプリを⾃然⾔語で操作する
yukisakai1225
0
130
人とAIとの共創を夢見た2か月 #共創AIミートアップ / Co-Creation with Keito-chan
kondoyuko
1
720
Eight Engineering Unit 紹介資料
sansan33
PRO
0
3.2k
Featured
See All Featured
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.6k
GraphQLとの向き合い方2022年版
quramy
46
14k
Code Review Best Practice
trishagee
68
18k
KATA
mclloyd
29
14k
The Invisible Side of Design
smashingmag
299
50k
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
750
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Why Our Code Smells
bkeepers
PRO
336
57k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
1
82
YesSQL, Process and Tooling at Scale
rocio
172
14k
GraphQLの誤解/rethinking-graphql
sonatard
71
11k
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Transcript
Dockerize Everything Thomas Einwaller, troii Software
2008 2013
None
None
None
None
None
Number of Processes ~$ ps ax | wc -l 283
~$ docker run ubuntu ps ax PID TTY STAT TIME COMMAND 1 ? Rs 0:00 ps ax
None
code runtime libraries OS container what is in a container?
ubuntu nginx java tomcat App A App B wordpress website
X “inheritance”
one process per container tomcat mysql war, .properties link container
A container B
immutable
ship the whole environment
How to get started?
Kitematic
None
None
None
Search and Run an Image ~$ docker search -s 10
wordpress NAME DESCRIPTION STARS OFFICIAL wordpress The WordPress rich content management syst... 323 [OK] tutum/wordpress Wordpress Docker image - listens in port 8... 40 ... ~$ docker run wordpress Unable to find image 'wordpress:latest' locally latest: Pulling from wordpress 60fa28093d2e: Pull complete a8f83d6d9aa9: Pull complete d0ca8f539db8: Pull complete ...
How to build my own?
Custom Container ~$ docker run -it ubuntu /bin/bash root:/# root:/#
apt-get install -y mysql-server Reading package lists... Done Building dependency tree Reading state information... Done …
Commit Container ~$ docker ps CONTAINER ID IMAGE COMMAND NAMES
e5a0e59fd3fd ubuntu:latest "/bin/bash" prickly_nobel ~$ docker commit prickly_nobel tom/mysql CONTAINER ID IMAGE COMMAND NAMES e5a0e59fd3fd ubuntu:latest "/bin/bash" prickly_nobel ~$ docker images REPOSITORY TAG IMAGE ID VIRTUAL SIZE tom/mysql latest 86a1fcd53530 512.1 MB ~$ docker run tom/mysql ...
Dockerfile FROM ubuntu MAINTAINER Thomas Einwaller,
[email protected]
RUN apt-get update
&& apt-get -y install apache2 ENV APACHE_RUN_USER www-data ENV APACHE_RUN_GROUP www-data ENV APACHE_LOG_DIR /var/log/apache2 ENV APACHE_LOCK_DIR /var/lock/apache2 ENV APACHE_PID_FILE /var/run/apache2.pid RUN mkdir /var/lock/apache2 EXPOSE 80 CMD ["/usr/sbin/apache2", "-D", "FOREGROUND"]
Docker build ~$ docker build -t tom/apache2 . Sending build
context to Docker daemon 2.048 kB Sending build context to Docker daemon Step 0 : FROM ubuntu ---> bdb87369f343 Step 1 : MAINTAINER Thomas Einwaller,
[email protected]
---> Using cache ---> adcf06d4a78f Step 2 : RUN apt-get update && apt-get -y install apache2 ---> Using cache ---> 5aee61ee1c84 ... Step 9 : EXPOSE 80 ---> Using cache ---> ac985c02bfd6 Step 10 : CMD /usr/sbin/apache2 -D FOREGROUND ---> Running in 0a822e00e190 ---> 89ac6eef066c Successfully built 89ac6eef066c
Docker history ~$ docker history tom/apache2 IMAGE CREATED CREATED BY
SIZE a6b064aec848 2 minutes ago /bin/sh -c #(nop) CMD ["/usr/sbin/apache2" "- 0 B dc0e02dc4d11 2 minutes ago /bin/sh -c #(nop) EXPOSE 80/tcp 0 B 1bc593d23431 2 minutes ago /bin/sh -c mkdir /var/lock/apache2 0 B afdda46774c6 2 minutes ago /bin/sh -c #(nop) ENV APACHE_PID_FILE=/var/ru 0 B 7f1a112bfd2e 2 minutes ago /bin/sh -c #(nop) ENV APACHE_LOCK_DIR=/var/lo 0 B 8a95fc52c646 2 minutes ago /bin/sh -c #(nop) ENV APACHE_LOG_DIR=/var/log 0 Ba32a610ccb8 2 minutes ago /bin/sh -c #(nop) ENV APACHE_RUN_GROUP=www-da 0 B 8083f7e42d6d 2 minutes ago /bin/sh -c #(nop) ENV APACHE_RUN_USER=www-dat 0 B 8cbd4df21d8b 2 minutes ago /bin/sh -c apt-get update && apt-get -y insta 30.63 MB ddfbce728239 2 minutes ago /bin/sh -c #(nop) MAINTAINER Thomas Einwaller 0 B bdb87369f343 5 weeks ago /bin/sh -c #(nop) CMD [/bin/zsh] 0 B ....
Docker push ~$ docker push tom/apache2 Sending image list Pushing
repository tom/apache2 (1 tags) Image 511136ea3c5a already pushed, skipping Image 9fec74352904 already pushed, skipping Image d0955f21bf24 already pushed, skipping ... and pull ~$ docker pull tom/apache2 Unable to find image 'tom/apache2:latest' locally latest: Pulling from tom/apache2 60fa28093d2e: Pull complete a8f83d6d9aa9: Pull complete d0ca8f539db8: Pull complete ...
How to use it?
git repository artifact repository Development Environment Continuous Integration Source Artifact
(.war, .jar, ...) Test/Prod Environment build / deployment pipeline before docker
build / deployment pipeline with docker git repository artifact repository
docker repository Development Environment Continuous Integration Source Artifact (.war, .jar, ...) Continuous Integration Test/Prod Environment Docker Image
Development Environment ~$ docker run -v /Users/tom/website:/website nginx … ~$
docker run -v /Users/tom/code:/code node …
or
Backup Tools ~$ docker run --volumes-from=nexus_data -e SOURCE=/usr/local/sonatype-work -e TARGET=s3://s3-eu-west-1.amazonaws.com/nexus-backup/
-e TARGET_USER=$AWSACCESSKEYID -e TARGET_PASS=$AWSSECRETACCESSKEY duply ~$ docker run --link mysql:db -e BUCKET_NAME=mysql-backup -e AWSACCESSKEYID=$AWSACCESSKEYID -e AWSSECRETACCESSKEY=$AWSSECRETACCESSKEY -e DBNAMES=test -e USERNAME=user -e PASSWORD=password automysqlbackup
Backup Tools ~$ docker run -v /home/tom/development/src:/src groovy //.gvm/groovy/ current/bin/groovy
/src/script.groovy ~$
dexec
Docker machine ~$ docker-machine create --driver virtualbox dev INFO[0001] Downloading
boot2docker.iso to /home/tom/.docker/machine/ INFO[0011] Creating SSH key... INFO[0012] Creating VirtualBox VM... INFO[0019] Starting VirtualBox VM... ... ~$ docker-machine ls NAME ACTIVE DRIVER STATE URL dev * virtualbox Running tcp://192.168.99.103:2376 staging digitalocean Running tcp://104.236.50.118:2376
Docker compose web: build: . links: - db ports: -
"8000:8000" db: image: postgres
docker swarm
None