Dockerで楽しむ
P R E S E N T A T I O N :
フロントエンドエンジニア 堀祐磨 (ホリデー)
自宅サーバ
自己紹介
堀 祐磨 (ほりでー)
1988年生まれ。多摩美術大学を中退後、
デザイナーとしてグラフィックデザイン・
Webデザイン・UIデザインを経験。
2015年、株式会社LIGにフロントエン
ドエンジニアとして入社。
自宅サーバって楽しい!
Redmine
タスク管理
ブックマーク
管理
便利
Gitbucket
オレオレプライベートリポジトリ
めっちゃ高機能
便利
ResourceSpace
購入したストックフォトや収集したデザイン資料の管理
12000件・26GBのデータを横断的に管理!
便利!
とはいえ…
インストールが

超面倒
バックアップ面倒
マシンの移行とか
OSのアップデート
で壊れて入れ直す
のが面倒
もっと楽にしたいなぁ
たまたま読んだ
『サーバ/インフラ徹底攻略』
http://www.amazon.co.jp/
dp/4774167681/
@2015年2月∼
Immutable
Infrastructure?
イミュータブル・インフラ
ストラクチャー
サーバの設定が全部設定ファイル化されてる
設定ファイルの通りに自動で構成される
自動でいつでも作れるから、サーバは

いつ消してもOK
chef・Vagrant・Dockerとかその辺り
めっちゃ便利じゃん!
つくってみた
ぼくがかんがえたさいきょう
の自宅サーバ
ハード:Mac mini Server(mid 2011)
ホストOS: OSX Server 10.10.5
仮想マシン環境:Vagrant + VirtualBox
Linux環境(Dockerホスト): CoreOS
アプリケーションはDockerで構成
Vagrant
Vagrant (+VirtualBox)
VirtualBoxのAPIを使って仮想マシンの
設定を自動化したり、起動時に任意のシェ
ルスクリプトを走らせたりできる
MacOSXでLinux動かすのに必要
構文がruby
Vagrant (+VirtualBox)
VirtualBoxのブリッジ接続+MACアドレス
固定で、LANのDHCPサーバからIPを固定
データ保存用の外部ディスクを作成し、仮
想マシンに接続
このあたりの書き方はVagrantと
VirtualBoxのリファレンスを見てがんばる
CoreOS
CoreOS
大規模クラウドサービス向けLinuxディストリビュー
ション
DockerとかRocketがインストール済
余計なものは何もインストールできない
設定が1ファイルで済む(systemd)
マウントやネットワーク設定はsystemdのリファ
レンス見てがんばる
CoreOS
なんでboot2Docker使わなかったの?
→開発用っぽい感じが嫌だったから(適当)
Docker
学習コストはちょっと高いかも…
• 今のところDockerはLinux上でしか動かない (近々Winも動く!?)
• Dockerコンテナは軽量Linuxコンテナという仮想化技術
• Dockerコンテナはホストや他のコンテナから隔離された環境
• Dockerコンテナは仮想マシンというよりはプロセス
• DockerコンテナはDockerイメージを実行したもの
• Dockerイメージは変更履歴の差分を積み重ねた特殊なファイルシス
テム
• Dockerコンテナ上の変更も、元になるDockerコンテナの差分とし
て扱われる
• Dockerコンテナ上の差分は、Dockerコンテナを削除したら消える
• Dockerコンテナはカジュアルに作ったり消したりする
• DockerイメージはDockerfileで自作できる
• 他人の作ったDockerイメージに、自分で差分を積み重ねてカスタマ
イズできる
• 1つのDockerコンテナが1つのアプリケーションを担い、複数コン
テナが連携してサービスを構築する
• DockerイメージはDockerHubからダウンロードする
• 自分でDockerイメージのリポジトリを自作することもできる
前提として理解
する必要がある
こと
• docker run

オプション多くて覚えにくい!

これさえやれば他は惰性でOK
• docker ps
• docker stop
• docker rm
• docker build
• docker exec
• docker cp
使い方を理解する必
要があるコマンド・
構文
一回ひととおり使う
と困らない
• docker-compose up
• docker-compose build
• docker-compose ps
• docker-compose stop
• docker-compose rm
実際使うのはむしろ
こっちでは
時間がない人は

docker-compose

から入った方がむしろ楽
単機能のコンテナが連携し合うのが
dockerによるサービスの構築
MySQL

コンテナ
Redmine

コンテナ
接続
ResourceSpace
コンテナ
接続
dockerコマンド:
コンテナ1つに対し
て操作するコマンド
docker-composeコマンド:
構成全体をまるっと操作するコマンド
docker-composeなら、
たったこれだけのコードでサーバが立つ!
http://qiita.com/y_hokkey/items/
406b5a8c4bc15354d069
dockerコンテナにはデータを

溜められない
docker run -v /data/mysql:/var/lib/mysql
OSXの場合、VirtualBoxの仮想
マシン上にデータ溜まっちゃう
OSXと仮想マシン間でファイル共
有するとパーミッション的に

厳しい
DockerコンテナがImmutableで
も、仮想マシンがImmutable
じゃないと嬉しくない…
永続化データは

専用の外部ディスクに
外部ディスクは、なかった
ら勝手に作成/あったら自
動的に仮想マシンと紐付け
るようVagrantfileに記述
究極的にはこれだけバック
アップすればOK!
http://qiita.com/y_hokkey/items/
3dd0d8f20f9daadbbf0b
おみやげ
Immutableなら、OSXのどんな
環境でも動くはず!!
• パスワードとか書いてあるし
• ネットワークインタフェース名がハード依存してた
• ドメイン名とか外部のDNSに依存してた
• なので…
と思ったけど
簡易版のデモを作りました!
冒頭で紹介した3つのアプリ+αが入ってます
https://github.com/hokkey/vagrant-
coreos-docker-demo
最後に宣伝
http://media-massage.net/
 ブログ作りました! /
Thank you!
http://media-massage.net/
株式会社LIG フロントエンドエンジニア 堀 祐磨 (ほりでー)

Dockerで楽しむ自宅サーバ