参考:http://oss.fulltrust.co.jp/?p=537
↑のサイトの方が最新版のDockerを動かす方法についてこちらに載せておられるそうです.
以降は全部rootで実行する.
- リポジトリの設定とdocker-ioのインストール
# wget -P /etc/yum.repos.d http://www.hop5.in/yum/el6/hop5.repo
# yum install xz -y
# yum install docker-io -y
- 起動スクリプトの作成
/etc/init.d/lxc-docker
このファイルを配置し,下記コマンドを実行する.
なお,↑のファイルではrepositoryの保存場所を/shareに変更している
(デフォルトだと/var/lib/docker に作成される.デフォルトに戻すのであれば,start 及び restartのところの-g /share を削除すればOK)
# chmod 755 /etc/init.d/lxc-docker
# chkconfig --add lxc-docker
- GRUBの設定&ホストOSの再起動
# sed -i 's/default=1/default=0/' /boot/grub/grub.conf
# reboot
- Docker起動
CentOS起動後下記のコマンドを実行すると,centosイメージをdockerが起動し,bashシェルでイメージ内部に入る(centosイメージが無い場合は,共有レジストリ(docker.io)から自動的にDLして実行してくれる)
docker run -i -t centos /bin/bash
終了するときはexitで抜ければOK.同時に実行されているコンテナ(centosのイメージを動かしているもの)も終了する.
セットアップ時の注意点
WARNING: IPv4 forwarding is disabled
docker run
実行時に,WARNING: IPv4 forwarding is disabled.*
というWarningが出る場合,dockerコンテナ内で正常にネットワークが使えなくなることがある.
その場合,vi /etc/sysctl.conf
を実行し,net.ipv4.ip_forward
の値を1にすればOK.
lxc-start: Permission denied - failed to create symlink for kmsg
lxc-docker start時にPermission Deniedと出て実行できない場合,SELinuxの実行を疑う.setenforce 0
と実行して,lxc-dockerが正常に実行できた場合は,SELinuxのせいなので,/etc/selinux/config
の中のSELINUX
の値をdisabledにする.
コンテナ内から外部にネットワークがつながらない
ひとまずホストOSのiptablesを止めてみる(Stopだけだと正常に通信できない場合が事例としてあったので,その場合はStopしてchkconfigから自動起動をOFFにして再起動して試してみる).
勿論iptablesが必要な場合は,コンテナからホストへの仮想NICの通信をiptablesで許可してあげればOK.
ulimit: open files: cannot modify limit: Operation not permitted
コンテナ内でulimitを設定する際に出ることがあります.例えばmongodの起動スクリプト(/etc/init.d/mongod ).
まずコンテナ内で ulimit -a
で oepn files (-n)
の値を確認し,その値が今設定しようとしている値より小さく,かつ,その場で ulimit -n 65535
等を実行した際にも↑のエラーメッセージがでる場合,一度コンテナ外に出て,ホスト側で下記を実行する.
# /etc/init.d/lxc-docker stop
# ulimit -n 65535
# /etc/init.d/lxc-docker start
要するに,一度docker daemonを止めて,ホスト側のulimit -n
の数値を上げ,再度daemonを起動する.その後,コンテナを起動し,内部のulimit -n の値を確認すると,同様に65535になっている.
参考:https://groups.google.com/forum/#!topic/docker-user/T45Kc9vD804
ちなみに,ubuntu環境でDockerを実行していた場合,/etc/init/docker.conf
に下記記述(数値は適当.要はコンテナ内で設定されるものより大きければ良い)を追記して,sudo service docker restart
と実行すれば良い
limit nofile 262144 262144