kvm上のubuntu 14.04でdockerを動かす

2015-03-07(Sat) Server

いつも入門するときに、なぜかうまくいかなそうなことをやってしまう人です。

仮想マシン上でコンテナを使ってみることはできると思うのですが、やってみました(これやるまえにかいてる)多分ネットワークがらみで死ぬ

何をするか

  • kvm上にubuntu 14.04を作る -> docker-vm
  • docker-vmにdocker.ioをインストール

uvtoolsでdocker用のマシンをデプロイ

ubuntu 14.04で利用できるuvtools(uvt-kvm)を使いました。kvm+libvirt上でOSのisoイメージを使ってマシンのセットアップ/インストールをするのではなく、クラウドで使われるようなubuntuのイメージをダウンロードして動かせるようにしてくれるらしいので非常に便利だと思います。

以下のリンク先でセットアップできます。

第344回 uvtoolでKVM/libvirt向け仮想マシンをお手軽に構築する:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社

もちろん、libvirtでセットアップするのも問題ないはずです。

dockerをインストール

ここの通りにやってみます Ubuntu - Docker Documentation

14.04なので一番上のものを。今回はubuntuのメンテナンスされているリポジトリを利用しました。

これでインストール終わり

dockerを使ってみる

さくらクラウドの記事を参考にしてみる

Dockerで使うサーバサイドソフトウェア(エンジニア編) - さくらのナレッジ

まずお馴染みのHello World

ubuntu@docker-test:~$ docker run ubuntu /bin/echo hello world
2015/03/07 00:34:49 Post http:///var/run/docker.sock/v1.12/containers/create: dial unix /var/run/docker.sock: permission denied

へ?? rootじゃないとだめ?

ubuntu@docker-test:~$ sudo docker run ubuntu /bin/echo hello world
hello world

でした。この話はDocumentsにもあって

Ubuntu - Docker Documentation - Giving non-root access

sudo付けたくないなら、実行中のユーザーをdockerグループに追加しないといけない。してもいいけどとりあえず面倒になるまではそのまま

さくらのナレッジを見て写経

練習も兼ねてさくらクラウドの内容をそのまま写経してみましたが、のっけから動かなくて

Dockerで使うサーバサイドソフトウェア(エンジニア編) - さくらのナレッジ

kvm上のマシンでdockerを動かそうとすると面倒

ちょっと面倒ですが、自分がどうさせた時点でネットワークはこうなってて(IPは適当です)

> [mac:192.168.100.10]
> |
> [kvm-host:192.168.100.100]
> |
> [docker-vm:192.168.122.10]
> (NWは192.168.122.0/24)
> |
> [docker-container-machine:172.17.0.7]
> (NWは172.17.0.0/16)

と言った風に多段になってます。そのおかげで、dockerで起動したネットワークのサービスへアクセスするのが面倒と思われます。

そういうこともあってか、以下のエラーが

ubuntu@docker-test:~$ sudo docker run --name redmine -d -p 80:80 sameersbn/redmine
...[中略]...
2015/03/07 07:42:00 Error response from daemon: Cannot start container d7838863da1d53a7fa1cbf6dcc264e822209b5f18e707ca329d019b6084c8627: port has already been allocated

macから直接dockerへアクセスする方法は面倒そうです。多段でポートフォワード打たないといけないし。dockerのネットワークへルーティングさせたほうがいいのかな。

atmarkの記事も見る

いまさら聞けないDocker入門(2):ついに1.0がリリース! Dockerのインストールと主なコマンドの使い方 (1/3) - @IT

本当に今さら聞けない気分 ^^;

この辺のdocker runなども実行はしているものの動作せずでした。この環境だと壁に当たること多い。

トラブルシューティング

dockerのいらないimageを消そうとして “cannot delete [image id] because the container [container id] is using it" と出て削除できない

dockerのimage消そうかなと思って docker rmiをすると以下のエラーが出てくる時がある

Error response from daemon: Conflict, cannot delete 743011f71790 because the container 417c9349bf04 is using it (docker untagged the image), use -f to force
2015/03/07 02:06:43 Error: failed to remove one or more images

ps で確認してもこのimageを使ってるコンテナー出てこないよ? その場合、裏でこのimageを使ってるcontainerがあるらしいので、docker ps -aで確認して、ID指定でコンテナーをrmして、最後にimageをrmiする。 わからずコマンドを叩いてるとまず当たりそうな感じのエラーですかね。runの-dオプションを実行しまくるとこうなるはずです。

Can't delete images - Google グループ

docker ps -aをすると裏で動いている?ものがたくさん出てくる

ubuntu@docker-test:~$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
417c9349bf04 sameersbn/redmine:latest /app/init app:start 4 minutes ago redmine
4df18f7ed439 2d24f826cb16 /bin/echo hello worl About an hour ago Exited (0) About an hour ago goofy_meitner
3e996358137d 2d24f826cb16 /bin/bash About an hour ago Exited (0) About an hour ago tender_rosalind
c018a52a3e0e 2d24f826cb16 /bin/bash About an hour ago Exited (0) About an hour ago stoic_bardeen

ps -aで表示させて、CONTAINER IDを指定してrmする

sudo docker rm 3e996358137d
sudo docker rm c018a52a3e0e

最後に、docker rmi

sudo docker rmi 2d24f826cb16

続きます

kvm上でも触る程度なら問題なかったのですが、ネットワークサービスを動かすとき にアクセスしづらい(というかまだ出来てない)ので、Mac OS + parallelsのboot2dockerを使ってdockerしたいと思います。 ということで続きます。

Mac OSのParallelsで利用できるboot2dockerでdockerを動かす