Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
-
Upload
masahiro-nagano -
Category
Internet
-
view
22.176 -
download
7
description
Transcript of Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014
![Page 1: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/1.jpg)
Docker で遊んでみよっかーYAPC::Asia Tokyo 2014
Masahiro Nagano / @kazeburo
![Page 2: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/2.jpg)
Me• 長野雅広 Masahiro Nagano
• @kazeburo
• Operations Engineer / Site Reliability
• LINE Corp.
• YAPC::Asia 2013 Tokyo ベストトーク賞3位
• ISUCON3 優勝
![Page 3: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/3.jpg)
ISUCON4
![Page 4: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/4.jpg)
ISUCON4かかってこいや!!1
![Page 5: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/5.jpg)
調子乗りました(_ _)
![Page 6: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/6.jpg)
本題
![Page 7: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/7.jpg)
その前に
![Page 8: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/8.jpg)
質問
![Page 9: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/9.jpg)
(1) Dockerを使った事がある方?
• Yes
• No
![Page 10: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/10.jpg)
(2) Dockerをどのplatform上で使っていますか?
• MacOS X (boot2docker,仮想マシン含む)
• Linux
• Windows
![Page 11: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/11.jpg)
Docker で遊んでみよっかー
![Page 12: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/12.jpg)
「遊ぶ」というタイトルにした理由• Dockerはまだ若い技術。しかし、大きな可能性がある技術であり、数えきれないほどの周辺ツールがリリースされている
• つまり、ベストプラクティスが定まっていない• 新しい技術に対して「使う」「使わない」の2つのスタンスしかないことはない
• 手元で「遊んでみる」ことから始めよう
![Page 13: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/13.jpg)
真剣に「遊ぶ」
• 基礎を身につける• 実践的なノウハウを貯める
![Page 14: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/14.jpg)
今日の内容• Docker の基本
• Docker!leとDockerイメージのビルド
• DockerでPerlを使う
• Dockerで自動化
• DockerでWebアプリケーション
![Page 15: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/15.jpg)
Docker の基本
![Page 16: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/16.jpg)
Docker とは• Docker (旧dotcloud) 社が開発したコンテナ管理ツール
![Page 17: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/17.jpg)
Docker とは• Docker (旧dotcloud) 社が開発したコンテナ管理ツール
![Page 18: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/18.jpg)
Docker とは
![Page 19: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/19.jpg)
Docker とは• アプリケーションの開発・配布・実行のためのオープンなプラットフォーム
• Dockerを使ってパッケージング(Dockerized)されたアプリケーションはポータビリティが高く、Mac
OS Xの開発環境、Linux上のQA環境、オンプレミス・クラウド上の本番環境など、(Dockerがサポートされている環境なら)どこでも実行が可能
![Page 20: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/20.jpg)
Docker プラットフォームDocker Hub
Docker!le DockerEngine
アプリケーションの共有と配布
アプリケーションのパッケージング
アプリケーションの実行
コンテナ技術
開発環境 クラウド オンプレミス
![Page 21: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/21.jpg)
コンテナ とは• アプリケーションを実行する環境をHostOS
から隔離させ、それぞれに異なるリソースを提供する。その隔離されたプロセスの組を「コンテナ」という
• アプリケーション毎に隔離された実行環境を用意する手段としてはVM(仮想マシン)もある
![Page 22: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/22.jpg)
Server
Host OS
Hypervisor
VM
Guest OS
Apps
VM
Bin/Libs
VM
Guest OS
Apps
Bin/Libs
VM
Guest OS
Apps
Bin/Libs
Server
Host OS
Docker Engine
Container
Apps
Bin/Libs
Container
Apps
Bin/Libs
Container
Apps
Bin/Libs
VMとコンテナ
Container
同じ独立性を確保しながら、より少ないリソースで動作する
kernelは共有
![Page 23: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/23.jpg)
コンテナの動作
Server
Host OS
Docker Engine
ContainerPr
oces
sContainer
Proc
ess
proc
ess A
proc
ess B
proc
ess C
Docker EngineがHost OSから各リソースを隔離する
Proc
ess
![Page 24: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/24.jpg)
コンテナの動作隔離されるリソース
• ファイルシステム• ネットワーク・ホスト名• プロセステーブル• ユーザ権限• CPU・メモリなどのリソース制御
* Linux Kernelの機能を利用
![Page 25: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/25.jpg)
Docker のインストール(Mac OS Xの場合)
![Page 26: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/26.jpg)
Docker のインストール
1) boot2dockerを導入し、Mac上のdocker
コマンドからAPIを経由して操作
2) Vagrantで任意のLinuxディストリビューションを入れる
Linux Kernel が必要なので、Virtulbox, VMware
などで仮想マシンを起動する必要がある
![Page 27: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/27.jpg)
boot2docker• Dockerの起動に特化した軽量Linuxディストリビューション
![Page 28: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/28.jpg)
boot2docker
Container
Proc
ess
Container
Proc
ess
Proc
ess
Mac OS X
DockerCommand VirtualBox
boot2docker (linux)
Docker DaemonTCP 2375
APIを使ってDockerを制御
Mac用DockerはAPIを呼ぶように作られている
![Page 29: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/29.jpg)
Vagrant• 仮想環境構築ツール。Vagrant!leと言われる設定ファイルを使うことで、自動的に仮想環境の構築ができる
![Page 30: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/30.jpg)
boot2docker vs. Vagrantpros cons
boot2docker・インストールが楽・Mac上からDockerを透過的に扱える
・ファイル共有に難あり
Vagrant・ファイル共有がしやすく
柔軟に設定可能・Guest OSの機能を活用
・Guest OSにログインする必要あり
* 迷いにくい Vagrant を使っていきます
![Page 31: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/31.jpg)
Install VirtualBox & Vagrant
このあたりからダウンロードしてください
![Page 32: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/32.jpg)
VagrantでDocker 手作業編
$ mkdir vagrant-docker$ cd vagrant-docker$ vagrant init chef/centos-6.5$ vagrant up$ vagrant ssh
Mac OS X
![Page 33: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/33.jpg)
VagrantでDocker 手作業編
$ sudo yum install -y http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm$ sudo yum install -y docker-io$ sudo service docker start$ sudo /sbin/chkconfig docker on$ sudo usermod -a -G docker vagrant# ログインしなおして
$ docker -vDocker version 1.1.2, build d84a070/1.1.2
Guest OS
![Page 34: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/34.jpg)
VagrantでDocker 自動化編$ cat Vagrantfile$script = <<EOFyum install -y http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmyum install -y docker-io/sbin/chkconfig docker onusermod -a -G docker vagrantEOFVagrant.configure(2) do |config| config.vm.box = "chef/centos-6.5" config.vm.provision "shell", inline: $scriptend$ vagrant up
Mac OS X
初回起動時に自動で実行
![Page 35: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/35.jpg)
“Hello World”
$ docker run ubuntu:14.04 echo Hello WorldUnable to find image 'ubuntu:14.04' locallyPulling repository ubuntuc4ff7513909d: Download complete 511136ea3c5a: Download complete ...cc58e55aa5a5: Download complete Hello World$
Guest OS起動するベースDockerイメージ
![Page 36: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/36.jpg)
bash で入ってみる$ docker run -i -t ubuntu:14.04 bashroot@0840910014be:/# cat /etc/lsb-release | grep DESCRIPTIONDISTRIB_DESCRIPTION="Ubuntu 14.04.1 LTS"root@0840910014be:/# exit$
Guest OSstdinの維持とttyの割り当て
![Page 37: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/37.jpg)
コンテナのライフタイム
• OSではなくプロセス
• プロセスの終了でコンテナが終了する• ファイルシステムへの変更も破棄される
time
`echo Hello World`コンテナ起動プロセス終了コンテナも終了
“揮発性のあるコンテナ”
![Page 38: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/38.jpg)
揮発性の確認$ docker run -i -t ubuntu:14.04 bashroot@0840910014be:/# echo “hello world” > /tmp/fooroot@0840910014be:/# exitexit$ docker run -i -t ubuntu:14.04 bashroot@0840910014be:/# ls -l /tmp/fools: cannot access /tmp/foo: No such file or directory
Guest OS
time`bash`
ファイルシステム破棄echo > /tmp
`bash`
新しいコンテナ!
![Page 39: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/39.jpg)
Docker の特徴まとめ
• コンテナ技術を活用したアプリケーションの配布・実行のプラットフォーム
• 揮発性のあるコンテナ• Docker!leと階層化イメージ
次の話題
![Page 40: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/40.jpg)
今日の内容• Docker の基本
• Docker!leとDockerイメージのビルド
• DockerでPerlを使う
• Dockerで自動化
• DockerでWebアプリケーション
![Page 41: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/41.jpg)
Docker!leとDockerイメージのビルド
![Page 42: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/42.jpg)
Docker!le とは• Dockerでコンテナを起動する際のイメージを作る手続きを記したファイル
![Page 43: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/43.jpg)
Docker!le
FROM centos:centos6MAINTAINER Masahiro Nagano <[email protected]>
RUN yum install -y http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpmRUN yum install -y sl
CMD sl
Docker!le元となるイメージ
build時に実行するコマンド
docker run時に実行するコマンド
![Page 44: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/44.jpg)
Dockerイメージの作成 #0
$ lsDockerfile Vagrantfile$ vagrant ssh
Mac OS X
$ cd /vagrant$ lsDockerfile Vagrantfile$ docker build -t localdev/sl .
Guest OS
自動でGuestOSにマウントされる
イメージに付けるTag名
![Page 45: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/45.jpg)
Dockerイメージの作成 #1
![Page 46: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/46.jpg)
Dockerイメージの作成 #2
![Page 47: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/47.jpg)
docker build ログ$ docker build -t localdev/sl .Step 0 : FROM centos:centos6 Step 1 : MAINTAINER Masahiro Nagano <[email protected]>Step 2 : RUN yum install -y http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm ---> Running in 2207ff8a8f8c...Step 3 : RUN yum install -y sl...Step 4 : CMD sl ---> Running in 65df9252f6ff ---> a8d304eb9f7cRemoving intermediate container 65df9252f6ffSuccessfully built a8d304eb9f7c$
Guest OS
![Page 48: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/48.jpg)
docker build とイメージの作成
FROM centos:centos6
MAINTAINER Masahiro Nagano
RUN yum install -y epel-
release-6-8.noarch.rpm
RUN yum install -y sl
CMD sl
Docker!le
centos6
ファイルシステムの変更点差分イメージを重ねて行く
Dockerはaufs、device-mapper、brtfsなどを使い、差分ファイルシステムを実現している
![Page 49: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/49.jpg)
docker build とイメージの作成
FROM centos:centos6
MAINTAINER Masahiro Nagano
RUN yum install -y epel-
release-6-8.noarch.rpm
RUN yum install -y sl
CMD sl
Docker!le
centos6
epel
ファイルシステムの変更点差分イメージを重ねて行く
Dockerはaufs、device-mapper、brtfsなどを使い、差分ファイルシステムを実現している
![Page 50: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/50.jpg)
docker build とイメージの作成
FROM centos:centos6
MAINTAINER Masahiro Nagano
RUN yum install -y epel-
release-6-8.noarch.rpm
RUN yum install -y sl
CMD sl
Docker!le
centos6
epel
sl
ファイルシステムの変更点差分イメージを重ねて行く
Dockerはaufs、device-mapper、brtfsなどを使い、差分ファイルシステムを実現している
![Page 51: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/51.jpg)
docker build とイメージの作成
FROM centos:centos6
MAINTAINER Masahiro Nagano
RUN yum install -y epel-
release-6-8.noarch.rpm
RUN yum install -y sl
CMD sl
Docker!le
centos6
epel
sl
ファイルシステムの変更点差分イメージを重ねて行く
CMD
Dockerはaufs、device-mapper、brtfsなどを使い、差分ファイルシステムを実現している
![Page 52: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/52.jpg)
差分イメージの枝構造FROM centos:centos6
RUN yum install -y epel.rpm
RUN yum install -y sl
CMD sl
centos6base
epel
sl
CMD
![Page 53: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/53.jpg)
差分イメージの枝構造FROM centos:centos6
RUN yum install -y epel.rpm
RUN yum install -y sl
CMD sl
FROM centos:centos6
RUN yum install -y epel.rpm
RUN yum install -y fortune
CMD fortune
centos6base
epel
sl
CMD
![Page 54: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/54.jpg)
差分イメージの枝構造FROM centos:centos6
RUN yum install -y epel.rpm
RUN yum install -y sl
CMD sl
FROM centos:centos6
RUN yum install -y epel.rpm
RUN yum install -y fortune
CMD fortune
centos6base
epel
sl
CMD
![Page 55: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/55.jpg)
差分イメージの枝構造FROM centos:centos6
RUN yum install -y epel.rpm
RUN yum install -y sl
CMD sl
FROM centos:centos6
RUN yum install -y epel.rpm
RUN yum install -y fortune
CMD fortune
centos6base
epel
sl
Docker!leに変更を加えるとそこから枝が分かれる。
幹は共有する
CMD
![Page 56: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/56.jpg)
差分イメージの枝構造FROM centos:centos6
RUN yum install -y epel.rpm
RUN yum install -y sl
CMD sl
FROM centos:centos6
RUN yum install -y epel.rpm
RUN yum install -y fortune
CMD fortune
centos6base
epel
sl fortune
Docker!leに変更を加えるとそこから枝が分かれる。
幹は共有する
CMD CMD
![Page 57: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/57.jpg)
差分イメージの利点• イメージをネットワーク転送する際に差分のみの転送することで、通信にかかる時間を減らす
• ビルド時に変更点がない箇所の再ビルドを行わずに済み、効率がよい
docker build --no-cache で強制再ビルドできる
![Page 58: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/58.jpg)
Docker!leのよく使うコマンド
![Page 59: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/59.jpg)
“FROM”ベースDockerイメージの指定
FROM <name>:<tag>Docker!le
ベースとなるDockerイメージ名tagを省略すると、latestを使用
![Page 60: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/60.jpg)
“RUN”コマンドの実行
RUN command args argsRUN [“command”,”args”,”args”]
Docker!le
上は [“bash”, ”-c”, “command args args”]
RUN curl -L http://cpanmin.us/ | perl - -n App::cpanminusDocker!le
![Page 61: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/61.jpg)
“COPY”HostOSからコンテナへのファイルコピー
COPY src destDocker!le
![Page 62: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/62.jpg)
“COPY”HostOSからコンテナへのファイルコピー
COPY src destDocker!le
COPY ../src destDocker!le
![Page 63: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/63.jpg)
“COPY”HostOSからコンテナへのファイルコピー
COPY src destDocker!le
COPY ../src destDocker!le
docker build時にDocker!leのあるディレクトリを一時的に領域にコピーしてからビルド開始するのでディレクトリをさかのぼることはできない
![Page 64: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/64.jpg)
“COPY”HostOSからコンテナへのファイルコピー
FROM centos:centos6
COPY README.md /opt/README.md
RUN yum install -y sl
CMD sl
centos6base
COPY
sl
CMD
$ touch README.md
$ docker build .
![Page 65: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/65.jpg)
“COPY”HostOSからコンテナへのファイルコピー
FROM centos:centos6
COPY README.md /opt/README.md
RUN yum install -y sl
CMD sl
centos6base
COPY
sl
CMD
$ touch README.md
$ docker build .
![Page 66: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/66.jpg)
“COPY”HostOSからコンテナへのファイルコピー
FROM centos:centos6
COPY README.md /opt/README.md
RUN yum install -y sl
CMD sl
centos6base
COPY
sl sl’
CMD CMD’
$ touch README.md
$ docker build .
![Page 67: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/67.jpg)
“ADD”
![Page 68: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/68.jpg)
“ADD”COPYより前からあるコマンド
URIを指定できたり、tarファイルを自動解凍できる
必要なければ使わない方がよい
![Page 69: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/69.jpg)
“ENV”環境変数
ENV PLACK_ENV productionENV PATH $PATH:/opt/local/perl-5.20/bin
Docker!le
ENV KEY NAMEDocker!le
変数も使用できる
![Page 70: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/70.jpg)
“CMD”docker run時に起動するコマンド
CMD command args argsDocker!le
CMD [“command”,”args”,”args”]
上は [“bash”, ”-c”, “command args args”] “RUN” と一緒
![Page 71: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/71.jpg)
“EXPOSE”コンテナ内のプロセスがListenするポート
EXPORT PORT_NUMDocker!le
EXPORT 11211CMD memcached -p 11211 -u nobody -m 1024 -c 100000
Docker!le
docker run -p 22122:11211 localdev/memcached
Host側のPort
コンテナのPort
![Page 72: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/72.jpg)
Docker!le Reference
https://docs.docker.com/reference/builder/
![Page 73: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/73.jpg)
今日の内容• Docker の基本
• Docker!leとDockerイメージのビルド
• DockerでPerlを使う
• Dockerで自動化
• DockerでWebアプリケーション
![Page 74: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/74.jpg)
DockerでPerlを使う
![Page 75: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/75.jpg)
System Perl$ docker run -i -t ubuntu:14.04 bashroot@8ac58f29a17a:/# perl -v
This is perl 5, version 18, subversion 2 (v5.18.2) built for x86_64-linux-gnu-thread-multi(with 41 registered patches, see perl -V for more detail)
Copyright 1987-2013, Larry Wall
Perl may be copied only under the terms of either the Artistic License or theGNU General Public License, which may be found in the Perl 5 source kit.
Complete documentation for Perl, including FAQ lists, should be found onthis system using "man perl" or "perldoc perl". If you have access to theInternet, point your browser at http://www.perl.org/, the Perl Home Page.
root@8ac58f29a17a:/#
Guest OS
ubuntuの場合
![Page 76: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/76.jpg)
System Perl$ docker run -i -t centos:centos6 bash
Guest OS
CentOSの場合
![Page 77: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/77.jpg)
System Perl$ docker run -i -t centos:centos6 bashbash-4.1# perl -v
Guest OS
CentOSの場合
![Page 78: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/78.jpg)
System Perl$ docker run -i -t centos:centos6 bashbash-4.1# perl -vbash: perl: command not foundbash-4.1#
Guest OS
CentOSの場合
CentOSはイメージサイズを小さくするために perl は削られている!
![Page 79: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/79.jpg)
Perlの入ったイメージを使う
![Page 80: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/80.jpg)
registry.hub.docker.com
Perlで検索!
![Page 81: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/81.jpg)
registry.hub.docker.com
53件
![Page 82: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/82.jpg)
registry.hub.docker.com
53件
どれを使えば良いんだろう~
![Page 83: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/83.jpg)
Dockerイメージを選ぶ基準• official repository
• Docker!leが公開されている
• Description、Docker!leをみてニーズを満たしているかどうか確認する
• Automated build repository を利用している
![Page 84: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/84.jpg)
Automated build repository
Dockerfile
push
![Page 85: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/85.jpg)
Automated build repository
Dockerfile
push
webhook
![Page 86: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/86.jpg)
Automated build repository
Dockerfile
push
webhook docker build
![Page 87: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/87.jpg)
Automated build repository
Dockerfile
push
webhook docker build
push
![Page 88: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/88.jpg)
Automated build repository
Dockerfile
push
webhook docker build
pushbuildの過程に人の手が入らない
![Page 89: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/89.jpg)
Dockerイメージを選ぶ基準
![Page 90: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/90.jpg)
Dockerイメージを選ぶ基準
automated build
Docker!le
github repository
![Page 91: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/91.jpg)
おすすめ Docker イメージ
• perl
• jmmills/plenv
• kazeburo/perl
• 自分で作る
![Page 92: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/92.jpg)
kazeburo/perl の使い方$ docker run -i -t kazeburo/perl:v5.18 perl -vThis is perl 5, version 18, subversion 1 (v5.18.1) built for x86_64-linux
Copyright 1987-2013, Larry Wall..$
Guest OS
![Page 93: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/93.jpg)
kazeburo/perl の使い方
FROM kazeburo/perl:v5.18RUN cpanm -n PlackCMD plackup -v
Docker!le
cpanmも導入済み
$ docker build -t localdev/perl .$ docker run localdev/perl Plack 1.0031$
GuestOS
![Page 94: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/94.jpg)
今日の内容• Docker の基本
• Docker!leとDockerイメージのビルド
• DockerでPerlを使う
• Dockerで自動化
• DockerでWebアプリケーション
![Page 95: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/95.jpg)
Docker で自動化
![Page 96: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/96.jpg)
Docker の主な利用法
(Web)アプリケーションの実行≒
![Page 97: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/97.jpg)
Docker の活用例速い起動速度と揮発性を利用
http://blog.linknode.net/article/1404955273
Docker コンテナで MySQL を使ったテストの高速化
Docker を用いた rpm / deb パッケージ作成の継続的インテグレーションhttp://yuuki.hatenablog.com/entry/
docker-package-ci
アプリケーションだけじゃない
![Page 98: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/98.jpg)
Docker を利用したperl-buildスクリプトのfatpack
Docker の活用例速い起動速度と揮発性を利用
![Page 99: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/99.jpg)
fatpack• 依存モジュールをすべてひとつのscript
!leにまとめ、配布しやすくする
• App::FatPacker が使われる
• cpamn でも使用
![Page 100: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/100.jpg)
perl-build• tokuhiromによるPerlをビルドするためのユーティリティモジュール・スクリプト
• ダウンロードとビルドを面倒見てくれる• plenvやxbuildで利用されている
• co-maintainerやってます
![Page 101: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/101.jpg)
perl-build 使い方
$ curl -s https://raw.githubusercontent.com/tokuhirom/Perl-Build/master/perl-build | perl - 5.20.0 ~/local/perl-5.20
shell
依存モジュールのインストールなく使える
![Page 102: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/102.jpg)
fatpackの手順• サポートしたい一番古いperlを用意
perl-buildでは “5.8.5”
• ExtUtils::MakeMaker のアップデートperl-5.12以前なら “6.56” をいれる
• cpanm, App::FatPacker をインストール
• 依存モジュールのインストール・アップデート
• fatpack
![Page 103: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/103.jpg)
fatpackの手順• サポートしたい一番古いperlを用意
perl-buildでは “5.8.5”
• ExtUtils::MakeMaker のアップデートperl-5.12以前なら “6.56” をいれる
• cpanm, App::FatPacker をインストール
• 依存モジュールのインストール・アップデート
• fatpack
再利用が可能
![Page 104: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/104.jpg)
Dockerを使ってみよっかー
![Page 105: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/105.jpg)
FROM jmmills/plenv-base:latestRUN plenv install 5.8.5ENV PLENV_VERSION 5.8.5RUN curl -L http://cpanmin.us/ | plenv exec perl - -n ExtUtils::[email protected] curl -L http://cpanmin.us/ | plenv exec perl - -n App::cpanminusRUN curl -L http://cpanmin.us/ | plenv exec perl - -n Perl::Strip App::FatPackerRUN plenv rehashCMD bash -l -c 'cd /perl-build; cpanm -n --installdeps . ; bash author/fatpack.sh'
Docker!le
Dockerを使ったfatpack
![Page 106: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/106.jpg)
$ git clone https://github.com/tokuhirom/Perl-Build.git$ cd Perl-Build/author$ docker build -t perl-build .$ docker run -v ../:/perl-build perl-build
GuestOS
Dockerを使ったfatpack
“Perl-Build” ディレクトリをコンテナ内の”/perl-build”にマウント
![Page 107: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/107.jpg)
-v オプション毎回指定するの面倒だし、もっと言うと、Docker のインストールから
自動化したい。そうすると誰でも簡単に確実に
perl-buildのfatpackが実行できる
![Page 108: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/108.jpg)
Vagrant + Docker の合わせ技
![Page 109: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/109.jpg)
Vagrant+DockerVagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.synced_folder "../", "/perl-build" config.vm.provision "docker", run: "always" do |d| d.build_image "/perl-build/author", args: "-t perl-build" end config.vm.provision "shell", run: "always", inline: "docker run -v /perl-build:/perl-build perl-build" config.vm.provision "destroy", destroy: false, run: "always"end
Vagrant!le
![Page 110: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/110.jpg)
Vagrant+DockerVagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.synced_folder "../", "/perl-build" config.vm.provision "docker", run: "always" do |d| d.build_image "/perl-build/author", args: "-t perl-build" end config.vm.provision "shell", run: "always", inline: "docker run -v /perl-build:/perl-build perl-build" config.vm.provision "destroy", destroy: false, run: "always"end
Vagrant!le/path/to/perl-buildをGuestOSの
/perl-buildにマウント
![Page 111: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/111.jpg)
Vagrant+DockerVagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.synced_folder "../", "/perl-build" config.vm.provision "docker", run: "always" do |d| d.build_image "/perl-build/author", args: "-t perl-build" end config.vm.provision "shell", run: "always", inline: "docker run -v /perl-build:/perl-build perl-build" config.vm.provision "destroy", destroy: false, run: "always"end
Vagrant!le/path/to/perl-buildをGuestOSの
/perl-buildにマウント
docker provisionerを使うと自動でGuestOSにdockerが入る
![Page 112: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/112.jpg)
Vagrant+DockerVagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.synced_folder "../", "/perl-build" config.vm.provision "docker", run: "always" do |d| d.build_image "/perl-build/author", args: "-t perl-build" end config.vm.provision "shell", run: "always", inline: "docker run -v /perl-build:/perl-build perl-build" config.vm.provision "destroy", destroy: false, run: "always"end
Vagrant!le/path/to/perl-buildをGuestOSの
/perl-buildにマウント
docker provisionerを使うと自動でGuestOSにdockerが入る
shell provisionerでdocker run
![Page 113: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/113.jpg)
Vagrant+DockerVagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.synced_folder "../", "/perl-build" config.vm.provision "docker", run: "always" do |d| d.build_image "/perl-build/author", args: "-t perl-build" end config.vm.provision "shell", run: "always", inline: "docker run -v /perl-build:/perl-build perl-build" config.vm.provision "destroy", destroy: false, run: "always"end
Vagrant!le/path/to/perl-buildをGuestOSの
/perl-buildにマウント
docker provisionerを使うと自動でGuestOSにdockerが入る
shell provisionerでdocker runGuestOSを自動で停止余計なリソース使わない
![Page 114: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/114.jpg)
docker provisionerでdocker runを行わない理由
config.vm.provision "docker", run: "always" do |d| d.build_image "/perl-build/author", args: "-t perl-build" d.run “perl-build”end
Vagrant!le
docker provisionerで run
これだと、fatpackが終わる前に、vagrant upが終わり、元のシェルにもどってしまい、いつfatpackが完了するか分からない
![Page 115: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/115.jpg)
Vagrant+Docker$ vagrant plugin install vagrant-destroy-provisioner$ vagrat up=> GuestOSの起動
=> docker provisionerでDockerイメージのビルド
=> shell provisioner経由でdocker run
==> 依存モジュールのインストール
==> fatpack$ git status ../perl-build..# modified: ../perl-build..$
MacOS X
![Page 116: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/116.jpg)
fatpackしたperl-buildコマンドの動作チェックも Docker でやると
捗ると思うのでpull-req お待ちしています(_ _)
![Page 117: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/117.jpg)
今日の内容• Docker の基本
• Docker!leとDockerイメージのビルド
• DockerでPerlを使う
• Dockerで自動化
• DockerでWebアプリケーション
![Page 118: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/118.jpg)
DockerでWebアプリケーション
![Page 119: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/119.jpg)
題材
![Page 120: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/120.jpg)
WebアプリケーションのDocker への Deploy
FROM perl:v5.20
COPY . /opt/app
RUN carton install
CMD carton exec -- plackup
docker イメージ
![Page 121: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/121.jpg)
docker buildFROM kazeburo/perl:v5.20RUN mkdir -p /opt/appCOPY ./cpanfile /opt/app/cpanfileCOPY ./cpanfile.snapshot /opt/app/cpanfile.snapshotWORKDIR /opt/appRUN carton install --deploymentEXPOSE 5000COPY . /opt/appCMD carton exec -- plackup -s Starlet --port 5000 -a app.psgi
Docker!le 先にcpan!leをコピーしcarton installを行う事で
cacheを有効活用
残りをコピー
![Page 122: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/122.jpg)
docker build
local
.dockerignore
.gitignore と同じような役割local をコンテナ内にコピーしない
![Page 123: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/123.jpg)
アプリケーションの起動$ docker build -t app .$ docker run -p 15000:5000 app
GuestOS
コンテナのPortHost側のPort
![Page 124: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/124.jpg)
Vagrantでport_forward
Vagrant.configure(2) do |config| config.vm.box = "hashicorp/precise64" config.vm.network "forwarded_port", guest:15000, host:25000 config.vm.provision "docker", run: "always" do |d| d.pull_images "kazeburo/perl:v5.20" endend
Vagrant!le
Macのtcp 25000 をGuestOSの 15000 に
forward
Mac/Vagrant GuestOS コンテナ
50001500025000
![Page 125: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/125.jpg)
ブラウザでの確認
http://127.0.0.1:25000/
![Page 126: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/126.jpg)
Docker でWebアプリケーション残りの課題
• ログの取り扱い• MySQLなどの接続情報の受け渡し
• 性能評価• イメージビルド・デプロイ手段• 監視
まだまだ厳しい...
![Page 127: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/127.jpg)
引き続き Docker で遊びながら最新情報を追っていきたいと
考えております
![Page 128: Dockerで遊んでみよっかー YAPC::Asia Tokyo 2014](https://reader031.fdocument.pub/reader031/viewer/2022020110/54b768814a79595d768b4646/html5/thumbnails/128.jpg)
ご清聴ありがとうございました