RedHat6.5から仮想化技術について改良がくわえられて
Dockerに対応しました!
米Red Hatが「RHEL 6.5」を発表――Docker対応、仮想化KVMも強
Dockerって何ですか?
何やら便利らしいので、使ってみました
下記はCentOSの話ですが。
まず、Dockerてなんでしょう?
下記サイトがわかりやすいかもしれません
最近の仮想化界隈を知る:VMWareからCoreOSまで
DockerでImmutable Infrastractureに触れる
LXCは、 Linux上でOSレベル仮想化を提供する仕組みです。 LXCを用いることで一つのコントロールホスト上で、コンテナと呼ばれる単位で 複数の隔離されたLinuxシステムを走らせる事が可能となります。LXC(LinuxContener)なんて技術があった事を今回初めて知りましたが
なるほど、よくわかりませんが
今までのVMがハードを含めた完全仮想、エミュレートだったのに対して
LXCはOSの仮想化
それにDockerはAUFSファイルシステムを使用することで、LXCを使いやすく
計量にしている。といった感じでしょうか。
とりあえず、体感してみましょう。
DockerはLXCということなので、当然ですが環境はホストサーバに依存し
Linux上でしか動きません、また64bit版しか見つかりませんでした。
CentOSを準備し
Dockerのサイトにある通り、インストールを開始します
Red Hat Enterprise Linux - Installation
EPELリポジトリにてRPMが提供されているので、その通りインストールします。
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm # rpm -ivh epel-release-6-8.noarch.rpm # yum install --enablerepo=epel docker-io Dependencies Resolved =================================================================================================== Package Arch Version Repository Size =================================================================================================== Installing: docker-io x86_64 0.7.2-2.el6 epel 2.5 M Installing for dependencies: libcgroup x86_64 0.40.rc1-5.el6_5.1 updates 125 k lxc x86_64 0.9.0-2.el6 epel 78 k lxc-libs x86_64 0.9.0-2.el6 epel 116 k Transaction Summary =================================================================================================== Install 4 Package(s) Total download size: 2.8 M Installed size: 13 M Installed: docker-io.x86_64 0:0.7.2-2.el6 Dependency Installed: libcgroup.x86_64 0:0.40.rc1-5.el6_5.1 lxc.x86_64 0:0.9.0-2.el6 lxc-libs.x86_64 0:0.9.0-2.el6 Complete!一緒にLXCパッケージも入りましたね
dockerのインストールは以上です、細かい設定や運用を考えた設定が~
というのはあまりありません。
ではdockerを起動してみましょう
# /etc/init.d/doker start Starting cgconfig service: [ OK ] Starting docker: [ OK ]dockerは仮想コンテナとホストの通信用に、ネットワーク設定や、iptablesの定義が変更されます
コンテナとのportフォワード連携用ですね
iptablesを利用していた方は定義が更新されている
またはサービスで使っているサーバにdockerを入れる場合はどの設定が変更されているか
ネットワーク周りの設定を確認したほうがいいと思います。
# /etc/init.d/iptables status ~省略 Chain PREROUTING (policy ACCEPT) num target prot opt source destination 1 DOCKER all -- 0.0.0.0/0 0.0.0.0/0 ADDRTYPE match dst-type LOCAL Chain OUTPUT (policy ACCEPT) num target prot opt source destination 1 DOCKER all -- 0.0.0.0/0 !127.0.0.0/8 ADDRTYPE match dst-type LOCAL ~省略 # # ifconfig docker0 Link encap:Ethernet HWaddr FE:B0:05:F8:A2:CB inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:67 errors:0 dropped:0 overruns:0 frame:0 TX packets:24 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:4079 (3.9 KiB) TX bytes:2172 (2.1 KiB) # # cat /etc/sysconfig/network FORWARD_IPV4=yesまた、ホスト側サーバでコンテナとの連携ができるよう、カーネルパラメータを変更しておきましょう>br />
# vi /etc/sysctl.conf net.ipv4.ip_forward = 1それではコンテナを作成しましょう
コンテナ=仮想OSというイメージでしょうか
Vagrantを利用している方はイメージ付きやすかったと思いますが
まず、コンテナにて起動するOSイメージファイルをダウンロードします。
LXC用にカスタマイズされているものが、多数準備されていて、一般の方がカスタマイズされたものもあります。
どのイメージが利用できるのか、使用するか下記で確認できます
Docker - Index
今回は使い慣れているCentOSを利用しLXCコンテナとはどういうものか、どう違うのか体感してみます。
# docker pull centos Pulling repository centos 539c0211cd76: Downloading 557.1 kB/98.56 MB 1h36m24s 539c0211cd76: Download complete # docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE centos 6.4 539c0211cd76 9 months ago 300.6 MB centos latest 539c0211cd76 9 months ago 300.6 MB最初はイメージをダウンロードするため、時間がかかりますが
イメージのサイズが300MB程とは、軽いですね。
ダウンロードしたイメージ等はdockerのインストールディレクトリ配下に管理されます
# ls /var/lib/docker/graph/では早速コンテナを作成・起動しましょう
今回ダウンロードしたイメージは最低限動くようのパッケージのみになっていて
少しセットアップが必要です
# docker run -i -t -d centos /bin/bash # docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES ab728139164b centos:6.4 /bin/bash 14 seconds ago Up 14 seconds romantic_brown起動時に指定したコマンドでコンテナは起動し、そのコマンドに対してのリソースを提供します
今回は初期設定を行いたいので、bashで起動し、[-d]オプションでデーモン起動させます
コンテナは一つの処理、コマンドに対して動作を行い、動作が終了すると、コンテナも終了します。
そもそものDocker事態が使い捨て前提なので、なるほどという感じです
確かに、恒久的な開発環境としては使えないですね。
では起動したコンテナのbashに対してログインして最低限SSH等が使えるようセットアップします。
# docker attach ab728139164b bash-4.1# bash-4.1# yum install rsyslog bash-4.1# yum install cronie bash-4.1# yum install logrotate bash-4.1# yum install openssh-server bash-4.1# yum install passwd ログインできるユーザーを作成、またはrootのパスワードを設定 bash-4.1# passwd SSHの認証周りが問題でうまく接続できなくなることがあるそうなので 下記設定をコメントアウト bash-4.1# vi /etc/pam.d/sshd # session required pam_loginuid.so bash-4.1# /etc/init.d/sshd start 最低限のOS設定 bash-4.1# echo 'NETWORKING=yes' >> /etc/sysconfig/network bash-4.1# echo ' LANG="ja_JP.UTF-8"' >> /etc/sysconfig/i18n bash-4.1# cp -p /usr/share/zoneinfo/Asia/Tokyo /etc/localtime bash-4.1# exit取り急ぎの最低限設定です。これが正しい設定方法かは自信がないので申し訳ありません・・・
これでSSH接続できるイメージが準備できました。
※SSHは再起動しておきましょう、鍵等が作成されませんので
カスタマイズしたOSをテンプレートとして新しいイメージとして保存します。
dockerはコミットという方式でイメージファイルを管理します
この辺が新しく、また今後に期待できる管理方法らしいです。
# docker commit <コンテナID> <イメージ名> # docker commit ab728139164b Template1.0/CentOS:CentOS6.4新しくイメージができているのが確認できるでしょう
# docker imagesそのほか、作成したイメージの削除やコンテナの削除、コンテナの再起動等
コマンドの使い方は下記Gitが詳しく日本語訳されています。
Docker 虎の巻
作成したイメージをもとに、SSH接続できるコンテナを作成しましょう
# docker run -d -p 22 -p 80 -name=dock-srv01 Template/CentOS:CentOS6.5 /usr/sbin/sshd -D全開とはオプションが違いますね、これはコンソール接続する必要がないからです
代わりに[-p]オプションで、公開ポートを指定します。
dockerのコンテナは172~のローカルセグメント上に作成されてい行きます。
そのコンテナに外部から接続できるよう。ホストサーバとコンテナのポートがフォワードできるよう
マッピングしてくれます。
コンテナのマッピング情報やIPを確認してみましょう
# docker inspect <コンテナID>ポートのマッピングだけであれば、下記コマンドでも確認できます
# docker ps -aこれでSSH接続でき、開発環境準備は完了です。
基本的にはcommitして、runして、やることはそれ位です。
なるほど、これでdockerの掴みにはなったと思います
起動後にポートを変えられなかったり、起動コマンドを変えられなかったり、コンテナ名を変えられなかったり、IPを指定できなかったり、OSバージョンのバリエーションが少なかったり
まだまだ痒いところには手が届かない感じですが
ミドルウェアの検証や、わざわざVMで仮想サーバを立てる程でもない検証には使えそうです。
私はホストサーバにPoundを入れて、公開ポートに縛られないようしていますが
本格的に使う場合は同様にソフトウェアルータか、ソフトウェアLBを入れると捗るかもしれません
とても便利ですが、コンセプトである”使い捨て開発環境”という前提は忘れない利用の仕方を心がけしたほうが良さそうです。
本当に開発環境として使いたいのであれば、Vagrantのほうがいいです。
Dockerfileというコンテナをrunする際にビルドしてくれる方法もあるようですが
こちらは後で見てみましょうかね
O'Reilly Media (2013-05-30)
0 コメント:
コメントを投稿