コンテナ化Caché

この記事では、InterSystemsCaché/ Ensembleを使用してDockerイメージを取得する方法について説明します。

最初から始めましょう、つまり dockerfileを使用します。 Dockerfileは、イメージを構築するための指示を含むyml形式のシンプルなテキストファイルです。

InterSystemsはRedHatをメインプラットフォームとして、CentOSを開発プラットフォームとして公式にサポートしているため、CentOSをベースイメージとして使用することをお勧めします。

FROM centos:6 

自分をファイルの作成者として追加できます。

 MAINTAINER Dmitry Maslennikov <mrdaimor@gmail.com> 

最初のステップは、インストールプロセス中およびCachéが機能するために必要なユーティリティをインストールすることです。 ここで、タイムゾーンも設定します。

 # update OS + dependencies & run Caché silent instal RUN yum -y update \ && yum -y install which tar hostname net-tools wget \ && yum -y clean all \ && ln -sf /etc/locatime /usr/share/zoneinfo/Europe/Moscow 

配布用の一時フォルダーを定義します。

 ENV TMP_INSTALL_DIR=/tmp/distrib 

デフォルト値を使用していくつかの引数を定義しますが、これらはアセンブリ中に変更できます。

 ARG password="Qwerty@12" ARG cache=ensemble-2016.2.1.803.0 

ここで、無人インストールのパラメーターを決定する必要があります。

 ENV ISC_PACKAGE_INSTANCENAME="ENSEMBLE" \ ISC_PACKAGE_INSTALLDIR="/opt/ensemble/" \ ISC_PACKAGE_UNICODE="Y" \ ISC_PACKAGE_CLIENT_COMPONENTS="" \ ISC_PACKAGE_INITIAL_SECURITY="Normal" \ ISC_PACKAGE_USER_PASSWORD=${password} 

CachéセキュリティをNormalに設定することにしたので、パスワードを設定する必要があります。

詳細な設定オプションはドキュメントにあります

作業ディレクトリとして、今のところ、ディストリビューションの一時フォルダーを設定しましょう。このフォルダーは、以前に存在しなかった場合、このディレクティブで作成されます。

 WORKDIR ${TMP_INSTALL_DIR} 

画像をパブリックリポジトリにアップロードしない場合は、すぐにライセンスファイルを追加できます。

 COPY cache.key $ISC_PACKAGE_INSTALLDIR/mgr/ 

ビルドするには配布キットが必要になりますが、それを入手するにはいくつかの方法があります。


すべてをインストールする準備ができたら、実行できます。

 RUN ./$cache-lnxrhx64/cinstall_silent 

インストールが完了したら、サーバーを停止する必要があります。

 RUN ccontrol stop $ISC_PACKAGE_INSTANCENAME quietly 

しかし、これだけではありません; Dockerでは、コンテナーが機能するために、プロセスを制御するプロセスが1つ必要です。 このためには、 Luca Ravazzoloの ccontainermainプロジェクトが必要ですgithubからバイナリを直接ダウンロードします。

 # Caché container main process PID 1 (https://github.com/zrml/ccontainermain) RUN curl -L https://github.com/zrml/ccontainermain/raw/master/distrib/linux/ccontainermain -o /ccontainermain \ && chmod +x /ccontainermain 

一時フォルダーをクリーニングします。

 RUN rm -rf $TMP_INSTALL_DIR 

オーバーレイドライバが使用されているかどうかに注意してください
Dockerがオーバーレイドライバーで動作するように構成されている場合、問題が発生する可能性があり、そのような行を追加してccontrolにラッパーを追加する必要があります。そうしないと、Cachéの起動時にすぐに<PROTECT>エラーで失敗します。

 # Workaround for an overlayfs bug which prevents Cache from starting with <PROTECT> errors COPY ccontrol-wrapper.sh /usr/bin/ RUN cd /usr/bin \ && rm ccontrol \ && mv ccontrol-wrapper.sh ccontrol \ && chmod 555 ccontrol 

ラッパーコードはccontrol-wrapper.shです。

 #!/bin/bash # Work around a weird overlayfs bug where files don't open properly if they haven't been # touched first - see the yum-ovl plugin for a similar workaround if [ "${1,,}" == "start" ]; then find $ISC_PACKAGE_INSTALLDIR -name CACHE.DAT -exec touch {} \; fi /usr/local/etc/cachesys/ccontrol $@ 

このコマンドを使用して、Dockerで使用されているドライバーを確認できます。

 docker info --format '{{.Driver}}' 

Cachéの回避策
OverlayFSのバグに関する詳細

コンテナで使用されるネットワークポートをDockerに指示する必要があります。これらはWebアクセスの場合は57772、バイナリアクセスの場合は1972、Cachéの標準のデフォルトポートです。

 EXPOSE 57772 1972 

最後に、コンテナの起動方法を説明しましょう。

 ENTRYPOINT ["/ccontainermain", "-cconsole", "-i", "ensemble"] 

その結果、ファイルは次の形式を取ります。

 FROM centos:6 MAINTAINER Dmitry Maslennikov <Dmitry.Maslennikov@csystem.cz> # update OS + dependencies & run Caché silent instal RUN yum -y update \ && yum -y install which tar hostname net-tools wget \ && yum -y clean all \ && ln -sf /etc/locatime /usr/share/zoneinfo/Europe/Prague ARG password="Qwerty@12" ARG cache=ensemble-2016.2.1.803.0 ENV TMP_INSTALL_DIR=/tmp/distrib # vars for Caché silent install ENV ISC_PACKAGE_INSTANCENAME="ENSEMBLE" \ ISC_PACKAGE_INSTALLDIR="/opt/ensemble/" \ ISC_PACKAGE_UNICODE="Y" \ ISC_PACKAGE_CLIENT_COMPONENTS="" \ ISC_PACKAGE_INITIAL_SECURITY="Normal" \ ISC_PACKAGE_USER_PASSWORD=${password} # set-up and install Caché from distrib_tmp dir WORKDIR ${TMP_INSTALL_DIR} ADD $cache-lnxrhx64.tar.gz . # cache distributive RUN ./$cache-lnxrhx64/cinstall_silent \ && ccontrol stop $ISC_PACKAGE_INSTANCENAME quietly \ # Caché container main process PID 1 (https://github.com/zrml/ccontainermain) && curl -L https://github.com/daimor/ccontainermain/raw/master/distrib/linux/ccontainermain -o /ccontainermain \ && chmod +x /ccontainermain \ && rm -rf $TMP_INSTALL_DIR WORKDIR ${ISC_PACKAGE_INSTALLDIR} # TCP sockets that can be accessed if user wants to (see 'docker run -p' flag) EXPOSE 57772 1972 ENTRYPOINT ["/ccontainermain", "-cconsole", "-i", "ensemble"] 

これで、画像を組み立てる準備ができました。 Dockerfileがあるフォルダーでこのようなコマンドを実行する必要があります。
docker build -t ensemble-simple .

ビルドプロセス中に、元のイメージがロードされ、Cachéインストールプロセス自体がロードされます。

次のように、アセンブリのパラメーターの値を変更できます。

 docker build --build-arg password=SuperSecretPassword -t ensemble-simple . 

 docker build --build-arg cache=ensemble-2016.2.1.803.1 -t ensemble-simple . 

そして、そのようなコマンドで新しいイメージを起動できます。

 docker run -d -p 57779:57772 -p 1979:1972 ensemble-simple 

ここで57779および1979、これらはローカルマシンからコンテナにアクセスできるポートです。

このコマンドを使用すると、実行中のすべてのコンテナーを表示できます。

 docker ps 

 コンテナIDイメージコマンド作成されたステータスポート名
 5f8d2cb3745a ensemble-simple "/ ccontainermain -..." 18秒前アップ17秒0.0.0.0:1979->1972/tcp、0.0.0.0∗7779->57772/tcp keen_carson 

http:// localhost:57779 / csp / sys / UtilHome.cspで管理ポータルを開くことができます。 新しいシステムは機能し、手頃な価格です。

画像

ソースはgithubでここにあります

Source: https://habr.com/ru/post/J323746/


All Articles