🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

3735閲覧

Dockerを使用したJSP&サーブレット開発環境構築について

Anmos

総合スコア1

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2021/02/02 05:35

編集2021/02/02 06:41

前提・実現したいこと

Docker初心者です。
Dockerを使用して、以下のようなものを実現したいのですが、イメージが曖昧で環境構築で躓いています。(学習のため実施してます)
プログラミングそのものの勉強はしていますが、Eclipseや用意された環境で実施したため、インフラ周りが苦手です。

そもそも、DockerでJavaを使うのは微妙だとどこかで見たので、以下よりもっと現実的な方法あればご教示いただきたいです。
できれば重くなりたくないので、Eclipseなどの統合環境は使わない方法(Dockerの意味ない?と思っています)で実現しようとしています。


  • 実現したいこと

    1. MySQL上にテーブル・データを保持

 1. JSP&サーブレットで結果を画面表示(データ内容を変更できるテストボックスも画面に作る)
2. 変更あれば、データベースの内容を書き換える

この一連の処理をするWebアプリをDockerで実現したい

 <イメージ>
DockerのMySQLデータベースに接続し、データを処理(Java)+画面表示(JSP)するプログラムを
DockerでWarファイルへビルド
し、それをDockerのTomcatにデプロイする → ブラウザで画面を開き動作確認


  • 現状

 Tomcat、MySQL、nginxのイメージ作成、コンテナ作成(DockerCompose)

 →TomcatのDeproymentフォルダをVolumeでマウントしているので、
warがあれば動くはず。。。なのですが、上記の<イメージ>のようにする実現方法がよくわかっていないです。。
(<イメージ>の太字箇所の関連、実現方法、イメージが特によくわかっていない)

補足情報(FW/ツールのバージョンなど)

(詳しくないので、必要な情報が洩れていたら追記します。)
MacOS
DockerforMac

http://joytas.net/programming/jspservlet08
こちらのサイトのようなプログラムをDockerで作りたい
Dockerの設定はこのサイトを参考にしています。(https://ucwork.hatenablog.com/entry/2018/08/19/172548)
プログラムをビルドし、できたwarをデプロイするところをDockerで実現する箇所を自分で追加しようと思い、躓いています。

  • 現状のディレクトリ構成
. ├── docker │ ├── mysql01 │ │ ├── Dockerfile │ │ └── config │ │ └── charset.cnf │ ├── nginx01 │ │ ├── Dockerfile │ │ └── conf │ │ └── nginx.conf │ └── tomcat01 │ ├── Dockerfile │ ├── conf │ │ └── supervisord.conf │ └── deployment ├── docker-compose.yml
  • docker-compose.yml
version: '3' services: web01: container_name: nginx01 build: ./docker/nginx01 image: nginx01:1.0.0 ports: - "80:80" environment: TZ: "Asia/Tokyo" volumes: - ./docker/nginx01/conf:/etc/nginx/conf.d extra_hosts: - "tournament.local:127.0.0.1" servlet01: container_name: tomcat01 build: ./docker/tomcat01 image: tomcat01:1.0.0 environment: TZ: "Asia/Tokyo" expose: - "8080" ports: - "8000:8000" volumes: - ./docker/tomcat01/deployment:/usr/local/tomcat/webapps/:rw db01: container_name: mysql01 build: ./docker/mysql01 image: mysql01:1.0.0 command: >- /entrypoint.sh mysqld --slow_query_log=3 --long_query_time=3 --slow_query_log_file=/var/log/mysql/slow.log environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: tournament TZ: "Asia/Tokyo" ports: - "3306:3306" volumes: - data:/var/lib/mysql volumes: data: {}
  • Nginx設定ファイル
server { listen 80; server_name tournament.local; access_log /var/log/nginx/tomcat_access.log; error_log /var/log/nginx/tomcat_error.log; location / { proxy_set_header X-Forwarded-Host $host:$server_port; proxy_set_header X-Forwarded-Server $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://servlet01:8080/tournament/; index index.html index.htm; } }
  • Tomcat DockerFile 、設定ファイル
FROM tomcat:8.0-jre8-alpine # set server defautlt setting RUN apk --update add tzdata perl curl openssh openrc supervisor && \ rm -rf /var/cache/apk/* ENV TZ Asia/Tokyo # access to velocity frmo jboss ENV JAVA_OPTS="-Dspring.profiles.active=local" ENV JPDA_ADDRESS=8000 ENV JPDA_TRANSPORT=dt_socket # start tomcat & sshd COPY ./conf/supervisord.conf /etc/supervisor/conf.d/supervisord.conf CMD /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf
[supervisord] nodaemon=true [program:sshd] command=/usr/sbin/sshd -D [program:tomcat] command=/usr/local/tomcat/bin/catalina.sh jpda run
  • MySQL DockerFile 、設定ファイル
FROM mysql:5.6 # 設定ファイルを配置 # (MySQLは設定ファイルの権限が777だと読み込まない) COPY config /etc/mysql/conf.d/ RUN chmod 644 /etc/mysql/conf.d/* RUN apt-get update && \ apt-get install -y locales && \ rm -rf /var/lib/apt/lists/* && \ echo "ja_JP.UTF-8 UTF-8" > /etc/locale.gen && \ locale-gen ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8
[mysqld] explicit_defaults_for_timestamp = 1 character-set-server=utf8 sql_mode=NO_ENGINE_SUBSTITUTION [mysql] default-character-set=utf8

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hentaiman

2021/02/02 06:08

質問するのに必要な情報は、現在の質問者の環境を再現できるだけの情報・ファイルです。それがあれば文字での説明は最小限で十分です。
Anmos

2021/02/02 06:26 編集

回答ありがとうございます! http://joytas.net/programming/jspservlet08 こちらのサイトのようなプログラムをDockerでビルド+実行+ローカルホストに公開してローカルブラウザで動作確認したいのですが、その環境設定がよくわかっていないという状態です。 (当サイトは、ローカルのeclipseで開発しています) Dockerの設定は以下のサイトのをいったん丸々コピペして、 プログラムをビルドし、できたwarをデプロイするところをDockerで実現する箇所を自分で追加しようと思い、躓いています。 https://ucwork.hatenablog.com/entry/2018/08/19/172548
hentaiman

2021/02/02 06:29

何をやりたいかではなくて、今のdocker-compose関連のファイルを質問に追記(量が多ければgithubなどに載せる)する必要があるという意味です。 それらを見れば何を勘違いしてるのかとか何を間違っているのかとか答えられるかもしれないじゃないですか。他にも質問者の状況を再現するのに必要な情報があれば載せましょう。
Anmos

2021/02/02 06:43

アドバイスありがとうございます!初心者でご迷惑をおかけして申し訳ないです。 GitHubのアカウントは持っておらずこちらも勉強中なので見づらいかもしれませんが、 質問に関連ファイルを追記しました。
hentaiman

2021/02/02 07:04

見た感じnginxまでは届くけどそこからservletに届かないっていうエラーを解決すれば良さそうですかね?
Anmos

2021/02/03 03:12

はい!お手数をおかけしますがよろしくお願いいたします。
guest

回答1

0

ベストアンサー

nginx.conf

server { # ~省略~ # #proxy_pass http://servlet01:8080/tournament/; # #下記に変更↓ proxy_pass servlet01:8080/tournament/; # ~省略~ } }

docker-compose.yml

services: web01: container_name: nginx01 ~省略~ #下記追加 depends_on: - servlet01

以下オマケ

不要な記述

ports: - "8000:8000" ports: - "3306:3306"

投稿2021/02/03 04:29

hentaiman

総合スコア6426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Anmos

2021/02/04 05:05

わかりやすい回答ありがとうございました!無事WEBアプリの画面が表示されるようになりましたが アプリ上でデータ登録する処理のとき、MySQLへのデータの書き込みが行われていないようです。 画面には、データ登録処理後のメッセージが表示され不具合は起きないものの、データベースが空っぽな状態です。
hentaiman

2021/02/04 05:21

画面上のエラー表示はプログラムの作り方次第でいくらでも握り潰せるので、mysql側のログを出力してまずはSQLが正しく実行されている事を確認しましょう。 けどまあ分かりやすい手順で行くなら、tomcatのコンテナで実行しているSQLして、tomcatのコンテナ上からmysqlコマンドでmysqlコンテナにつないでSQLを実行できることを確認しましょう。
Anmos

2021/02/04 07:15

>tomcatのコンテナで実行しているSQLして、tomcatのコンテナ上からmysqlコマンドでmysqlコンテナにつないでSQLを実行できることを確認しましょう。 tomcatのコンテナにexecで入り、mysqlコマンドをたたくということでしょうか。 bash:mysql: command not found と表示されました。
hentaiman

2021/02/04 08:27

そうです Mysqlクライアントインストールしないと使えませんよ コンテナ間の接続確認なのでインストールするしかありません
Anmos

2021/02/05 09:13

上記確認したところ、うまく接続できていませんでした。Javaアプリの方で接続設定の記載ミスがあり、修正したところ正常に動作しました!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問