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 __/ \ \ __/ \____\______/ _ _ ____ _ _ | |__ ___ ___ | |_|___ \ __| | ___ ___| | _____ _ __ | '_ \ / _ \ / _ \| __| __) / _` |/ _ \ / __| |/ / _ \ '__| | |_) | (_) | (_) | |_ / __/ (_| | (_) | (__| < __/ | |_.__/ \___/ \___/ \__|_____\__,_|\___/ \___|_|\_\___|_|