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
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Thomas Einwaller
May 27, 2015
Technology
12k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Dockerize Everything
what is Docker and how can I use it?
Thomas Einwaller
May 27, 2015
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
550
What the Version?
tompson
0
100
Why Podcasts are awesome
tompson
0
2.8k
Other Decks in Technology
See All in Technology
AIチャットの改善から見えた、良いAI体験とは / What Constitutes a Good AI Experience: Insights from Improving AI Chat
kubode
0
110
アジャイルな経理と Claude Code と経営の未来
kawaguti
PRO
3
180
複数のSONiCディストリビューションを触りながら比較してみた
sonic
0
110
脱SaaS!FDEを支えるプロビジョニングと分離設計
knih
0
260
40代で“やっとエンジニアになれた”――閉じた学びを開き、空の青さを知る / 20260628 Naoki Takahashi
shift_evolve
PRO
4
640
SONiCの統計情報を取得したい
sonic
0
290
iOS アプリの「これって不具合ですか?」を AI に調べてもらう
miichan
0
140
人材育成分科会.pdf
_awache
4
310
インシデントレスポンス演習 I / Incident Response Exercise I
ks91
PRO
0
110
コミットの「なぜ」を読む
ota1022
0
110
AI時代のコスト管理を考えよう〜明日から使える実践AWSノウハウ~
yoshimi0227
0
800
スタートアップにAmazon EKSは早すぎる? マルチプロダクト戦略を加速する Platform Engineeringの実践 / Is Amazon EKS Too Soon for Startups? Practical Platform Engineering to Accelerate a Multi-Product Strategy
elmodev09
1
1.6k
Featured
See All Featured
Visualization
eitanlees
152
17k
Optimizing for Happiness
mojombo
378
71k
Making Projects Easy
brettharned
120
6.7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.2k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4k
Building an army of robots
kneath
306
46k
GitHub's CSS Performance
jonrohan
1033
470k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Design in an AI World
tapps
1
250
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
200
Balancing Empowerment & Direction
lara
6
1.2k
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