docker-100275159-orig

こんにちは、命と書いてmikotoです。最近Docker利用者が増えていますよね。
今回は、MacでDockerを利用するための初期設定について書きたいと思います。

インストール

Install Docker on Mac OS X

  • こちらからインストール
    • インストーラーあるので安心です
  • 最近は管理用のGUIがセットされたものもあります

セットアップ

上記ページのFrom your command lineにも書いてありますが、日本語で解説します。

Boot2Docker VMを作成

Virtual Box上にBoot2Docker VMを作成します。

$ boot2docker init

気になる人はこちらの記事をご覧ください→Boot2Docker VMとは?

ホストサイズの設定 (オプション)

Boo2Docker VMで扱えるサイズがデフォルトでは小さく、いつの間にか限界サイズに到達し、それ以上新規のイメージを開発・利用できなくなってしまうため、大きめにホストサイズを確保しておく必要があります。設定方法は下記です。

~/.boot2docker/profileに以下の内容を追加します。

DiskSize = 80000

以下のコマンドを実行します。

$ boot2docker config
# boot2docker profile filename: /Users/XXX/.boot2docker/profile
Init = false
Verbose = false
Driver = "virtualbox"
SSH = "ssh"
...
DiskSize = 80000
Memory = 2048
SSHPort = 2022
...
Waittime = 300
Retries = 75

VMを再作成します。
※今まで利用していた全てのイメージが破棄されるので注意してください。

$ boot2docker delete && boot2docker init && boot2docker up

参考: boot2docker ホストのディスクサイズを変える

Boot2Docker VM起動

Docker Clientと通信するサーバーを起動します。

$ boot2docker start

ホストOSを終了したり、何らかの不具合でこのプロセスがストップされた場合は、dockerコマンドを利用開始する前に、再度上記コマンドを実行する必要があります。
(もちろん、故意に落とした場合も)

環境変数の設定

下記コマンドを実行し、設定すべき環境変数を表示します。

$ boot2docker shellinit
Writing /Users/mary/.boot2docker/certs/boot2docker-vm/ca.pem
Writing /Users/mary/.boot2docker/certs/boot2docker-vm/cert.pem
Writing /Users/mary/.boot2docker/certs/boot2docker-vm/key.pem
    export DOCKER_HOST=tcp://192.168.59.103:2376
    export DOCKER_CERT_PATH=/Users/mary/.boot2docker/certs/boot2docker-vm
    export DOCKER_TLS_VERIFY=1

上記の内、exportから始まる行を.bash_profileなどに記入することで、環境変数を設定します。
※各自で内容が異なります。

動作確認

$ docker run hello-world

ポートフォワーディング設定

Dockerコンテナ(ゲストOS)に対し、ホストOSから何らかの接続を行う場合(例えば、HTTP, SSH)に必須の設定です。

  1. Virtual Box起動
  2. boo2docker-vmを選択
  3. 設定(ウィンドウ内上にある)を選択
  4. ネットワークタブを選択
  5. NATの設定を行っているアダプターを選択(多分、アダプター1)
  6. ポートフォワーディングボタンを選択
  7. フォワーディング対象のポートを記入
    • 下記画像の設定を解説:
      • Boot2Docker VMのHTTP(80ポート) → ホストポート8080
      • Boot2Docker VMのSSH(22ポート) → ホストポート2022(これは最初からある)
      • Boot2Docker VMのSSH(5022ポート) → ホストポート5022(これは別途設定したポート)
    • 基本的には、サービス提供用のポート1つの転送を設定しれいれば良い(上記例では、80->8080)
      • docker runコマンド実行時にゲストOS(DockerでセットアップしたOS)→Boot2Docker VMへのポートフォワーディングを任意に設定できるため
    • 筆者は、悪習慣だが開発用にSSHでゲストOSにログインするために、空けている(上記例では、5022->5022)

3f8ae9bb-5904-c0c4-a061-059d6c6c4e06

参考: MacOSXからDockerコンテナへのssh接続ではまったところ

補足説明

Boot2Docker VMとは?

Virtual Boxをベースに動作するLXCのインターフェイスを模倣したホストで、
Docker Clientと通信するローカル用のサーバーデーモンになります。

  • DockerはLinuxコンテナ(LXC)を利用した仮想化技術を利用
  • 通常の仮想化技術(ホストOS方式)よりも高速
    • 特にハードウェアアクセスのエミュレートが不要
    • No Boot/No Shutdown
  • しかし、MacはLXCに対応していないので、インターフェイスだけ真似てVirtual Box上で結局はホストOS方式を利用している
    • 本番運用or速度が必要な場合は、LXC対応のOSを利用することが望ましい

最後に

こちらの記事は、元々は社内のQiita Teamで共有していた記事です。
リクルートジョブズでは、気になった技術を検証して技術共有する文化があります。