Upload
hori-yuma
View
2.171
Download
1
Embed Size (px)
Citation preview
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/
\ ブログ作りました! /