前回、「Docker触ってみた~」と題して、
・Dockerってどんなもんなのさ?
・Docker使ってみるとどんな感じなのさ?
といったことをざーっくりと書きました。
Docker触ってみた~ (https://bitstar.jp/blog/?p=9456)
今日はその続編で、実際にDockerを触ってみよう、というところです。
この図は前回ご紹介したものですが、今回は右側のような環境を作ってみます。
この図ではDockerのコンテナが2つありますが、今回は、まず、Dockerのコンテナを1つ立てることにします。
コンテナを立てるには、
(1) 仮想化ソフトウェア上にゲストOSとしてLinuxを立てる
(2) ゲストOS上にDockerエンジンをインストールする
(3) ゲストOのDockerエンジン上にDockerコンテナを作成し、実行する
の手順を踏むことになります。
(1)は仮想環境構築の話になるので今回は割愛します。
VMWareやVirtualBoxなどで仮想環境があって、ゲストOSとしてCentOS 6がインストールされていて、インターネットに接続されている前提とします。
まず、CentOS 6にDockerエンジンをインストールします。
yumでインストールするので簡単です。
# yum -y install https://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# yum -y install docker-io
# /etc/init.d/docker start
# chkconfig docker on
これでDockerのエンジンをインストール・起動できました。
次に、CentOS6のイメージを立ち上げます。
# docker run –name “test-container” centos:centos6 /bin/bash
こうすれば、Dockerのコンテナが作られて、起動した後に/bin/bashを実行し、受付状態になりますが、このままだとまだ使い物になりません。
Dockerのコンテナに外部(たとえば仮想ゲストOSを動かしているホストOS側)からDockerに接続する場合、コンテナに入るポート番号とエンジン側のポートをマッピングさせ、外部からはエンジン側のIPアドレスとエンジン側のポート番号で接続します。
このポートのマッピングを指定してコンテナを起動します。
# docker run –name “test-container” -p 10022:22 -p 10080:80 -p 10443:443 centos:centos6 /bin/bash
※この例では、SSH、HTTP、HTTPSのポートマッピングを指定しています。
またSSHで外部から接続するには、Dockerのコンテナの /etc/ssh/sshd_config のファイルを修正してやる必要があります。
デフォルトでは
#UsePAM no
UsePAM yes
のように UsePAM yes が有効になっているはずですが、これを逆にする必要があります。
UsePAM no
#UsePAM yes
のように、noの方を有効にする必要があります。
こうすると、エンジン側のIPアドレスと10022番のポートでSSH接続すると、test-containerのコンテナにSSHで入ることができます。
あとは、Apache HTTPD、PHP、MySQL Serverを入れるとLAMP環境を作ることができます。
HTTP, HTTPSで外部から接続できるように、runするときのポート指定を増やします。
ただ、LAMP環境を作ったところで、もうひとつ注意があります。
Apache HTTPDやMySQL Serverをインストールして、
# chkconfig httpd on
# chkconfig mysqld on
のようにしても、Dockerのコンテナを立ち上げてもサービスを開始してくれません。
自動的にサービス開始する方法もあるみたいなのですが、まだ調べられていないので、Dockerコンテナ起動後に手動でサービス起動するようにしています。
※ssh、httpd、mysqldなど複数のサービスを起動するためのシェルスクリプトを作って、コンテナ起動後に実行すると楽です。
とりあえず今日はここまでとさせていただきます。
次回は、コンテナを作る基となるイメージを作って、LAMP環境が入っているコンテナを作ることができるようにしようかと思います。
(M.clacla)