前提・実現したいこと
Docker初心者です。
Dockerを使用して、以下のようなものを実現したいのですが、イメージが曖昧で環境構築で躓いています。(学習のため実施してます)
プログラミングそのものの勉強はしていますが、Eclipseや用意された環境で実施したため、インフラ周りが苦手です。
そもそも、DockerでJavaを使うのは微妙だとどこかで見たので、以下よりもっと現実的な方法あればご教示いただきたいです。
できれば重くなりたくないので、Eclipseなどの統合環境は使わない方法(Dockerの意味ない?と思っています)で実現しようとしています。
-
実現したいこと
- 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
回答1件
あなたの回答
tips
プレビュー