Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Docker

2,627 views

Published on

2014/05/09 ~AS Tech Talk~

Published in: Technology
  • Be the first to comment

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

×