MacでDockerした感想文
2015/07/03
Contents
前提:DockerはLinux上でしか動かない
MacでDockerしたいんだけど
VirtualBoxのような仮想化ツールでLinuxな環境を用意する必要がある。
ブログなどでよく見る方法
* VirtualBox+Vagrant
* homebrewでdocker+Boot2Docker
* https://docs.docker.com/installation/mac/
公式で提案されてるやり方GUIでイケるので楽そうだわ。
ちゃんとメンテナンスもされてるみたいだし、素直にpkgファイル展開しよう。
https://github.com/boot2docker/osx-installer/releases/tag/v1.4.1
pkg開いて指示に従っていればMacでDockerするために必要な環境ができた。
Docker用VMの操作はboot2dockerコマンドでやるみたい。
http://boot2docker.io/
コンテナ?
ホストOSという地球上に設置された独立国家って感じ?
軽いVMくらいの理解でいいのかも。
初めてのコンテナ
1 |
sudo docker run ubuntu:14.04 /bin/echo 'Hello world' |
- ubuntuをインストールして
- Hello worldを表示して
- 終了
↓コンテナの作り方や消し方などのチュートリアル
Dockerfileって何?
1 |
docker run -t -i ubuntu:14.04 /bin/bash |
ってやると、ubuntuのコンソールが起動する(ubuntuでbashを実行するコンテナが実行される)。
ここで、gitやnginxをインストールする。
で、exitして再度↑のコマンドを実行すると、インストールしたgitやnginxは消えてる。
「ubuntuでコンソールを起動する」コンテナなのでその後の状態は保持してないからだ。
コンテナを起動する度に中で行った作業を手で打つのは不毛。
なので、コマンドを別のファイルに記述しておいてコンテナ起動時にそれを自動的に実行してもらえると嬉しいよね。
じゃあ、その実行したい処理をプレーンテキストに書いてdocker run ubuntu プレーンテキストを走査して逐次処理を実行
ってのも色々大変そう。
って、ことでDocker側でその辺の仕組みを用意してくれてる。
Dockerfileというファイルに独自DSLを記述すれば、プロビジョニングができるってわけ。
Dockerfileを作ってみよう
Dockerfileでググればいろいろでてくる。
http://www.atmarkit.co.jp/ait/articles/1407/08/news031.html
Dockerfileからイメージ(と呼ばれるコンテナのクラス)を作って、イメージからコンテナを生成する。
Dockerfileに処理を記述することでインフラっぽい層をコードとして管理できる。
これによって、インフラっぽい人はDockerfileの整備に専念できるし、アプリっぽい人はDockerfileで記述された舞台の上でアプリケーションコードを書くだけで良くなる。この関心の分離が結構嬉しそう。
イメージのバージョンを管理できるDocker
ubuntuでbashを起動するコンテナを起動して、そこでnginxやらをインストールしてexitするとその差分は消えちゃう。
Dockerにはattachとdetachっていう機能があって、コンテナを実行させたまま一時離脱、逆に離脱したコンテナに再度ジャックインできるような感じ。
何かしらのソフトをインストールしてexitせずdetachする。
で、その実行中のコンテナをcommitってやつをすることで実行されてる状態のコンテナのイメージを作ることができる。
便利すね。
Docker Hub
Dockerfileをgithubのようなサービスで管理すると、最新のDockerfileをpullしてイメージを作ってコンテナを実行すると良い。
Dockerfileじゃなくてイメージそのものを管理できないかなー、って人がでてくるはずでDocker社はそれを見越してDockerHubというサービスを提供してる。
これを使えばいきなりdocker run 使いたいイメージ
で環境が完成しちゃう。はず。
もちろん作ったor編集したimageをDockerHubにpushできる。
Dockerfile+なんかのバージョン管理システム vs DockerHub
Dockerfileを共有するのと、DockerHubでイメージを共有する方法、最終的な目的は同じだと思うんだけど…
どっちがいいんだろうね。まあ、『場合による』で終わる系の話だろうが。。
http://www.atmarkit.co.jp/ait/articles/1408/26/news038.html
このスライドを先に読んどきゃよかったw
336px
336px
関連記事
- PREV
- iOSアプリの設計ってどうやるの?
- NEXT
- AndroidのHandlerって何?