http://www.conoha.jp/ まえがき ConoHaは一台の物理サーバーの上で何台かの仮想 サーバーが動く 「VPS」です。でも、VPS って自由度が高い だけに設定するところが多すぎて面倒ですね。VPSの中に さらに小さな仮想サーバーを立ち上げて、用途別に動か せたら便利なのに…。こういう人に最適なのが、サーバー の中に「コンテナ」という “子サーバー”を立てるコンテナ型 仮想化です。そのためのパッケージとして近ごろ注目されて いるのが「Docker」というもの。これを使うと、ConoHaの サーバーに中にさらにドカドカとサーバーを立てることが y ) ・ ω ・ ( ね 親父ギャグや できてしまいます。ちょっと楽しそうですね。あなたもやって みませんか? 目 標 ■ Dockerでコンテナを立ち上げる ■ DockerfileでWebサーバーのイメージ・コンテナをつくる 前 提 ■ とりあえず ConoHaでVPSを1 台契約済みであること。 [ 標準 OS] CentOS 6.4(64bit)を使用していることを前提にご説明します ■ Webサーバーのインストール程度はできる知識がある I. はじめのいっぽ とにかくDockerを導入してみる 1 「Dockerを導入する」というと、以前はいろいろとめんどくさかったのですが今は EPEL リポジトリから yum 一発で入ってしまいます。 # rpm --import http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-6 # yum -y install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-rele ase-6-8.noarch.rpm # yum -y install docker-io # service docker start これで、DockerがホストOS 側でいつも起動している状態になりました。次に“子サー バー” =コンテナになるOSをセットアップしましょう。これも簡単で、Docker の提供元か ら各ディストリビューションのイメージがある程度提供されています。ここでは CentOS 6.4 のイメージを引っ張ってきます。 # docker pull centos Pulling repository centos 539c0211cd76: Download complete ファイルサイズとしては 300MB 程度しかないのであっというまに終わったんじゃないで しょうか。ここで見てわかるように、Docker のコマンド群は基本的に「docker なになに」 というかたちで呼び出します。いま手元にどんなイメージがあるかをリストアップするには 「docker images」を使います。 # docker images REPOSITORY TAG centos 6.4 centos latest IMAGE ID 539c0211cd76 539c0211cd76 CREATED 10 months ago 10 months ago VIRTUAL SIZE 300.6 MB 300.6 MB これでひととおりの用意ができました…と言いたいところですが、あともうひとつ。 dockerコマンドを使いやすくするためのお約束の呪文 alias を bash に追加しておきま しょう。 # echo "alias dl='docker ps -l -q'" >> ~/.bashrc これで、dl という alias が追加され、コンテナ名を参照しやすくなります。 2 コンテナを起動してみる とにかく、 “子サーバー”=コンテナとやらを立ち上げてアクセスしてみたいですね。 それには docker run コマンドを使います。 # docker run -i -t centos /bin/bash これは「centosというイメージを使って bashを起動してね。そのとき標準入出力を端末 につなげたままにしてね」という意味になります。うまくいけば bash-4.1# という、bash のコマンドラインが表示されるはずです。さぁ、これでもうコンテナ側の世界に 入りました。cat のような一般コマンドも、外部ネットワークへの ping もふつうに動くはず です。 bash-4.1# cat /etc/redhat-release CentOS release 6.4 (Final) bash-4.1# ping www.yahoo.co.jp PING www.g.yahoo.co.jp (124.83.203.233) 56(84) bytes of data. 64 bytes from f8.top.vip.ogk.yahoo.co.jp (124.83.203.233): icmp_seq=1 ttl=51 time=12.9 ms とりあえず満足したら、exit でbashを終了させてください。ホストOS に戻り、コンテナは 終了させられます。 bash-4.1# exit II. 自分好みの女 =コンテナを育てる 1 `●) ε すわ(´ 出 い 思 を い 会 女房との出 これだけだと他人の押し付けのコンテナしか使えないですね。なんかバリバリカスタマイズ telnetコマンド入りコンテナをつくる したコンテナが欲しいです。ちなみにはじめの状態だとtelnetコマンドすら入っていません。 じゃあ、telnetコマンド入りコンテナを作ってみましょう。 最初に、 「centosイメージを元に作業するからもう一度bashを触らせてくれ」とお願いし ましょう。 # docker run -i -t centos /bin/bash Docker # ふつうにDockerのコンテナが起動しましたね(以下、Dockerコンテナ内のコマンドライン は Docker # と書きます) 。 Docker # telnet localhost 80 bash: telnet: command not found ごらんのとおり、telnetコマンドがありません。21世紀にtelnetコマンドすらないとは! ということで yum でインストールします。終わったらさっさとログアウトしちゃいましょう。 Docker # yum -y install telnet Docker # exit コンテナを終了させたら、それを新しいイメージとして保存しておくことができます。 イメージの名前は「自分の名前/なんとかかんとか」にすることが推奨されているので、 ここでは「conoha/telnet」にします。 # docker commit `dl` conoha/telnet df287aa8b65f8152f6f928f07eb210f8d0c916a8e8ba7170d069acf61990bb2c これでホントに保存されたかな? docker images で確認しましょう。 # docker images REPOSITORY TAG conoha/telnet latest centos 6.4 centos latest IMAGE ID df287aa8b65f 539c0211cd76 539c0211cd76 CREATED About a minute ago 10 months ago 10 months ago VIRTUAL SIZE 340.7 MB 300.6 MB 300.6 MB たしかにあるみたいですが、念のために作ったイメージを立ち上げて使ってみましょう。 # docker run -i -t conoha/telnet /bin/bash Docker # telnet localhost 80 Trying 127.0.0.1... telnet: connect to address 127.0.0.1: Connection refused 結果はともかくインストールされているみたいです。 2 Webサーバー入りコンテナをつくる おなじようにApache Webサーバー入りのコンテナも作ることができます。 Docker # yum -y install httpd Docker # exit # docker commit `dl` conoha/apache このイメージからApacheの動作しているコンテナを起動するには、以下のようにする必 要があります。 「httpdを起動して、ホストの80番ポートとコンテナの80番ポートをつな げて」という意味です。 # docker run -p 80:80 -i -t conoha/apache /usr/sbin/httpd -D FOREGROUND これをやるといきなりhttpdが動いてしまい、こちらの操作に応えなくなります。CTRL-P CTRL-Qを押してやると一時的にプロセスをサスペンドしてコマンドラインに戻ることがで きるので、bg コマンドでバックグラウンドに逃がしましょう。 # bg docker ps コマンドを使うとコンテナが動いている状態を確認できます。 ぇ〜(・´з`・) て い と ん せ に 気 れてんの、 改行さ 途中#でdocker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES c5f373ca398c conoha/apache:latest /usr/sbin/httpd -D F 50 seconds ago Up 49 seconds 0.0.0.0:80->80/tcp compassionate_fermat telnetで80番ポートを叩くと確かにWebサーバーが動いています。確認できたらdocker ps の右端に表示されていたコンテナの名前を指定して、コンテナを終了させましょう。 # docker kill compassionate_fermat でも、これじゃサーバーのコンテナを自動起動させたりしづらいですね。 III. もうちょっとちゃんとWebサーバーを立てる 1 Dockerfileを使う Dockerには「Dockerfile」というものがあります。作成手順や起動するコマンドを書くと、 そのとおりのイメージを作ってくれる設定ファイルです。これを利用して、もうちょっと使いや すいサーバーのコンテナができないか試してみましょう。 ここでは~/docker/anotherapache/Dockerfile として設定ファイルを作ります。 # mkdir -p ~/docker/anotherapache # vi ~/docker/anotherapache/Dockerfile Dockerfileの内容は以下のとおり: FROM centos RUN yum -y install telnet RUN yum -y install httpd CMD ["/usr/sbin/httpd", "-D", "FOREGROUND"] これは「centosというイメージを元にいくつかyumを実行してイメージを作ってね。 起動するときはhttpdを呼び出すんだよ」という設定になっています。vi を終了させたら、 # docker build -t conoha/anotherapache ~/docker/apache Successfully built 36a0fe96f3d6 などとすればイメージファイルのできあがり。そして、docker run を以下のように 実行します。 # docker run -p 80:80 -d conoha/anotherapache こんどはふつうにコマンドラインに戻ってきましたね。docker ps でも # docker ps CONTAINER ID c9a1370f4e1d 5 seconds ago IMAGE COMMAND CREATED STATUS PORTS NAMES conoha/anotherapache:latest /usr/sbin/httpd -D F Up 4 seconds 0.0.0.0:80->80/tcp backstabbing_poincare y ) ・ ω ・ ( か い な や る き で ば れ Web サーバーのコンテナが動作しているのを確認できます。 IV. DockerとConoHaの意外な相性 1 Dockerのなにがうれしい? さて、簡単にDockerの使い方を見てきましたが、いったいどんなところがうれしいので しょうか。それはなんといっても、最後に触れた「Dockerfile」のような定義さえ書けば、 どんな環境でも「同じサーバー(コンテナ)が一瞬で構築できてしまう」ということです。 古くはLAMP環境の提唱、最近では「vagrant」の人気で「開発用のサーバー環境を持ち 歩く」のが当たり前になっていますが、Dockerはそれをさらに抽象化し、ポータブルにして しまいます。 さらに詳しい応用のしかたは、Dockerの開発元サイト(http://www.docker.io/)を 参照してみるとよいでしょう。 ・ω・`)ノ あっ!九時ら!| 2 ConoHaの17個のIPv6アドレスを活かせる Dockerでいくつものコンテナを立ち上げても、IPアドレスは親サーバーの1つを共有する しかありません。しかし、ご存知のとおり、ConoHaのVPSには無料で17個のIPv6アドレス が付属しています。多少ネットワークの設定が必要ですが、各コンテナに専用のアドレスを 割り振るというぜいたくな使い方ができます。実際に試してくださった方がいらっしゃるので、 以下のページを参考にチャレンジしてみてはいかがでしょう。 ● ConoHaで使えるIPv6アドレスをDockerで有効活用する(nabekenさん) http://projects.tsuntsun.net/~nabeken/diary/Sysadmin/conoha-docker-ipv6.html VPSは、まだまだ楽しくなる。 http://www.conoha.jp/ 「ConoHaの薄い本!」 vol.3 ConoHa+Dockerでサーバーをドカドカ立てよう! 2014年2月28日 初版発行 編集:ConoHaの中の人たち 発行者:児玉公宏 発行所:GMOインターネット株式会社 住所:東京都渋谷区桜丘町26-1セルリアンタワー TEL: 03-6702-0428
© Copyright 2024 ExpyDoc