DockerでTomcatとNginxの構築をやってみた
ゴール
ポート8081を使用してTomcat管理コンソールへの接続確認
ポート8080を使用してNginxへの接続確認
リバースプロキシ設定をして8080ポートを使用してtomcat管理コンソールへの接続確認
前提条件
Dockerがインストールされていること
外部接続可能なネットワークであること
DockerFileの作成
Dockerfile:Dockerイメージの構築手順書みたいなもの
touch dockerfile vi dockerfile
FROM amazonlinux:latest RUN yum -y update RUN rpm -ivh http://nginx.org/packages/rhel/7/noarch/RPMS/nginx-release-rhel-7-0.el7.ngx.noarch.rpm RUN yum install -y nginx RUN yum install -y tomcat tomcat-admin-webapps RUN sed -i -e 's/.*<role rolename="admin-gui"\/>.*/<role rolename="admin-gui"\/>/' /usr/share/tomcat/conf/tomcat-users.xml RUN sed -i -e 's/.*<role rolename="manager-gui"\/>.*/<role rolename="manager-gui"\/>/' /usr/share/tomcat/conf/tomcat-users.xml RUN sed -i -e 's/.*<user name="admin".*/<user name="admin" password="tomcat" roles="admin-gui,manager-gui"\/>/' /usr/share/tomcat/conf/tomcat-users.xml EXPOSE 80 EXPOSE 8080 RUN systemctl enable nginx.service RUN systemctl enable tomcat.service
FROM:dockerイメージ の指定。1行目を FROM 命令で指定する必要有り
RUN:コマンドの実行
EXPOSE:ポートのエクスポート
rpm:rpmパッケージ管理
-i:パッケージをインストール
-v:情報表示を増やす
-h:インストール時の経過を「#」で表示する
sed:文字列の置換
-i:ファイルを直接編集する
-e:スクリプト(コマンド)を追加する
今回のDockerFileでは下記を記述
①直近のAmazonlinuxOSをベースとして構築 ②yumの更新 ③Nginxリポジトリの登録 ④Nginxのインストール ⑤TomcatとTomcat管理コンソールのインストール ⑥omcat-users.xmlファイルの編集 ⑦ポート設定 ⑧NginxとTomcatの起動設定
管理コンソール設定
user:admin
password:tomcat
念の為、既存Dockerプロセスの確認と停止&削除
sudo su - docker ps docker stop <DockerID> docker rm <DockerID>
作成したDockerfileを使用してビルド
ls docker build -t websv - < dockerfile
docker build:dockerイメージをビルド
-t:名前を付与
上記の場合、'dokcerfile'というdockerfileを指定してwebsvという名前でビルドするという意味になる
コンテナ起動
docker run --privileged -itd -p 8080:80 -p 8081:8080 --name WebApp websv /sbin/init
docker run:コンテナの起動
--privileged:コンテナに対して拡張権限でを付与
-itd:コンテナをバックグランドで実行
-p:コンテナのポートをホスト側に公開
※8080:80→ホストOS側の8080ポートをコンテナの80ポートに割り当てる
--name:名前の指定
※--name WebApp websv→WebAppという名前でwebsvイメージを使用
/sbin/init:コンテナ起動時に/sbin/initを実行 。
※コンテナ内で複数のプロセスを起動管理したい場合に使用
コンテナID確認&コンテナ内部への接続確認
docker ps docker exec -it <DockerID> /bin/bash pwd uname -n
docker exec:対象のコマンドを実行する
-it:標準入力で操作する
/bin/bash:bashプロセスを新規で立ち上げ
結果は画像の通り
bashプロセスでDocker内部を操作が出来るようになっています
uname -n
コマンドで出力される結果がコンテナIDになるのが面白い
Nginxとtomcatのステータス確認
systemctl status Nginx systemctl status tomcat
因みにexit
で抜けれます
ブラウザで接続確認
EC2のパブリックIP:8080でNginx
EC2パブリックIP:8081/manager/html
いけてますね。この猫久々に見た
リバースプロキシ設定
コンテナ内部に接続してNginxのconfファイルを編集
docker exec -it <DockerID> /bin/bash cd /etc/nginx/conf.d ls cp -pi default.conf default.conf_org vi default.conf
下記がデフォルトのconfファイル
server { listen 80; server_name localhost; #charset koi8-r; #access_log /var/log/nginx/host.access.log main; location / { root /usr/share/nginx/html; index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} }
設定追記
※IP:ポート/tomcat
で接続できるように設定
location /tomcat { proxy_pass http://localhost:8081/manager/html; }
Nginx再起動
systemctl restart nginx
接続確認 EC2パブリックIP:8080/tomcat
一応いけた
ただ、まだこれだけじゃ不十分...