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
340
What the Version?
tompson
0
49
Why Podcasts are awesome
tompson
0
2.7k
Other Decks in Technology
See All in Technology
本当のAWS基礎
toru_kubota
0
480
アクセス制御にまつわる改善 / Improving access control
itkq
0
510
SPI原点回帰論:事業課題とFour Keysの結節点を見出す実践的ソフトウェアプロセス改善 / DevOpsDays Tokyo 2024
visional_engineering_and_design
4
1.9k
MLOpsの「壁」を乗り越える、LINEヤフーの Data Quality as Code
lycorptech_jp
PRO
4
300
プラットフォームってつくることより計測することが重要なんじゃないかという話 / Platform Engineering Meetup #8
taishin
1
340
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
120
Azure犬駆動開発の記録/GlobalAzureFukuoka2024_20240420
nina01
1
200
現代CSSフレームワークの内部実装とその仕組み
poteboy
8
3.5k
MapLibreとAmazon Location Service
dayjournal
1
140
マルチアカウント環境への発見的統制の導入
ch1aki
1
1.3k
20240416_devopsdaystokyo
kzkmaeda
1
210
Algyan イベント振り返り
linyixian
0
210
Featured
See All Featured
RailsConf 2023
tenderlove
3
540
Scaling GitHub
holman
457
140k
GraphQLとの向き合い方2022年版
quramy
32
12k
Building a Scalable Design System with Sketch
lauravandoore
456
32k
Building Adaptive Systems
keathley
31
1.9k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
226
51k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
14
1.5k
Code Review Best Practice
trishagee
55
15k
A designer walks into a library…
pauljervisheath
200
23k
Put a Button on it: Removing Barriers to Going Fast.
kastner
58
3k
Bootstrapping a Software Product
garrettdimon
PRO
302
110k
Designing on Purpose - Digital PM Summit 2013
jponch
110
6.5k
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