コンテナ化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でここにあります



All Articles