ようへいの日々精進XP

よかろうもん

Mac ユーザーに福音!MacOS X で docker クライアントを使ってみた

はじめに

  • オフィシャルの docker のクライアントが MacOS X からも使えるようになったらしいので試してみた
  • リモートで稼働している Docker サーバー(Docker サーバーという言い方で正しいかわからないけど)

参考


準備

環境

試して環境は以下のとおり。

ホスト名 OS docker
クライアント docker-client MacOS X Marvericks Docker version 0.7.4, build 010d74e
サーバー docker-server Ubuntu 13.04 Docker version 0.7.2, build 28b162e

docker クライアント

boxen を使ってインストールするので our-boxen/modules/people/manifests/${GIHUBID}.pp を以下のように追加する。

  homebrew::tap { 'homebrew/binary': }
  package {
      'homebrew/binary/docker' : require => Homebrew::Tap["homebrew/binary"]
  }

インストール後、docker -v すると以下のように出力された。

Docker version 0.7.4, build 010d74e

おお、やったー!

docker サーバー

サーバー側となる Ubuntu 13.04 にインストールされている docker の設定について /etc/init/docker.conf を以下のように修正する。

--- docker.conf.original        2014-01-25 14:28:09.769424260 +0900
+++ docker.conf 2014-01-25 14:28:48.173423611 +0900
@@ -11,5 +11,5 @@
        if [ -f /etc/default/$UPSTART_JOB ]; then
                . /etc/default/$UPSTART_JOB
        fi
-       "$DOCKER" -d $DOCKER_OPTS
+       "$DOCKER" -d $DOCKER_OPTS -H=tcp://0.0.0.0:4243/
 end script

修正後、sudo docker stop && sudo docker start で再起動を行う。


早速使う

早速、docker クライアントを使ってみる。

docker pull してみる

以下のように実行する。

docker pull -H=tcp://docker-server:4243 inokappa/wheezy-7.2-basic

以下のように出力されコンテナイメージのダウンロードが開始される。

f:id:inokara:20140125144415p:plain

これだけでも感動。

docker run してみる

毎回 -H=tcp://docker-server:4243 を指定するのは面倒なので、以下のように環境変数に設定してあげるとベラー*1

export DOCKER_HOST="tcp://docker-server:4243"

設定したら改めて docker run してみる。

docker run -t -i inokappa/wheezy-7.2-basic /bin/bash

以下のように見事に起動する。

f:id:inokara:20140125145020p:plain

おお、あたかもローカルでコンテナが起動しているかのようだ...。

docker build してみる

以下のように Dockerfile を書いてコンテナを作ってみる。

cat << EOT >> Dockerfile
FROM inokappa/wheezy-7.2-basic
#
MAINTAINER YOHEI KAWAHARA inokappa
#
RUN apt-get update
RUN apt-get -y install sudo openssh-server
#
RUN mkdir -p /var/run/sshd
RUN useradd -d /home/sandbox -m -s /bin/bash sandbox
RUN echo sandbox:sandbox | chpasswd
RUN echo 'sshuser ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers
#
EXPOSE 22
CMD ["/usr/sbin/sshd","-D"]
EOT

そして、docker build を実行する。

docker build -t inokappa/openssh .

暫くするとコンテナが出来上がる。

(略)
Step 9 : EXPOSE 22
 ---> Running in 26d6563bf3ae
 ---> 4e007fad243d
Step 10 : CMD ["/usr/sbin/sshd","-D"]
 ---> Running in 803c1a7d8e13
 ---> 620584d6c54f

出来栄え確認しておこう。

f:id:inokara:20140125154533p:plain

コンテナに SSH にログインしてみる

次に docker build したコンテナに SSH でログインしてみたいので以下のようにしてコンテナを起動する。

docker run -d -p 22 inokappa/openssh

起動すると ${Docker_ID} が出力するので控えておく。起動の確認は docker inspect ${Docker_ID}docker ps で確認する。今回、サーバーとクライアント、サーバー内で起動しているコンテナは以下のような状態になっている。

f:id:inokara:20140125163000p:plain

上記のようになっているのでコンテナへのアクセスに際しては docker ps を使ってコンテナ上で稼働している SSH ポートにバインドしているポートを確認する。

docker ps

以下のようにバインドされているポートを確認する。

f:id:inokara:20140125163632p:plain

以下のようにアクセスする。

ssh sandbox@${docker-server} -p 49154

見事にアクセス出来た。

f:id:inokara:20140125164239p:plain


最後に

  • Mac から docker がイジれるようになったのは嬉しい!
  • そう言えば、kitchen-docker もリモートの docker 上のコンテナでテストが走ってたよなー

*1:better