スーパーバイザーを使用して nginx + tomcat コンテナを管理する例

スーパーバイザーを使用して nginx + tomcat コンテナを管理する例

必要:

docker を使用して nginx + tomcat デュアル プロセスを起動します。実際のアプリケーションでは、複数のプロセスが非常に一般的です。

1: Dockerfileディレクトリを作成する

mkdir -p /docker/web

2: Dockerfile を書き込む: /docker/web/Dockerfile

Centos7から

メンテナー lin [email protected]

CentOS-Base.repo をコピー /etc/yum.repos.d/CentOS-Base.repo

nginx_install.sh をコピー /tmp/nginx_install.sh

sh /tmp/nginx_install.sh を実行します。\rm -rf /usr/local/src/*

sed -i -e '/worker_processes/a daemon off;' /usr/local/nginx/conf/nginx.conf を実行します。

 

jdk-8u162-linux-x64.tar.gz をコピー /usr/local/src/jdk-8u162-linux-x64.tar.gz

tomcat_install.sh をコピー /tmp/tomcat_install.sh

sh /tmp/tomcat_install.sh を実行します。\rm -rf /usr/local/src/*

 

supervisor_install.sh をコピー /tmp/supervisor_install.sh

supervisord.conf をコピー /etc/supervisord.conf

コピー start_tomcat.sh /usr/local/tomcat/bin/mystart.sh

sh /tmp/supervisor_install.sh; を実行してください。\rm -rf /tmp/*.sh

3: Dockerfileに統合された設定ファイルとインストールファイル

3.1 デフォルトのソースダウンロードは遅いので、yumソースを変更し、次のCentOS-Base.repo構成ファイルをコンテナにコピーして変更します。

CentOS-Base.repo をコピー /etc/yum.repos.d/CentOS-Base.repo

[root@docker web]# cat CentOS-Base.repo 

[ベース]

name=CentOS-$releasever - ベース

ベースURL=http://mirrors.163.com/centos/$releasever/os/$basearch/

gpgcheck=1

gpgkey=ファイル:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 

#リリースされたアップデート

[更新]

name=CentOS-$releasever - アップデート

ベースURL=http://mirrors.163.com/centos/$releasever/updates/$basearch/

gpgcheck=1

gpgkey=ファイル:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 

#役に立つかもしれない追加パッケージ

[特典]

name=CentOS-$releasever - 追加情報

ベースURL=http://mirrors.163.com/centos/$releasever/extras/$basearch/

gpgcheck=1

gpgkey=ファイル:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

 

#既存のパッケージの機能を拡張する追加パッケージ

[セントオスプラス]

name=CentOS-$releasever - プラス

ベースURL=http://mirrors.163.com/centos/$releasever/centosplus/$basearch/

gpgcheck=1

有効=0

gpgkey=ファイル:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 

3.2nginx インストール スクリプト

[root@docker web]# cat nginx_install.sh 

yum install -y wget tar gcc gcc-c++ make pcre pcre-devel zlib zlib-devel openssl openssl-devel

 

/usr/local/src をコピーします

'http://nginx.org/download/nginx-1.12.2.tar.gz' を実行します。

tar -zxvf nginx-1.12.2.tar.gz

nginx-1.12.2をインストールします

./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-stream --with-stream_ssl_module

作る

インストールする

終了 0

3.3Tomcat インストール スクリプト

[root@docker web]# cat tomcat_install.sh 

yum インストール -y wget tar

/usr/local/src/ をコピーします

tar -zxvf jdk-8u162-linux-x64.tar.gz

mv jdk1.8.0_162 /usr/local/

#/usr/local/jdk1.8.0_162/bin/java -バージョン

 

#Java 環境変数を設定する echo 'JAVA_HOME=/usr/local/jdk1.8.0_162/' >>/etc/profile

echo 'PATH=$PATH:$JAVA_HOME/bin' >>/etc/profile

echo 'CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH' >>/etc/profile

ソース /etc/profile

 

https://mirrors.tuna.tsinghua.edu.cn/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz を実行します。

tar -zxvf apache-tomcat-8.5.38.tar.gz

Apache Tomcat 8.5.38 を実行します。

3.4 dockerfileファイルに含まれる設定ファイル、スクリプト、インストールパッケージは次のとおりです。

[root@docker web]# ll

合計 185384

-rw-r--r-- 1 ルート ルート 835 3月 9日 01:12 CentOS-Base.repo

-rw-r--r-- 1 ルート ルート 669 3月 9日 01:11 Dockerfile

-rw-r--r-- 1 ルート ルート 189815615 3月9日 01:15 jdk-8u162-linux-x64.tar.gz

-rw-r--r-- 1 ルート ルート 340 3月 9日 01:13 nginx_install.sh

-rw-r--r-- 1 ルート ルート 581 3月 9日 01:17 tomcat_install.sh

4: スーパーバイザーのワンクリックインストール: /docker/web/supervisor_install.sh

yum -y epel-release をインストールします
yum -y python2-pip をインストールします
pip インストール スーパーバイザー

5: スーパーバイザー設定ファイル: /docker/web/supervisord.conf

[unix_http_サーバー]

file=/tmp/supervisor.sock ; ソケットファイルへのパス

 

[監督者]

logfile=/tmp/supervisord.log; logfile_maxbytes=50MB; 最大 50MB logfile_backups=10; ローテーション内の 10 個のログ バックアップloglevel=info; ログ レベル レコード情報pidfile=/tmp/supervisord.pid;pid

nodaemon=true ; フォアグラウンドで起動 minfds=102400 ; ファイル記述子の制限 minprocs=2000 ; プロセス数 [rpcinterface:supervisor]

supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

 

[スーパーバイザーctl]

serverurl=unix:///tmp/supervisor.sock ; unix ソケットの場合は unix:// URL を使用します

 

[プログラム:nginx]

command=/usr/local/nginx/sbin/nginx ; フォアグラウンドでnginxを起動します

autostart=true; supervisor で自動的に起動しますstartsecs=10; 起動後 10 秒後に通常の起動と見なされますautorestart=true; プログラム終了後に自動的に再起動しますstartretries=3; 起動が失敗した場合の自動再試行回数stdout_logfile_maxbytes=20MB; stdout ログ ファイルの最大サイズは 20Mb です

stdout_logfile=/usr/local/nginx/logs/out.log

 

[プログラム:tomcat]

command=sh /usr/local/tomcat/bin/mystart.sh ; tomcatをフォアグラウンドで起動します

autostart=true; supervisor で自動的に起動しますstartsecs=10; 起動後 10 秒後に通常の起動と見なされますautorestart=true; プログラム終了後に自動的に再起動しますstartretries=3; 起動が失敗した場合の自動再試行回数stdout_logfile_maxbytes=20MB; stdout ログ ファイルの最大サイズは 20Mb です

stdout_logfile=/usr/local/tomcat/logs/catalina.out

6: tomcat 起動スクリプト /docker/web/start_tomcat.sh

#スーパーバイザーはソースを使用できないため、ソース/etc/profileを起動するスクリプトを作成する必要があります。

/usr/local/tomcat/bin/catalina.sh を実行

7: イメージを構築する

cd /docker/web
shijiange_web を実行します。

[root@docker web]# docker イメージ
リポジトリ タグ イメージ ID 作成 サイズ
shijiange_web 最新 bc06a9974252 7秒前 1.33 GB

8: コンテナテストを開始する

[root@docker web]# docker run -d shijiange_web /bin/bash -c 'supervisord -c /etc/supervisord.conf'

76782ab71c3b1d2f818ad76214d6336ae11a524eeb9d211f154fe4ad5226015d

[ルート@dockerウェブ]# 

[root@docker web]# docker ps

コンテナID イメージ コマンド 作成ステータス ポート名

76782ab71c3b shijiange_web 「container-entrypo...」 12秒前 12秒前 happy_jones

9. テスト検証:

[root@docker web]# docker exec -it 76782ab /bin/bash
bash-4.2# ifconfig 

10. コンテナの検証: curl nginx

11. コンテナの検証: curl tomcat

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Tomcat 7.0 で仮想ディレクトリを設定し、仮想パスを構成する方法
  • IDEAリモートデバッグを使用したTomcatの説明
  • TomcatはLog4jを使用してcatalina.outログを出力します。
  • Centos7.5 構成 Java 環境のインストール Tomcat の説明
  • Tomcat でのコネクタ構成
  • Tomcat が https アクセスをサポートするための手順の説明
  • Tomcat+Mysql の高同時実行構成の最適化の説明
  • Tomcatのデフォルトプログラム公開パスの使用と変更についての説明
  • tomcatでcatalina.outログをカットする3つの方法の詳細な説明
  • Linux で Tomcat を実行するいくつかの方法の説明

<<:  jsは赤い封筒の順序と量を指定するアルゴリズムを実装します

>>:  Reactイベントスロットリング効果が失敗する理由と解決策

推薦する

別の種類の「キャンセル」ボタン

「キャンセル」ボタンは必要な操作プロセスの一部ではなく、デザイン上の主要な要素として表示されません...

MySQL 完全崩壊: クエリフィルタ条件の詳細な説明

概要実際のビジネス シナリオ アプリケーションでは、ビジネス条件に基づいて対象データを取得およびフィ...

JSはカリキュラムタイムテーブルアプレット(スーパーカリキュラムタイムテーブルを模倣)を実装し、カスタムバックグラウンド機能を追加します

概要:市販されているいくつかのタイムテーブルソフトウェアから教訓を得ました。機能が複雑すぎるため、タ...

CSSに基づいてマウス入力の方向を決定する

以前、フロントエンド技術グループに所属していたとき、グループのメンバーが面接中に問題に遭遇したと言っ...

Vue で axios を使用して画像をアップロードするときに発生する問題

目次FormDataとは何ですか? vueとaxiosの協力による実践的な体験追加()セット()消去...

Nginx+Apache の動的および静的分離の導入の詳細な例

Nginx の動的および静的分離の概要Nginx は静的処理能力が強力ですが、動的処理能力が不十分で...

Vue 折りたたみ表示の複数行テキスト コンポーネントの実装コード

折りたたみ表示の複数行テキストコンポーネント複数行のテキスト コンポーネントを折りたたんで表示し、展...

WeChat アプレットのカスタム タブバー コンポーネント

この記事では、WeChatアプレットのカスタムタブバーコンポーネントの具体的なコードを参考までに紹介...

HTML iframe で親ページと子ページ間の双方向メッセージングを実装する例

ある日、リーダーはメイン ページに iframe を埋め込み、親ページと子ページ間で双方向にメッセー...

VMware10 での CentOS 7 のインストールと設定のチュートリアル

Ubuntu が今日のデスクトップ ユーザーの間で最も人気のある Linux オペレーティング シス...

WeChatアプレットはシンプルな計算機を実装する

参考までにWeChatアプレットで書かれた簡単な計算機です。具体的な内容は次のとおりです。 jisa...

MySqlのインストールとアンインストールに関する詳細なチュートリアル

この記事では、MySqlのインストールとアンインストールのチュートリアルを参考までに紹介します。具体...

特定の部門 ID に基づいて、すべての下位レベルの複数レベルのサブ部門を照会する MySQL の例

シミュレーションテーブルとデータスクリプト次の SQL ステートメントをコピーして、sys_dept...

Vue+Bootstrapでシンプルな学生管理システムを実現

参考までに、vueとbootstrapを使って比較的シンプルな生徒管理システムを作りました。具体的な...

JavaScriptの厳密モードが8進数をサポートしていない問題の説明

JavaScript厳密モードが 8 進数をサポートしていないという問題に関して、まず、 Java...