Docker
@koudaiii	

2014.05.09
About me
Sakabe kodai
• @koudaiii	

• github.com/koudaiii	

• qiita.com/koudaiii	

• koudaiii.hatenablog.com	

• Community	

• TISM...
Docker
an open source project to pack, ship and run
any application as a lightweight container
www.docker.io
Container
Docker is a shipping container system for code
Static website! Web frontend !User DB! Queue! Analytics DB!
Devel...
Container vs. VMs
Linuxのkernel 3.8よりもつ機能
OSレベルの仮想化実現
App#
A#
#
#
#
#
#
#
Hypervisor#(Type#2)#
Host#OS#
Server#
#
#
#
#
Gue...
for realizing container
• User Namespace 名前空間
• プロセスをグループ化して隔離
• 独立したuid/gid,Networkを作る
• cgroup リソース制限
• CPU,Memory,Disk,...
Benefits of Container
• 起動しているOSは一つ
• 仮想マシンを起動しているわけではなく、HostOSから
見るとプロセスを立ち上げているだけなので起動が早い
• ハードウェアの仮想化が不要
• 各仮想マシンのようにSys...
Disadvantages of Container
• kernelの操作を扱うことが出来ない
• 異なるOSを動かすことが出来ない
• kernel 3.8以上である
Install boot2docker
for Mac OS X
#virtualbox install	
https://www.virtualbox.org/wiki/Downloads	
	
#boot2docker install	
h...
Shared Folder
Mac and Container
##https://github.com/boot2docker/boot2docker/pull/284	
##Download https://dl.dropboxuserco...
簡単なUse Cases
• 開発環境の配布
• CI(Jenkins+Docker)
• 自分のPaaSによる開発
• デモやトライアル(SaaS)
開発環境の配布
• チームにJoinした人にすぐに提供できる
• 「俺の環境では、再現しない」を撲滅←
CI(Jenkins+Docker)
• Infrastructure as codeで秘伝のAMI、スナップショット、サー
バーをなくす。
• サーバーのバージョン管理
• DockerとJenkinsとServerspecでミドルウェアのバ...
Infrastructure as code
• Orchestration
• アプリケーションのデプロイ 例:Capistrano,buildpack
• Configuration
• ミドルウェアレベルの設定 例:Chef, Puppet...
Infrastructure as code
commitにより、設定情報だけではなく、なんのためにcommitしたかを追える
githubでのDockerfile編集時のcommitに対するコメントでハマった部分などの記載
タグにより、アークテ...
自分のPaaSによる開発
• 自分の開発担当機能について、確認したいと
きにHerokuのような環境
• git push docker-app master でDocker起動
• 自分自身のrepositoryをもつ
デモやトライアル(SaaS)
• 本番でのDocker使用に向けて、まずはデモ用、トライア
ル用にDockerを使う
• データの永続性、スキーマ変更がないものはDockerへ
移行
• (ゆくゆくはimmutable infrastractu...
今回試したもの
自分のPaaSによる開発
Client
$ git remote add hoge /Users/koudaiii/Project/example-paas/docker-paas-0011	
$ git push hoge master	
Counting objec...
Docker側での動き
$ docker attach <ContainerID>	
-----> Using Ruby version: ruby-2.0.0	
-----> Installing dependencies using 1.5...
残った課題
• 今回は簡単なsinatraアプリのみでしか動かせてない
• 現状だとDokkuでも良かったけど最終的にサーバー側までやは
り設定したい
• AllInOneコンテナよりスキーマ毎に複数のコンテナで分けた
ほうがいい
• Dock...
Reference
• Docker introduction
• http://slidesha.re/1hNzIX6
• LinuxContainer introduction
• http://bit.ly/1ivylm5
• Linux...
Upcoming SlideShare
Loading in …5
×

Docker

2,569 views

Published on

2014/05/09 ~AS Tech Talk~

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,569
On SlideShare
0
From Embeds
0
Number of Embeds
66
Actions
Shares
0
Downloads
19
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

Docker

  1. 1. Docker @koudaiii 2014.05.09
  2. 2. About me
  3. 3. Sakabe kodai • @koudaiii • github.com/koudaiii • qiita.com/koudaiii • koudaiii.hatenablog.com • Community • TISMatsuri • Jaws-ug 千葉 • Devlove甲子園
  4. 4. Docker
  5. 5. an open source project to pack, ship and run any application as a lightweight container www.docker.io
  6. 6. Container Docker is a shipping container system for code Static website! Web frontend !User DB! Queue! Analytics DB! Development VM! QA server! Public Cloud! Contributor’s laptop! Mul$plicity*of*Stacks* Mul$plicity*of* hardware* environments* Production Cluster! Customer Data Center! Do*services*and*apps* interact* appropriately?* Can*I*migrate* smoothly*and*quickly* …that can be manipulated using standard operations and run consistently on virtually any hardware platform ! An engine that enables any payload to be encapsulated as a lightweight, portable, self-sufficient container…!
  7. 7. Container vs. VMs Linuxのkernel 3.8よりもつ機能 OSレベルの仮想化実現 App# A# # # # # # # Hypervisor#(Type#2)# Host#OS# Server# # # # # Guest# OS# # # # # # # # # Bins/# Libs# # # # # App# A’# # # # # # # # # # # Guest# OS# # # # # # # # # Bins/# Libs# # # # # App# B# # # # # # # # # # # Guest# OS# # # # # # # # # Bins/# Libs# # # # # App#A’# Docker## Host#OS# Server# # # # # Bins/Libs# # # # # App#A# # # # # Bins/Libs# # # # # App#B# App#B’# App#B’# App#B’# VM# Container# Containers#are#isolated,# but#share#OS#and,#where# appropriate,#bins/libraries## # # # Guest# OS# # # # # # # # # Guest# OS# # # # # …result#is#significantly#faster#deployment,## much#less#overhead,#easier#migraLon,# faster#restart#
  8. 8. for realizing container • User Namespace 名前空間 • プロセスをグループ化して隔離 • 独立したuid/gid,Networkを作る • cgroup リソース制限 • CPU,Memory,Disk,帯域を独立して使用 • AUFS イメージを差分管理 • UnionFSの差分管理より、レイヤの積み重ねでイメージとして構築 • 構築済みのレイヤはキャッシュとして利用されるので、何度でも高速にオペレーショ ン可能
  9. 9. Benefits of Container • 起動しているOSは一つ • 仮想マシンを起動しているわけではなく、HostOSから 見るとプロセスを立ち上げているだけなので起動が早い • ハードウェアの仮想化が不要 • 各仮想マシンのようにSystemを動かす必要が無いた め、Containerの中で極論httpdのみ動かしているといっ たことができる
  10. 10. Disadvantages of Container • kernelの操作を扱うことが出来ない • 異なるOSを動かすことが出来ない • kernel 3.8以上である
  11. 11. Install boot2docker for Mac OS X #virtualbox install https://www.virtualbox.org/wiki/Downloads #boot2docker install https://github.com/boot2docker/boot2docker $ brew update $ brew install boot2docker ! #How To Use Docker On Mac OS X http://docs.docker.io/en/latest/installation/mac/ ! #Use Docker Hello word $ docker run ubuntu /bin/echo hello world
  12. 12. Shared Folder Mac and Container ##https://github.com/boot2docker/boot2docker/pull/284 ##Download https://dl.dropboxusercontent.com/u/12014139/boot2docker.iso ! $ boot2docker stop ! $ vim $HOME/.boot2docker/profile BOOT2DOCKER_ISO=~/path/to/boot2docker.iso ! $ VBoxManage sharedfolder add boot2docker-vm -name home -hostpath $HOME $ boot2docker up $ boot2docker ssh "sudo modprobe vboxsf && mkdir -p $HOME && sudo mount -t vboxsf home $HOME” ! $ docker run -i -t -v ~/Documents/hoge:~/hoge hoge/moge /bin/bash !
  13. 13. 簡単なUse Cases • 開発環境の配布 • CI(Jenkins+Docker) • 自分のPaaSによる開発 • デモやトライアル(SaaS)
  14. 14. 開発環境の配布 • チームにJoinした人にすぐに提供できる • 「俺の環境では、再現しない」を撲滅←
  15. 15. CI(Jenkins+Docker) • Infrastructure as codeで秘伝のAMI、スナップショット、サー バーをなくす。 • サーバーのバージョン管理 • DockerとJenkinsとServerspecでミドルウェアのバージョンアッ プのテストを回すことでバージョンの追従 • Chef/Puppet/AnsibleよりはShellライクで手順書と余り変わらな いので入りやすい • 例: RUN apt-get install hoge
  16. 16. Infrastructure as code • Orchestration • アプリケーションのデプロイ 例:Capistrano,buildpack • Configuration • ミドルウェアレベルの設定 例:Chef, Puppet • Bootstrapping • OS のインストールにあたる領域 例:Docker, Vagrant, Packer
  17. 17. Infrastructure as code commitにより、設定情報だけではなく、なんのためにcommitしたかを追える githubでのDockerfile編集時のcommitに対するコメントでハマった部分などの記載 タグにより、アークテクチャーのバージョン管理
  18. 18. 自分のPaaSによる開発 • 自分の開発担当機能について、確認したいと きにHerokuのような環境 • git push docker-app master でDocker起動 • 自分自身のrepositoryをもつ
  19. 19. デモやトライアル(SaaS) • 本番でのDocker使用に向けて、まずはデモ用、トライア ル用にDockerを使う • データの永続性、スキーマ変更がないものはDockerへ 移行 • (ゆくゆくはimmutable infrastractureへ • DBのスキーマ変更、データはどうするか?ここの課題 が残っている
  20. 20. 今回試したもの 自分のPaaSによる開発
  21. 21. Client $ git remote add hoge /Users/koudaiii/Project/example-paas/docker-paas-0011 $ git push hoge master Counting objects: 15, done. Delta compression using up to 4 threads. Compressing objects: 100% (10/10), done. Writing objects: 100% (15/15), 1.12 KiB | 0 bytes/s, done. Total 15 (delta 4), reused 0 (delta 0) remote: -----> Fetching application source remote: -----> Building new container ... remote: -----> Starting Application remote: URL: http://192.168.56.101:50018/ To /Users/koudaiii/Project/example-paas/docker-paas-0011 * [new branch] master -> master
  22. 22. Docker側での動き $ docker attach <ContainerID> -----> Using Ruby version: ruby-2.0.0 -----> Installing dependencies using 1.5.2 New app detected loading default bundler cache Running: bundle install --without development:test --path vendor/bundle --binstubs vendor/bundle/bin -j4 --deployment Fetching gem metadata from https://rubygems.org/.......... Fetching additional metadata from https://rubygems.org/.. Using rack (1.5.2) Using tilt (1.4.1) Using bundler (1.5.2) Installing rack-protection (1.5.3) Installing sinatra (1.4.5) Your bundle is complete! Gems in the groups development and test were not installed. It was installed into ./vendor/bundle Bundle completed (15.09s) Cleaning up the bundler cache. -----> WARNINGS: You have not declared a Ruby version in your Gemfile. To set your Ruby version add this line to your Gemfile: ruby '2.0.0' # See https://devcenter.heroku.com/articles/ruby-versions for more information. No Procfile detected, using the default web server (webrick)
  23. 23. 残った課題 • 今回は簡単なsinatraアプリのみでしか動かせてない • 現状だとDokkuでも良かったけど最終的にサーバー側までやは り設定したい • AllInOneコンテナよりスキーマ毎に複数のコンテナで分けた ほうがいい • DockerでConfigurationを賄うとShellの一発スクリプトと同じ
  24. 24. Reference • Docker introduction • http://slidesha.re/1hNzIX6 • LinuxContainer introduction • http://bit.ly/1ivylm5 • Linux 3.8 の User Namespace(1)-(4) • http://bit.ly/1hNAYK3 • Red hat Linux リソース管理ガイド • http://red.ht/1folC4g • docker-pass-example • https://github.com/naoya/docker-paas-example • Dockerと継続的インテグレーション • https://github.com/ydnjp/docker-continuous-integration-workflow

×