moxt

Just another Blog site

MacでDockerした感想文

      2015/07/03

前提: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くらいの理解でいいのかも。

初めてのコンテナ

  • ubuntuをインストールして
  • Hello worldを表示して
  • 終了

↓コンテナの作り方や消し方などのチュートリアル

Dockerfileって何?

ってやると、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

 - プログラミング

  • このエントリーをはてなブックマークに追加
  • follow us in feedly

  関連記事

no image
AndroidのHandlerって何?

Handlerは何?と、Handlerを直視するとHandlerの存在意義というかなんというか文脈を捉えることが難しい。 なので、まずはAndroidがシングルスレッドである、という所からスタートしてHandlerに向かってゆく。 …

no image
Rubyのモジュール機能とRailsのHelperについて考える

Moduleとは 参考サイトを見ながら思ったことをメモ …

no image
YosemiteでRubyMineが起動できない

yosemiteからjavaが1.7系になってる。 一方、rubymineは1.6系を想定している。 …

no image
Androidアプリを作るために最低限必要な知識と未知の部分を列挙

作りたいアプリによって必要な知識は変わるかもしれないが。。 個人的過ぎて役に立たないが、整理がてら羅列してみる。 …

no image
意識低いRuby on Rails再入門2

Modelを作り、コンソール上からデータを追加した。 次はこのデータをlocalhost:3000にアクセスしたときに表示させてみたい。 …

no image
開発で詰まったときにググるキーワード

そもそも公式サイトやソースコード、テストコード、githubなどのissueを読む 基本的には1ヶ月から1年以内の回答しか見ないようにする …

no image
Python(Anaconda)とOpenCVを使って動画から顔画像を抽出してみる

今話題のディープラーニングをやってみたい。 いろいろ見た感じCaffeというフレームワークが良さそう。 …

no image
Swiftで追加したサードパーティなモジュールを更新する方法

SwiftにはCocoaPodsのようなライブラリを管理するツールがないので、手で追加します。 手で追加したライブラリのバージョンを更新したいときどうすればよいか。 …

no image
意識低いRuby on Rails再入門6 ~ログイン必須のControllerを作りたい~

ログイン状態を取得するためのSessionsHelperを前に書いた 新規投稿画面を表示したり、実際に投稿するときにはログイン必須であることを保証したい。 …

no image
Macでdocker系のコマンドが使えなくなったら確認すること

OSXではdockerは使えないため、別にVMを立ち上げ、そこでdockerを動かしてる。 macからdockerコマンドを使うためにboot2dockerというコマンドを使う。 …