この CookBook では、Payara の Docker の作成手順について紹介しています。
レシピ
- ベースイメージの作成
- Payara の Docker イメージを作成します
- 実行します
1. ベースイメージの作成
CentOS 6.9 を使用します。
Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
FROM centos:centos6.9 EXPOSE 22 ENV DEBIAN_FRONTEND noninteractive # yum RUN yum -y update && yum clean all # locale RUN yum reinstall -y glibc-common RUN localedef -i ja_JP -f UTF-8 ja_JP.utf8 RUN touch /etc/sysconfig/i18n RUN echo 'LANG="ja_JP.UTF-8"' >> /etc/sysconfig/i18n ENV LANG ja_JP.UTF-8 ENV LC_ALL ja_JP.UTF-8 ENV LANGUAGE ja_JP:ja # timezone RUN yum install -y tzdata RUN echo 'ZONE="Asia/Tokyo"' > /etc/sysconfig/clock RUN echo 'UTC=false' >> /etc/sysconfig/clock RUN ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime # tools RUN yum groupinstall -y 'Development Tools' RUN yum install -y --enablerepo centosplus wget curl vim emacs tar unzip mlocate perl ssh openssh-server openssl-devel # root passwd RUN bash -c 'echo "root:password" | chpasswd' # ssh RUN sed -i -e "s/#PasswordAuthentication yes/PasswordAuthentication yes/g" /etc/ssh/sshd_config RUN sed -i -e "s/#PermitRootLogin yes/PermitRootLogin yes/g" /etc/ssh/sshd_config RUN sed -i -e "s/UsePAM yes/UsePAM no/g" /etc/ssh/sshd_config RUN updatedb CMD /etc/init.d/sshd restart && /bin/bash |
ロケールを ja_JP, タイムゾーンを Asia/Tokyo に変更し、root/password で ssh 接続ができるように設定します。
mycentos:6.9 というタグでビルドします。
1 |
docker build -t mycentos:6.9 . |
2. Payara の Docker イメージを作成します
先ほど作成したベースイメージを利用します。
jdk-8u191-linux-x64.tar.gz と payara-5.184.zip, JDBC Driver(ojdbc8.jar, postgresql-42.2.2.jar, sqljdbc42.jar) を事前にダウンロードしておきます。
Dockerfile
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
FROM mycentos:6.9 EXPOSE 4848 4900 5701 5900 8080 28080 9009 29009 5200 ENV DEBIAN_FRONTEND noninteractive # yum RUN yum -y update && yum clean all RUN yum -y upgrade && yum -y update && yum clean all RUN yum install -y --setopt=protected_multilib=false epel-release ld-linux.so.2 libstdc++.so.6 libpng12 RUN yum install -y multitail ncurses-devel ncurses-static ncurses-term nc # JDK COPY jdk-8u191-linux-x64.tar.gz /jdk-8u191-linux-x64.tar.gz COPY setup_jdk.sh /setup_jdk.sh RUN chmod u+x /setup_jdk.sh RUN /setup_jdk.sh RUN rm -f /setup_jdk.sh ENV JAVA_HOME /usr/local/java/jdk ENV PATH /usr/local/java/jdk/bin:$PATH RUN echo 'JAVA_HOME=/usr/local/java/jdk' >> /root/.bashrc RUN echo 'PATH=$PATH:/usr/local/java/jdk/bin' >> /root/.bashrc RUN rm -f /jdk-8u191-linux-x64.tar.gz # Payara COPY payara-5.184.zip /payara-5.184.zip COPY setup_payara.sh /setup_payara.sh RUN chmod u+x /setup_payara.sh RUN /setup_payara.sh RUN rm -f /payara-5.184.zip COPY ojdbc8.jar /var/payara/payara/glassfish/lib/ojdbc8.jar COPY postgresql-42.2.2.jar /var/payara/payara/glassfish/lib/postgresql-42.2.2.jar COPY sqljdbc42.jar /var/payara/payara/glassfish/lib/sqljdbc42.jar COPY run.sh /run.sh RUN chmod +x /run.sh RUN updatedb CMD /run.sh |
細かいセットアップはシェルスクリプトに逃がし、Dockerfile からはそれを実行するようにします。
これにより、Dockerfile をシンプルにでき、かつイメージ容量の削減にもつながります。
netcat と multitail を利用したいためインストールしています。
setup_jdk.sh
1 2 3 4 5 6 |
#!/bin/sh tar zxvf /jdk-8u191-linux-x64.tar.gz mkdir -p /usr/local/java mv jdk1.8.0_191 /usr/local/java/jdk1.8.0_191 ln -s /usr/local/java/jdk1.8.0_191 /usr/local/java/jdk |
Payara のセットアップスクリプトです。
setup_payara.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
#!/bin/sh unzip /payara-5.184.zip rm -f /payara-5.184.zip mkdir -p /var/payara mv payara5 /var/payara/payara5 ln -s /var/payara/payara5 /var/payara/payara /var/payara/payara/bin/asadmin create-service domain1 echo -e 'AS_ADMIN_PASSWORD=\nAS_ADMIN_NEWPASSWORD=password' > /var/payara/payara/glassfish/lib/old_password echo 'AS_ADMIN_PASSWORD=password' > /var/payara/payara/glassfish/lib/password # change-admin-password /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/old_password change-admin-password rm -f /var/payara/payara/glassfish/lib/old_password /etc/init.d/payara_domain1 start while ! nc -z localhost 4848; do sleep 0.5 done # enable-secure-admin /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password enable-secure-admin configs=(default-config server-config) for config in ${configs[@]}; do # create-system-properties /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-system-properties --target $config solr.solr.home=../solr # create-jvm-options /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password delete-jvm-options --target $config -Xmx512m /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jvm-options --target $config -Xmx2048m /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jvm-options --target $config -Dfile.encoding=UTF-8 /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jvm-options --target $config -Duser.timezone=Asia/Tokyo /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jvm-options --target $config "-XX\:+UseConcMarkSweepGC" /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jvm-options --target $config "-XX\:CMSInitiatingOccupancyFraction=30" /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jvm-options --target $config "-XX\:NewSize=256m" /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jvm-options --target $config "-XX\:MaxNewSize=256m" /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jvm-options --target $config "-XX\:+CMSClassUnloadingEnabled" # set /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password set configs.config.$config.java-config.debug-enabled=true /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password set configs.config.$config.thread-pools.thread-pool.http-thread-pool.max-thread-pool-size=200 /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password set configs.config.$config.network-config.protocols.protocol.admin-listener.http.comet-support-enabled=true /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password set configs.config.$config.network-config.protocols.protocol.http-listener-1.http.comet-support-enabled=true /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password set configs.config.$config.network-config.protocols.protocol.http-listener-2.http.comet-support-enabled=true /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password set configs.config.$config.network-config.protocols.protocol.admin-listener.http.encoded-slash-enabled=true /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password set configs.config.$config.network-config.protocols.protocol.http-listener-1.http.encoded-slash-enabled=true /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password set configs.config.$config.network-config.protocols.protocol.http-listener-2.http.encoded-slash-enabled=true done # imart-config /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password copy-config default-config imart-config # imart-instance /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-instance --node=localhost-domain1 --config=imart-config imart-instance # PostgreSQL /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jdbc-connection-pool --validateAtmostOncePeriodInSeconds=0 --sqlTraceListeners=fish.payara.jdbc.SilentSqlTraceListener --statementLeakReclaim=false --ping=false --maxWaitTimeInMillis=60000 --wrapJdbcObjects=true --connectionValidationMethod=table --steadyPoolSize=8 --idleTimeoutInSeconds=300 --maxConnectionUsageCount=0 --matchConnections=false --connectionCreationRetryIntervalInSeconds=10 --associateWithThread=false --isConnectionValidationRequired=false --connectionLeakReclaim=false --datasourceClassname=org.postgresql.xa.PGXADataSource --connectionCreationRetryAttempts=0 --statementCacheSize=0 --resType=javax.sql.XADataSource --statementLeakTimeoutInSeconds=0 --failAllConnections=false --statementTimeoutInSeconds=-1 --lazyConnectionEnlistment=false --pooling=true --poolResizeQuantity=2 --allowNonComponentCallers=false --connectionLeakTimeoutInSeconds=0 --isIsolationLevelGuaranteed=true --maxPoolSize=128 --nonTransactionalConnections=false --lazyConnectionAssociation=false PgPool /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password set resources.jdbc-connection-pool.PgPool.property.TargetServerType=any resources.jdbc-connection-pool.PgPool.property.BinaryTransfer=true resources.jdbc-connection-pool.PgPool.property.UnknownLength=2147483647 resources.jdbc-connection-pool.PgPool.property.DisableColumnSanitiser=false resources.jdbc-connection-pool.PgPool.property.UseSpNego=false resources.jdbc-connection-pool.PgPool.property.SspiServiceClass=POSTGRES resources.jdbc-connection-pool.PgPool.property.ProtocolVersion=0 resources.jdbc-connection-pool.PgPool.property.SendBufferSize=-1 resources.jdbc-connection-pool.PgPool.property.ReceiveBufferSize=-1 resources.jdbc-connection-pool.PgPool.property.LoadBalanceHosts=false resources.jdbc-connection-pool.PgPool.property.ReadOnly=false resources.jdbc-connection-pool.PgPool.property.LogUnclosedConnections=false resources.jdbc-connection-pool.PgPool.property.DatabaseName=iap_db resources.jdbc-connection-pool.PgPool.property.GssLib=auto resources.jdbc-connection-pool.PgPool.property.CancelSignalTimeout=10 resources.jdbc-connection-pool.PgPool.property.PortNumber=5432 resources.jdbc-connection-pool.PgPool.property.DefaultRowFetchSize=0 resources.jdbc-connection-pool.PgPool.property.User=imart resources.jdbc-connection-pool.PgPool.property.DatabaseMetadataCacheFieldsMiB=5 resources.jdbc-connection-pool.PgPool.property.AllowEncodingChanges=false resources.jdbc-connection-pool.PgPool.property.JaasLogin=true resources.jdbc-connection-pool.PgPool.property.PrepareThreshold=5 resources.jdbc-connection-pool.PgPool.property.ReWriteBatchedInserts=false resources.jdbc-connection-pool.PgPool.property.SocketTimeout=0 resources.jdbc-connection-pool.PgPool.property.HostRecheckSeconds=10 resources.jdbc-connection-pool.PgPool.property.Password=imart resources.jdbc-connection-pool.PgPool.property.ConnectTimeout=10 resources.jdbc-connection-pool.PgPool.property.ApplicationName="PostgreSQL JDBC Driver" resources.jdbc-connection-pool.PgPool.property.PreparedStatementCacheQueries=0 resources.jdbc-connection-pool.PgPool.property.Ssl=false resources.jdbc-connection-pool.PgPool.property.PreparedStatementCacheSizeMiB=5 resources.jdbc-connection-pool.PgPool.property.LoginTimeout=0 resources.jdbc-connection-pool.PgPool.property.ServerName=localhost resources.jdbc-connection-pool.PgPool.property.DatabaseMetadataCacheFields=65536 resources.jdbc-connection-pool.PgPool.property.TcpKeepAlive=false /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jdbc-resource --enabled=true --poolName=PgPool --target=domain jdbc/postgresql /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-resource-ref --enabled=true --target=server jdbc/postgresql /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-resource-ref --enabled=true --target=imart-instance jdbc/postgresql # SQL Server /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jdbc-connection-pool --validateAtmostOncePeriodInSeconds=0 --sqlTraceListeners=fish.payara.jdbc.SilentSqlTraceListener --statementLeakReclaim=false --ping=false --maxWaitTimeInMillis=60000 --wrapJdbcObjects=true --connectionValidationMethod=table --steadyPoolSize=8 --idleTimeoutInSeconds=300 --maxConnectionUsageCount=0 --matchConnections=false --connectionCreationRetryIntervalInSeconds=10 --associateWithThread=false --isConnectionValidationRequired=false --connectionLeakReclaim=false --datasourceClassname=com.microsoft.sqlserver.jdbc.SQLServerXADataSource --connectionCreationRetryAttempts=0 --statementCacheSize=0 --resType=javax.sql.XADataSource --statementLeakTimeoutInSeconds=0 --failAllConnections=false --statementTimeoutInSeconds=-1 --lazyConnectionEnlistment=false --pooling=true --poolResizeQuantity=2 --allowNonComponentCallers=false --connectionLeakTimeoutInSeconds=0 --isIsolationLevelGuaranteed=true --maxPoolSize=128 --nonTransactionalConnections=false --lazyConnectionAssociation=false SqlServerPool /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password set resources.jdbc-connection-pool.SqlServerPool.property.TrustServerCertificate=false resources.jdbc-connection-pool.SqlServerPool.property.User=imart resources.jdbc-connection-pool.SqlServerPool.property.LastUpdateCount=true resources.jdbc-connection-pool.SqlServerPool.property.ColumnEncryptionSetting=Disabled resources.jdbc-connection-pool.SqlServerPool.property.ResponseBuffering=adaptive resources.jdbc-connection-pool.SqlServerPool.property.TransparentNetworkIPResolution=true resources.jdbc-connection-pool.SqlServerPool.property.URL=jdbc:sqlserver:// resources.jdbc-connection-pool.SqlServerPool.property.XopenStates=false resources.jdbc-connection-pool.SqlServerPool.property.PacketSize=8000 resources.jdbc-connection-pool.SqlServerPool.property.Password=imart resources.jdbc-connection-pool.SqlServerPool.property.ServerNameAsACE=false resources.jdbc-connection-pool.SqlServerPool.property.ApplicationName="Microsoft JDBC Driver for SQL Server" resources.jdbc-connection-pool.SqlServerPool.property.DatabaseName=iap_db resources.jdbc-connection-pool.SqlServerPool.property.Encrypt=false resources.jdbc-connection-pool.SqlServerPool.property.LockTimeout=-1 resources.jdbc-connection-pool.SqlServerPool.property.SendStringParametersAsUnicode=true resources.jdbc-connection-pool.SqlServerPool.property.MultiSubnetFailover=false resources.jdbc-connection-pool.SqlServerPool.property.ApplicationIntent=readwrite resources.jdbc-connection-pool.SqlServerPool.property.LoginTimeout=15 resources.jdbc-connection-pool.SqlServerPool.property.Authentication=NotSpecified resources.jdbc-connection-pool.SqlServerPool.property.WorkstationID=65353bcd63a4 resources.jdbc-connection-pool.SqlServerPool.property.ServerName=localhost resources.jdbc-connection-pool.SqlServerPool.property.PortNumber=1433 resources.jdbc-connection-pool.SqlServerPool.property.SelectMethod=cursor resources.jdbc-connection-pool.SqlServerPool.property.SendTimeAsDatetime=true /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jdbc-resource --enabled=true --poolName=SqlServerPool --target=domain jdbc/sqlserver /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-resource-ref --enabled=true --target=server jdbc/sqlserver /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-resource-ref --enabled=true --target=imart-instance jdbc/sqlserver # Oracle(Non XA) /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jdbc-connection-pool --validateAtmostOncePeriodInSeconds=0 --sqlTraceListeners=fish.payara.jdbc.SilentSqlTraceListener --statementLeakReclaim=false --ping=false --maxWaitTimeInMillis=60000 --wrapJdbcObjects=true --connectionValidationMethod=table --steadyPoolSize=8 --idleTimeoutInSeconds=300 --maxConnectionUsageCount=0 --matchConnections=false --connectionCreationRetryIntervalInSeconds=10 --associateWithThread=false --isConnectionValidationRequired=false --connectionLeakReclaim=false --datasourceClassname=oracle.jdbc.pool.OracleDataSource --connectionCreationRetryAttempts=0 --statementCacheSize=0 --resType=javax.sql.DataSource --statementLeakTimeoutInSeconds=0 --failAllConnections=false --statementTimeoutInSeconds=-1 --lazyConnectionEnlistment=false --pooling=true --poolResizeQuantity=2 --allowNonComponentCallers=false --connectionLeakTimeoutInSeconds=0 --isIsolationLevelGuaranteed=true --maxPoolSize=128 --nonTransactionalConnections=false --lazyConnectionAssociation=false OraclePoolNonXA /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password set resources.jdbc-connection-pool.OraclePoolNonXA.property.User=IAP_DB resources.jdbc-connection-pool.OraclePoolNonXA.property.MaxStatements=0 resources.jdbc-connection-pool.OraclePoolNonXA.property.DatabaseName=orcl resources.jdbc-connection-pool.OraclePoolNonXA.property.ImplicitCachingEnabled=false resources.jdbc-connection-pool.OraclePoolNonXA.property.NetworkProtocol=tcp resources.jdbc-connection-pool.OraclePoolNonXA.property.DataSourceName=OracleDataSource resources.jdbc-connection-pool.OraclePoolNonXA.property.LoginTimeout=0 resources.jdbc-connection-pool.OraclePoolNonXA.property.ServerName=localhost resources.jdbc-connection-pool.OraclePoolNonXA.property.PortNumber=1521 resources.jdbc-connection-pool.OraclePoolNonXA.property.ExplicitCachingEnabled=false resources.jdbc-connection-pool.OraclePoolNonXA.property.Password=imart /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jdbc-resource --enabled=true --poolName=OraclePoolNonXA --target=domain jdbc/oracle_non_xa /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-resource-ref --enabled=true --target=server jdbc/oracle_non_xa /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-resource-ref --enabled=true --target=imart-instance jdbc/oracle_non_xa # Oracle(XA) /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jdbc-connection-pool --validateAtmostOncePeriodInSeconds=0 --sqlTraceListeners=fish.payara.jdbc.SilentSqlTraceListener --statementLeakReclaim=false --ping=false --maxWaitTimeInMillis=60000 --wrapJdbcObjects=true --connectionValidationMethod=table --steadyPoolSize=8 --idleTimeoutInSeconds=300 --maxConnectionUsageCount=0 --matchConnections=false --connectionCreationRetryIntervalInSeconds=10 --associateWithThread=false --isConnectionValidationRequired=false --connectionLeakReclaim=false --datasourceClassname=oracle.jdbc.xa.client.OracleXADataSource --connectionCreationRetryAttempts=0 --statementCacheSize=0 --resType=javax.sql.XADataSource --statementLeakTimeoutInSeconds=0 --failAllConnections=false --statementTimeoutInSeconds=-1 --lazyConnectionEnlistment=false --pooling=true --poolResizeQuantity=2 --allowNonComponentCallers=false --connectionLeakTimeoutInSeconds=0 --isIsolationLevelGuaranteed=true --maxPoolSize=128 --nonTransactionalConnections=false --lazyConnectionAssociation=false OraclePoolXA /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password set resources.jdbc-connection-pool.OraclePoolXA.property.User=IAP_DB resources.jdbc-connection-pool.OraclePoolXA.property.MaxStatements=0 resources.jdbc-connection-pool.OraclePoolXA.property.DatabaseName=orcl resources.jdbc-connection-pool.OraclePoolXA.property.NativeXA=false resources.jdbc-connection-pool.OraclePoolXA.property.ImplicitCachingEnabled=false resources.jdbc-connection-pool.OraclePoolXA.property.NetworkProtocol=tcp resources.jdbc-connection-pool.OraclePoolXA.property.DataSourceName=OracleXADataSource resources.jdbc-connection-pool.OraclePoolXA.property.LoginTimeout=0 resources.jdbc-connection-pool.OraclePoolXA.property.ServerName=localhost resources.jdbc-connection-pool.OraclePoolXA.property.PortNumber=1521 resources.jdbc-connection-pool.OraclePoolXA.property.ExplicitCachingEnabled=false resources.jdbc-connection-pool.OraclePoolXA.property.Password=imart /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-jdbc-resource --enabled=true --poolName=OraclePoolXA --target=domain jdbc/oracle_xa /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-resource-ref --enabled=true --target=server jdbc/oracle_xa /var/payara/payara/bin/asadmin --user admin --passwordfile /var/payara/payara/glassfish/lib/password create-resource-ref --enabled=true --target=imart-instance jdbc/oracle_xa /etc/init.d/payara_domain1 stop while nc -z localhost 4848; do sleep 0.5 done |
以下の変更を加えています。
- /var/payara/payara/bin/asadmin create-service domain1 (/etc/init.d/payara_domain1 start/stop が使えるように)
- asadmin change-admin-password (admin/password に変更)
- asadmin enable-secure-admin
- システムプロパティ(default-config, server-config, imart-config に対して)
- solr.solr.home=../solr
- JVM Options(default-config, server-config, imart-config に対して)
- -Xmx2048m -Dfile.encoding=UTF-8 -Duser.timezone=Asia/Tokyo -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=30 -XX:NewSize=256m -XX:MaxNewSize=256m -XX:+CMSClassUnloadingEnabled
- JVM Debug Enable(Java リモートでバッグの有効化)
- default-config, server-config, imart-config に対して
- set configs.config.$config.thread-pools.thread-pool.http-thread-pool.max-thread-pool-size=200 (スレッドプール最大数)
- set configs.config.$config.network-config.protocols.protocol.admin-listener.http.comet-support-enabled=true (Comet)
- set configs.config.$config.network-config.protocols.protocol.http-listener-1.http.comet-support-enabled=true (Comet)
- set configs.config.$config.network-config.protocols.protocol.http-listener-2.http.comet-support-enabled=true (Comet)
- set configs.config.$config.network-config.protocols.protocol.admin-listener.http.encoded-slash-enabled=true (Encoded Slash)
- set configs.config.$config.network-config.protocols.protocol.http-listener-1.http.encoded-slash-enabled=true (Encoded Slash)
- set configs.config.$config.network-config.protocols.protocol.http-listener-2.http.encoded-slash-enabled=true (Encoded Slash)
- imart-config の作成(default-config からコピーして作成)
- imart-instance の作成(imart-config を参照)
- PostgreSQL(XA), SQL Server(XA), Oracle(Non-XA, XA) のデータソース、jndi を追加
- /var/payara/payara/glassfish/lib への JDBC ドライバの配置
docker run 時に実行するスクリプトです。
run.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
#!/bin/bash /etc/init.d/sshd restart /etc/init.d/payara_domain1 start while ! nc -z localhost 4848; do sleep 0.5 done cd /var/payara/payara/glassfish/lib echo "y" | ./nadmin --user admin --passwordfile password start-local-instance --node localhost-domain1 --sync normal imart-instance mkdir -p /var/payara/payara/glassfish/domains/domain1/logs mkdir -p /var/payara/payara/glassfish/nodes/localhost-domain1/imart-instance/logs touch /var/payara/payara/glassfish/domains/domain1/logs/server.log touch /var/payara/payara/glassfish/nodes/localhost-domain1/imart-instance/logs/server.log multitail -M 0 --follow-all --retry-all /var/payara/payara/glassfish/domains/domain1/logs/server.log -I /var/payara/payara/glassfish/nodes/localhost-domain1/imart-instance/logs/server.log |
sshd と Payara を起動しています。
mypayara というタグでビルドします。
1 |
docker build -t mypayara . |
3. 実行します
1 |
docker run -it -p 2222:22 -p 4848:4848 -p 4900:4900 -p 5900:5900 -p 5701:5701 -p 8080:8080 -p 28080:28080 -p 9009:9009 -p 29009:29009 -p 5200:5200 mypayara |
root/password で ssh 接続ができるようになっています。
あくまで検証用の Docker としてこのように設定しているため、セキュリティにはご注意ください。
クラスタリングする場合
Docker コンテナ化した Payara をクラスタリングする場合、ポートフォワードされている事が原因で Hazelcast 側で「"Wrong bind request from ..."」エラーが発生するため、以下のような手順が必要です。
ここでは、Docker 化した Payara を 192.168.0.1 と 192.168.0.2 の二台のマシンでクラスタを組む例として説明します。
--net=host オプションを利用する方法
docker run する際に --net=host を付けることで docker コンテナがブリッジではなくホストのネットワークインタフェースを利用します。
--net=host オプションを付けて docker run 後、192.168.0.1:4848 と 192.168.0.2:4848 それぞれの管理コンソールから、[Domain] - [Data Grid] の [Configuration] タブの [Data Grid Discovery Mode] を「tcpip」に変更し、[TCP/IP Instances] を「192.168.0.1:4900,192.168.0.2:4900」に設定してください。
設定後、それぞれのマシンから /etc/init.d/payara_domain1 stop && /etc/init.d/payara_domain1 start を実行し再起動してください。
hazelcast-config.xml を作成する方法
--net=host オプションを付けずに上記のように docker run します。
docker run 後、192.168.0.1 マシンに以下のファイルを作成します。
/var/payara/payara5/glassfish/domains/domain1/config/hazelcast-config.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?xml version="1.0" encoding="UTF-8"?> <hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.9.xsd" xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <network> <public-address>192.168.0.1</public-address> <port auto-increment="true">5701</port> <join> <multicast enabled="false"/> <tcp-ip enabled="true"> <member>192.168.0.1:5701</member> <member>192.168.0.2:5701</member> <member>192.168.0.1:5702</member> <member>192.168.0.2:5702</member> </tcp-ip> </join> </network> </hazelcast> |
同様に、192.168.0.2 マシンに以下のファイルを作成します。
/var/payara/payara5/glassfish/domains/domain1/config/hazelcast-config.xml
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<?xml version="1.0" encoding="UTF-8"?> <hazelcast xsi:schemaLocation="http://www.hazelcast.com/schema/config hazelcast-config-3.9.xsd" xmlns="http://www.hazelcast.com/schema/config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <network> <public-address>192.168.0.2</public-address> <port auto-increment="true">5701</port> <join> <multicast enabled="false"/> <tcp-ip enabled="true"> <member>192.168.0.1:5701</member> <member>192.168.0.2:5701</member> <member>192.168.0.1:5702</member> <member>192.168.0.2:5702</member> </tcp-ip> </join> </network> </hazelcast> |
設定後、それぞれのマシンから /etc/init.d/payara_domain1 stop && /etc/init.d/payara_domain1 start を実行し再起動してください。
docker network を利用する方法
1台の物理マシン上でクラスタリングを構成する場合 docker network を利用することで簡単にクラスタリング環境を構築できます。
1. docker network create -d bridge --subnet=172.16.0.0/24 payara-cluster
2. docker run -d -h payara1 --name payara1 --net=payara-cluster (省略) mypayara:5.182
3. docker run -d -h payara2 --name payara2 --net=payara-cluster (省略) mypayara:5.182
4. payara1 の管理コンソールにログインし、payara2 の ssh ノードを追加
なお、Kubernetes 環境で実行する場合、以下を利用することで、簡単にクラスタリングすることが可能です。
Hazelcast Discovery Plugin for Kubernetes
以下にあるように、サービスを先に作成することに注意してください。
payara-hazelcast-kubernetes
このように、Docker イメージ化するだけで、検証用の Payara をすぐに準備できます。
是非ご活用ください。
[…] この CookBook では以下の CookBook で作成した docker image を使用します。 Payara の Docker を作成する。 […]