ConoHa + Dockerでサーバーをドカドカ立てよう!

8
http://www.conoha.jp/

Transcript of ConoHa + Dockerでサーバーをドカドカ立てよう!

Page 1: ConoHa + Dockerでサーバーをドカドカ立てよう!

http://www.conoha.jp/

Page 2: ConoHa + Dockerでサーバーをドカドカ立てよう!

 ConoHaは一台の物理サーバーの上で何台かの仮想

サーバーが動く「VPS」です。でも、VPSって自由度が高い

だけに設定するところが多すぎて面倒ですね。VPSの中に

さらに小さな仮想サーバーを立ち上げて、用途別に動か

せたら便利なのに…。こういう人に最適なのが、サーバー

の中に「コンテナ」という“子サーバー”を立てるコンテナ型

仮想化です。そのためのパッケージとして近ごろ注目されて

いるのが「Docker」というもの。これを使うと、ConoHaの

サーバーに中にさらにドカドカとサーバーを立てることが

できてしまいます。ちょっと楽しそうですね。あなたもやって

みませんか?

まえがき

■ Dockerでコンテナを立ち上げる■ DockerfileでWebサーバーのイメージ・コンテナをつくる

■ とりあえずConoHaでVPSを1台契約済みであること。  [標準OS] CentOS 6.4(64bit)を使用していることを前提にご説明します■ Webサーバーのインストール程度はできる知識がある

前 提

目 標

親父ギャグやね(・ω・)y

Page 3: ConoHa + Dockerでサーバーをドカドカ立てよう!

I. はじめのいっぽ

 「Dockerを導入する」というと、以前はいろいろとめんどくさかったのですが今はEPELリポジトリから yum 一発で入ってしまいます。

 これで、DockerがホストOS側でいつも起動している状態になりました。次に“子サーバー”=コンテナになるOSをセットアップしましょう。これも簡単で、Dockerの提供元から各ディストリビューションのイメージがある程度提供されています。ここではCentOS

6.4のイメージを引っ張ってきます。

とにかくDockerを導入してみる1

コンテナを起動してみる2

# 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-release-6-8.noarch.rpm# yum -y install docker-io# service docker start

# docker pull centosPulling repository centos539c0211cd76: Download complete

 ファイルサイズとしては300MB程度しかないのであっというまに終わったんじゃないで

しょうか。ここで見てわかるように、Dockerのコマンド群は基本的に「docker なになに」というかたちで呼び出します。いま手元にどんなイメージがあるかをリストアップするには

「docker images」を使います。

 これでひととおりの用意ができました…と言いたいところですが、あともうひとつ。

dockerコマンドを使いやすくするためのお約束の呪文 alias を bash に追加しておきましょう。

 これで、dl という alias が追加され、コンテナ名を参照しやすくなります。

 とにかく、“子サーバー”=コンテナとやらを立ち上げてアクセスしてみたいですね。それにはdocker run コマンドを使います。

# docker imagesREPOSITORYcentoscentos

TAG6.4latest

IMAGE ID539c0211cd76539c0211cd76

CREATED10 months ago10 months ago

VIRTUAL SIZE300.6 MB300.6 MB

# echo "alias dl='docker ps -l -q'" >> ~/.bashrc

Page 4: ConoHa + Dockerでサーバーをドカドカ立てよう!

これは「centosというイメージを使ってbashを起動してね。そのとき標準入出力を端末につなげたままにしてね」という意味になります。うまくいけば

という、bashのコマンドラインが表示されるはずです。さぁ、これでもうコンテナ側の世界に

入りました。cat のような一般コマンドも、外部ネットワークへのping もふつうに動くはずです。

とりあえず満足したら、exit でbashを終了させてください。ホストOSに戻り、コンテナは終了させられます。

bash-4.1#

bash-4.1# exit

# docker run -i -t centos /bin/bashDocker #

bash-4.1# cat /etc/redhat-releaseCentOS release 6.4 (Final)bash-4.1# ping www.yahoo.co.jpPING 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

# docker run -i -t centos /bin/bash

II. 自分好みの女=コンテナを育てる

telnetコマンド入りコンテナをつくる1

 これだけだと他人の押し付けのコンテナしか使えないですね。なんかバリバリカスタマイズ

したコンテナが欲しいです。ちなみにはじめの状態だとtelnetコマンドすら入っていません。

じゃあ、telnetコマンド入りコンテナを作ってみましょう。

最初に、「centosイメージを元に作業するからもう一度bashを触らせてくれ」とお願いしましょう。

Docker # telnet localhost 80bash: telnet: command not found

 ふつうにDockerのコンテナが起動しましたね(以下、Dockerコンテナ内のコマンドライン

は Docker # と書きます)。

 ごらんのとおり、telnetコマンドがありません。21世紀にtelnetコマンドすらないとは!

ということで yum でインストールします。終わったらさっさとログアウトしちゃいましょう。

女房との出会いを思い出すわ(́

ε`●)

Page 5: ConoHa + Dockerでサーバーをドカドカ立てよう!

Docker # yum -y install httpdDocker # exit# docker commit `dl` conoha/apache

# docker run -p 80:80 -i -t conoha/apache /usr/sbin/httpd -D FOREGROUND

# bg

 たしかにあるみたいですが、念のために作ったイメージを立ち上げて使ってみましょう。

 結果はともかくインストールされているみたいです。

# docker imagesREPOSITORYconoha/telnetcentoscentos

TAGlatest 6.4latest

IMAGE IDdf287aa8b65f539c0211cd76539c0211cd76

CREATED

About a minute ago

10 months ago

10 months ago

VIRTUAL SIZE340.7 MB300.6 MB300.6 MB

# docker run -i -t conoha/telnet /bin/bashDocker # telnet localhost 80Trying 127.0.0.1...telnet: connect to address 127.0.0.1: Connection refused

Webサーバー入りコンテナをつくる2

 おなじようにApache Webサーバー入りのコンテナも作ることができます。

 docker ps コマンドを使うとコンテナが動いている状態を確認できます。

 このイメージからApacheの動作しているコンテナを起動するには、以下のようにする必

要があります。「httpdを起動して、ホストの80番ポートとコンテナの80番ポートをつなげて」という意味です。

 これをやるといきなりhttpdが動いてしまい、こちらの操作に応えなくなります。CTRL-P CTRL-Qを押してやると一時的にプロセスをサスペンドしてコマンドラインに戻ることができるので、bg コマンドでバックグラウンドに逃がしましょう。

Docker # yum -y install telnetDocker # exit

# docker commit `dl` conoha/telnetdf287aa8b65f8152f6f928f07eb210f8d0c916a8e8ba7170d069acf61990bb2c

 コンテナを終了させたら、それを新しいイメージとして保存しておくことができます。

イメージの名前は「自分の名前/なんとかかんとか」にすることが推奨されているので、ここでは「conoha/telnet」にします。

 これでホントに保存されたかな? docker images で確認しましょう。

Page 6: ConoHa + Dockerでサーバーをドカドカ立てよう!

# docker run -p 80:80 -d conoha/anotherapache

# docker kill compassionate_fermat

FROM centosRUN yum -y install telnetRUN yum -y install httpdCMD ["/usr/sbin/httpd", "-D", "FOREGROUND"]

# mkdir -p ~/docker/anotherapache# vi ~/docker/anotherapache/Dockerfile

# docker build -t conoha/anotherapache ~/docker/apacheSuccessfully built 36a0fe96f3d6

# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc9a1370f4e1d conoha/anotherapache:latest /usr/sbin/httpd -D F 5 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp backstabbing_poincare

# docker psCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESc5f373ca398c conoha/apache:latest /usr/sbin/httpd -D F 50 seconds ago Up 49 seconds 0.0.0.0:80->80/tcp compassionate_fermat

III. もうちょっとちゃんとWebサーバーを立てるDockerfileを使う1

 Dockerには「Dockerfile」というものがあります。作成手順や起動するコマンドを書くと、そのとおりのイメージを作ってくれる設定ファイルです。これを利用して、もうちょっと使いや

すいサーバーのコンテナができないか試してみましょう。

 ここでは̃/docker/anotherapache/Dockerfile として設定ファイルを作ります。

 でも、これじゃサーバーのコンテナを自動起動させたりしづらいですね。

 Dockerfileの内容は以下のとおり:

 こんどはふつうにコマンドラインに戻ってきましたね。docker ps でも

 などとすればイメージファイルのできあがり。そして、docker run を以下のように実行します。

 これは「centosというイメージを元にいくつかyumを実行してイメージを作ってね。起動するときはhttpdを呼び出すんだよ」という設定になっています。vi を終了させたら、

途中で改行されてんの、気にせんといてぇ〜(・́ з̀・)

 telnetで80番ポートを叩くと確かにWebサーバーが動いています。確認できたらdocker ps の右端に表示されていたコンテナの名前を指定して、コンテナを終了させましょう。

 Webサーバーのコンテナが動作しているのを確認できます。

やればできるやないか(・ω・)y

Page 7: ConoHa + Dockerでサーバーをドカドカ立てよう!

あっ!九時ら!|・ω・̀)ノ

IV. DockerとConoHaの意外な相性

Dockerのなにがうれしい?1

2

 さて、簡単にDockerの使い方を見てきましたが、いったいどんなところがうれしいので

しょうか。それはなんといっても、最後に触れた「Dockerfile」のような定義さえ書けば、

どんな環境でも「同じサーバー(コンテナ)が一瞬で構築できてしまう」ということです。

 古くはLAMP環境の提唱、最近では「vagrant」の人気で「開発用のサーバー環境を持ち

歩く」のが当たり前になっていますが、Dockerはそれをさらに抽象化し、ポータブルにして

しまいます。

 さらに詳しい応用のしかたは、Dockerの開発元サイト(http://www.docker.io/)を参照してみるとよいでしょう。

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

やればできるやないか(・ω・)y

Page 8: ConoHa + Dockerでサーバーをドカドカ立てよう!

VPSは、まだまだ楽しくなる。

2014年2月28日 初版発行

編集:ConoHaの中の人たち

発行者:児玉公宏

発行所:GMOインターネット株式会社

住所:東京都渋谷区桜丘町26-1セルリアンタワー

TEL: 03-6702-0428

「ConoHaの薄い本!」vol.3 ConoHa+Dockerでサーバーをドカドカ立てよう!

http://www.conoha.jp/