今回触っているサーバーには研究・開発用にとにかくいろんなものを放り込んで使ってみたい。
かと言って、物理的なインフラはサーバー1機(しかもXP世代のパソコンで、サーバー専用機でも何でもない)なので、リソースが潤沢にあるわけではない。
1機のサーバーにいろんなものを詰め込みたくても、OSだったりDBMSだったりのバージョンの問題で導入できないものだって出てくるだろう。
そういった問題を考えると、「仮想化」して仮想サーバーを必要に応じて立てればいいのだが、ホストOS型だとそれなりにリソースを食うし、ハイパーバイザー型は難易度が高いイメージがある。それ以前に、ハイパーバイザー型にするなら、自宅サーバーを立てる最初の時点で導入しておかないといけないので、とりあえずサーバを立てておいて、後から仮想環境を追加するといった使い方ができない。
で、今回は流行りの技術の学習も兼ねて、「コンテナ型仮想化」と言われている「Docker」を使ってみようというわけだ。
Dockerの情報を調べていると、結構たくさん情報は出てくるのだが、Dockerのどのバージョンのことか気をつけて見る必要がある。
CentOS6にDocker環境を構築した情報も多数あるが、これらはDocker v1.8以前の話で、v1.8からはCentOS6はサポート外。
また、2017年3月からはバージョン番号の振り方も大きく変わり、リリース年月とリビジョン番号を使ったバージョン番号となった。2017年3月のリリースは「v17.03.0-ce」となっており、「年(下2桁).月.リビジョン番号-ce」という付番になっている。
なお、Dockerを使うには、64ビットOSが必須。CentOS 7でも、32ビット版だと使用できない。
1.Dockerのインストール
Dockerのインストールは至って簡単。以下のコマンドでOK。
$ sudo yum install docker
setsebool: SELinux is disabled.
Stopping containers...
Cannot connect to the Docker daemon. Is the docker daemon running on this host?
"docker stop" requires at least 1 argument(s).
See 'docker stop --help'.
Usage: docker stop [OPTIONS] CONTAINER [CONTAINER...]
Stop one or more running containers
途中で上記のような気になるメッセージが出てきたのだが、インストールが途中でエラーになるようなことはなかった。
インストール中でもちろんDockerのデーモンなど起動しているわけないのだが、なぜかDockerコンテナを止めに行こうとしている??
インストールできたら、Dockerのサービスを起動&有効化しておく。
$ sudo systemctl start docker
$ sudo systemctl enable docker
2.Dockerのディレクトリ変更
いくらDockerがリソース節約できるといっても、ホストOS上のリソースを使うには使う。例えばコンテナファイル(動的に拡張され、1コンテナあたりMaxで10GB)の置き場所だが、デフォルトだと”/var/lib/docker”以下に作成される。
“/var”に大きな領域を取っているなら問題ないが、今回のサーバーはユーザーデータは極力別ディスクに追いやっていることもあり、”/var”を含むファイルシステムには50GBしか割り当てていない。(それでもCentOS本体や追加ソフトのバイナリには充分だと思うが)
なので、数十GB単位で容量を食うデータは別のファイルシステムに追いやらねば。
で、ディレクトリの変更だが、Dockerのサービス起動時に読む設定ファイルがあるので、それを編集すれば良いらしい。
【/etc/sysconfig/docker ファイル】
# Modify these options if you want to change the way the docker daemon runs
OPTIONS='--selinux-enabled --log-driver=journald --signature-verification=false -g /path/to/hoge/docker'
#赤字部分を追加
Dockerのサービスを止めてから、上記のファイルを編集してから、Dockerのサービスを起動すると、”/path/to/hoge/docker”以下にコンテナファイルの置き場所等、必要なディレクトリが作成される。
3.Dockerイメージを取得して起動
公式リポジトリから疎通確認用と思われる「hello-world」というイメージが取得できるので、それを取得して起動してみる。
$ sudo docker pull hello-world # docker pull 【イメージ名】
$ sudo docker run hello-world
$ sudo docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES7d0f0b18788d hello-world "/hello" 29 seconds ago Exited (0) 23 seconds ago agitated_shockleySTATUSがExitedと出るので、【hello-world】はガイダンスの簡単なメッセージ出して終わりのコンテナのようだ。
4.WebGUI(shipyard)のインストール
DockerをWebGUIで管理するツールもあり、その中に「shipyard」というものがある。
shipyard自身がDocker上で動くコンテナになっているようだ。
インストールはshipyardのサイトに方法が載っているが、コマンドひとつで全自動という方法があるので、とりあえず入れてみるなら全自動が楽。
少々時間がかかるが、インストールの最後に表示されるURL、ユーザー名、パスワードを使えばすぐにshipyardが使用できる。
# curl -s https://shipyard-project.com/deploy | bash -s
(中略)
Shipyard available at http://xxx.xxx.xxx.xxxx:8080 #Dockerが稼働しているサーバーのアドレス
Username: ****** Password: ******* #shipyardのWebGUIにアクセスするためのユーザー名とパスワードが表示
5.Java+Tomcatのコンテナを作ってみる
shipyardがあまりに簡単にコンテナを作れてしまったので、Java8+Tomcatのサーバーを立ててみる。
5.1 ホスト側に適当にフォルダを作り、Dockerfileを作る
$ mkdir /path/to/docker-test
$ cd /path/to/docker-test
$ vi Dockerfile
*Dockerfileの内容
#CentOSの最新版イメージを取得
FROM centos:latest#wgetコマンド、javaをインストールRUN yum -y install wget java#tomcatをダウンロードし展開(URLは'17/7/27時点。使いたいバージョン、ミラーサイトによって適宜書き換えること)RUN cd /opt; wget http://www-us.apache.org/dist/tomcat/tomcat-8/v8.5.16/bin/apache-tomcat-8.5.16.tar.gz; tar zxf apache-tomcat-8.5.16.tar.gz
#tomcatの展開先フォルダを作業ディレクトリとし、tomcatの開始スクリプトを叩く。また、Dockerのコンテナは何某かプロセスが起動していないと停止するとのことなので、ログファイルをtail -fで監視し、プロセスが起動した状態をキープしておく。
WORKDIR /opt/apache-tomcat-8.5.16
CMD ./bin/startup.sh; tail -f ./logs/catalina.out
5.2 先ほど作ったDockerfileを元にイメージの作成&コンテナの起動を行う
# docker build -t image-name . → カレントディレクトリのDockerfileを元にイメージの作成
# docker images → イメージの一覧を表示し、作成できていることを確認
# docker run -it -d -p 18080:8080 --name container-name image-name
→ コンテナを起動。[-p 18080:8080]のオプションで、ホストの18080番ポートとコンテナ側の8080番ポートをリンクさせている。
# docker ps -a → コンテナの状態を確認
ここまで行なって、エラーが出ていなければコンテナ作成は完了。
ブラウザから、http://(ホストOSのIP or URL):18080 にアクセスして、Tomcatの画面が表示されればOK。

コメント