ぶるーすくりーん

ぽんこつプログラマ日記

Docker使うときのメモ on Mac

Macで動作確認とかする用にさくっと Docker 起動できるようにするまでの道のりメモです。

インストール

Install

$ brew install docker boot2docker

boot2docker 起動

MacでDocker使うにはBoot2dockerというDockerサーバーをVM上でたてる必要がある。

$ boot2docker init
$ boot2docker up

環境変数設定

上記boot2docker upの実行結果の最後のほうに出力されるexportの定義をコピって.bash_profileとかに追加する。

  : 
export DOCKER_HOST=tcp://192.168.59.103:2375

動作確認

以下のコマンドを実行して、エラーが出力されないことを確認。

$ docker version

Docker Hub ってみる

Docker Hub を使えば、公開された様々なイメージを簡単に利用できちゃいます。

以下は、nodejs を使う環境が整ったイメージを使用する例です。

Docker Hubアカウント登録

アカウントもっていない場合は、登録する。 Docker Hub

ほしいイメージを探す

ログインできたら、Browse Reposタグからいろいろな便利イメージを探すことができます。
今回使用するのはこちら dockerfile/node

イメージダウンロード

右上の方にあるpull this repositoryってとこのテキストをコピペ実行。

$ docker pull dockerfile/nodejs

まつ。

とりあえず起動

Usageに従って以下を実行。

$ docker run -it --rm dockerfile/nodejs
[ root@06cf7b5e6b2e:/data ]$ 

SSH 接続系

上記で使用した nodejs のイメージでは、いろいろと整備されているので、コマンド一発でログインできました。
ここでは、あまり加工されていないOSイメージとかを使用して、ssh 接続したい場合どうするの?ってケースをまとめます。

Docker に SSH デーモンインストール

SSH デーモンとか、その他必要な設定とかを追加。

$ docker run -i -t centos:init /bin/bash
bash-4.2# yum update -y
bash-4.2# yum install -y passwd
bash-4.2# yum install -y openssh
bash-4.2# yum install -y openssh-server
bash-4.2# yum install -y openssh-clients
bash-4.2# sed -ri 's/UsePAM yes/#UsePAM yes/g' /etc/ssh/sshd_config
bash-4.2# sed -ri 's/#UsePAM no/UsePAM no/g' /etc/ssh/sshd_config
bash-4.2# yum install -y passwd
bash-4.2# useradd mid
bash-4.2# passwd mid
bash-4.2# exit

いったん抜けて sshd をインストールした状態を commit する。

$ docker ps -a  # CONTAINER ID 確認
$ docker commit ${ID} centos:sshd-install

コミットしたイメージで sshd を起動。

$ docker run -d -i -t centos:sshd-install /usr/sbin/sshd -D

クライアント接続

docker の中の人につなぐには、いったん boot2docker を経由する必要があります。
直接つなぐ方法もあるとは思うのですが、今の知識ではこんな感じ。

docker コンテナのIPアドレス確認。

$ docker ps
$ docker inspect ${ID}

  :
    "NetworkSettings": {
        "Bridge": "docker0",
        "Gateway": "172.17.42.1",
        "IPAddress": "172.17.0.90",
        "IPPrefixLen": 16,
        "PortMapping": null,
        "Ports": {}
    },

boot2docker 経由で SSH 接続。

$ boot2docker ssh
docker@boot2docker:~$ ssh mid@172.17.0.90

2014/07/26 追記
直接SSHする方法 Mac で Docker 使うときのポートフォワーディング

その他起動オプションとかで覚えておくとよさそうなこと

docker run

  • -d: デーモンとしてバックグランドで起動
  • --rm: プロセスが終了したら、起動中にやったことはなかったことにする。
    作成しておいたイメージでコンテナ起動してがちゃがちゃして終わったら削除ができるので、CI的な利用にはこれかな。

まとめ

ついに docker 入門してみました。 苦戦すると思っていたのですが、そんなに難しいことはなかった感じです。
というか、普通に転がってるイメージを手軽に使いたかっただけなので、難しいレベルが不要だっただけかな。

ただ、Macだと boot2docker 起動しないといけないとか悲しい。

                        ##        .
                  ## ## ##       ==
               ## ## ## ##      ===
           /""""""""""""""""\___/ ===
      ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
           \______ o          __/
             \    \        __/
              \____\______/
 _                 _   ____     _            _
| |__   ___   ___ | |_|___ \ __| | ___   ___| | _____ _ __
| '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__|
| |_) | (_) | (_) | |_ / __/ (_| | (_) | (__|   <  __/ |
|_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|