スパゲッティ生産所

コードの走り書きとかメモとか日常のこととか

VMwareにCoreOSをインストールしてnginxでサーバーを起動してみる

タイトルの通り。
現在管理しているアプリケーションを将来的にはDockerに乗せて運用したいと思っていたので、CoreOSの練習としてインストールしてみます。

VMにインストールするところまでは、
Docker1.0.0を記念して、ISO imageからCoreOSをインストールしてみた。
のブログを参考にして行いました。ここまでは詰まるところはありませんでした。

次に、CoreOS上にDockerコンテナを作成します。
まずはイメージをpullしてきます。今回はCentOSを使いました。

core@localhost ~ $ docker pull centos:latest
Pulling repository centos
0c752394b855: Download complete 
511136ea3c5a: Download complete 
34e94e67e63a: Download complete 

とりあえずこれを起動してみます。

core@localhost ~ $ docker run -it --name test1 centos /bin/bash
bash-4.1# 

ちゃんとbashが起動しました。
これに、nginxをインストールしてみます。
nginxのリポジトリを登録

bash-4.1# rpm -ivh http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
Retrieving http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
warning: /var/tmp/rpm-tmp.unaiUS: Header V4 RSA/SHA1 Signature, key ID 7bd9bf62: NOKEY
Preparing...                ########################################### [100%]
   1:nginx-release-centos   ########################################### [100%]

yumでnginxをインストール

bash-4.1# yum -y install nginx

バージョン確認

bash-4.1# nginx -v     
nginx version: nginx/1.6.0

nginxがインストールされました。
これを、VMの外から見れるようにします。
とりあえず今起動中のdockerコンテナを停止します。
今、nginxをインストールしたコンテナ(test1)から、新しいイメージnginx1を作ります。
コンテナを確認

core@localhost ~ $ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                       PORTS               NAMES
7db044814c26        centos:latest       /bin/bash           14 minutes ago      Exited (130) 2 seconds ago                       test1

このコンテナから新しいイメージを作成

core@localhost ~ $ docker commit 7db044814c26 nginx1
d92fb22f3ebc2ecf9c0be4e12cb7793640f7ffbc9eb525e483bdb3aaacb20cf3

イメージを確認すると、

core@localhost ~ $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
nginx1              latest              d92fb22f3ebc        48 seconds ago      187.3 MB
centos              latest              0c752394b855        4 weeks ago         124.1 MB

最初にpullしたcentosとは別に、nginx1というイメージができています。
ではこのnginx1から、nginxを実際に起動するためのコンテナを作成します。

core@localhost ~ $ docker run -t -i -p 8080:80 --name test2 nginx1 /bin/bash
bash-4.1#  

-pは、ホストとコンテナの間のポートのバインドを指定するためのもので、この場合はホストの8080ポートとコンテナの80ポートがバインドされています。

nginxを起動

bash-4.1# nginx

そして、このコンテナからデタッチします。ctrl^p ctrl^qでデタッチできます。
コンテナを確認

core@localhost ~ $ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                  NAMES
031c0904aeb4        nginx1:latest       /bin/bash           2 minutes ago       Up 2 minutes        0.0.0.0:8080->80/tcp   test2

コンテナtest2は起動中で、ポート8080が80にバインドされていることがわかります。
この状態でCoreOSを起動しているVMのアドレスにアクセスしてみると・・・・?

f:id:jimang_laurant:20140709013736p:plain


起動しているnginxにアクセスすることが出来ました!

本来ならば、nginx1からtest2を作る時には-iによる対話起動でなく、-dでバックグラウンド起動させたかったのですが、そうすると次にattachした時にbashのコンソールが出てこなかったりしてとても悩みました。
ちょっとまだ不安定で、本番環境で使うにはまだまだかかりそうですが、とても面白い技術だなーと思いました。ちょっとずづ勉強していこうと思います。

参考にしたページ
Docker1.0.0を記念して、ISO imageからCoreOSをインストールしてみた。
Dockerでnginxサーバー立ててみた。あとDockerの使い方とか。
いまさら聞けないDocker入門