第16回 1つのDockerコンテナでサービスをたくさん動かすには?(応用編):古賀政純の「攻めのITのためのDocker塾」(2/3 ページ)
Dockerコンテナで複数のサービスを動かすポイントを解説しましたが、今回はその応用編として具体的に3つの方法をご紹介します。
複数のサービスを起動させる方法・Supervisor
複数のサービスを稼働させるために、ラッパースクリプトを使わない方法もあります。その一つが、「Supervisor」(スーパーバイザ)と呼ばれるソフトウェアの導入です。
Supervisorは、複数のプロセスをまとめて管理するもので、プロセスの死活監視、プロセスのログの取得、プロセスの再起動などが行えます。元々はプロセス管理のソフトウェアですので、非Docker環境においても利用でき、複数のプロセスを同時にバックグラウンドで稼働させ、かつ、監視したい場合に有用です。特にDocker環境では複数のデーモンをコンテナ内で同時稼働させるツールとして、広く利用されています。
Supervisorは、稼働させたいサービスを「/etc/supervisord.conf」ファイルに記述します。以下は、httpdデーモンとvsftpdデーモンを同時に稼働させる場合の「/etc/supervisord.conf」ファイルの例です。
# cat supervisord.conf [supervisord] nodaemon=true [program:httpd] command=/usr/sbin/httpd -k start [program:vsftpd] command=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
上記の設定例ではhttpdとvsftpdの起動に関する処理を1つのsupervisord.confファイルに記述していますが、サービスごとに設定ファイルを分けて記述し、「/etc/supervisord.conf」ファイルからサービスごとの設定ファイルをロードする方法もあります。Supervisorの設定ファイルに関する情報はこちらのWebサイトにあります。監視対象となるプロセスを細かく制御できますので、ご一読をお勧めします。
Docker環境の場合、コンテナにSupervisorをインストールし、あらかじめ用意しておいた上記のsupervisord.confファイルをコンテナ内の/etcディレクトリにコピーするのが一般的です。以下に、Supervisorでhttpdとvsftpdを同時に稼働させるDockerfileを示します。上記のsupervisord.confファイルは、Dockerfileと同じディレクトリに用意してください。
# mkdir /root/supervisor_httpd_vsftpd # cd /root/supervisor_httpd_vsftpd # vi Dockerfile FROM centos:centos7.2.1511 MAINTAINER Masazumi Koga ENV container docker ENV http_proxy http://proxy.proxy.your.site.com:8080 ENV https_proxy http://proxy.proxy.your.site.com:8080 RUN yum update -y && yum clean all RUN yum install -y epel-release RUN yum install -y supervisor iproute httpd vsftpd && yum clean all RUN echo "Hello Apache." > /var/www/html/test1.html RUN echo "Hello Vsftpd." > /var/ftp/pub/test2.txt COPY supervisord.conf /etc/ EXPOSE 80 ENTRYPOINT ["/usr/bin/supervisord"]
このDockerfileでは、ホストOS上に用意したsupervisord.confファイルをコンテナ内の/etcディレクトリにCOPYを使ってコピーしています。また、ENTRYPOINTで「/usr/bin/supervisord」を指定することにより、コンテナ起動時に「/usr/bin/supervisord」が起動します。すると、コンテナ内の「/etc/supervisord.conf」ファイルに記載されたサービス群(今回はhttpdデーモンとvsftpdデーモン)が起動します。実際にコンテナを起動し、プロセスを確認してみてください。
# pwd /root/supervisord_httpd_vsftpd # docker build -f ./Dockerfile -t centos:c7apache_ftp01 --no-cache=false . # docker run -itd --name web0003 centos:c7apache_ftp01 # docker exec -it web0003 ps -ef
関連記事
- 第9回 Dockerfileで“インフラストラクチャ・アズ・コード”を体験
“攻めのIT”を考える情シスリーダーが今後知っておくべき注目の技術「Docker」を基本から応用まで解説します。今回のテーマは「Dockerfileでインフラストラクチャ・アズ・コードを実体験」です。 - 第14回 「延命措置」で旧システムからDocker環境に移行する方法
古いIT資産をDocker環境へ移行するには多面的な検証が必要です。今回は「延命措置」のシナリオから、実際に古い物理サーバからDocker環境へ移行する手順を紹介します。 - 第13回 “根が深い”旧システムからDocker環境への移行をどうするか
いざ古い物理サーバや仮想化基盤からDocker環境に移行しようとすると、実に“根が深い”さまざまな課題に直面することになるでしょう。Dockerへの移行について知っておくべき必要最低限のポイントを解説します。 - 【古賀政純の「攻めのITのためのDocker塾」】バックナンバー
Copyright © ITmedia, Inc. All Rights Reserved.