Skip to Content
新しいバージョン 12 を公開しました 🎉

Docker

Docker は、テスト目的で Babel Licensing Service を実行するのに便利で効率的な方法です。Docker は、コンテナーと呼ばれる軽量で分離された環境を提供します。コンテナーには Babel Licensing Service とそのすべての依存関係が収められるため、互換性の問題やホスト環境との競合を気にせずに、さまざまなシステムでサービスをデプロイしてテストできます。

前提条件

  1. Docker Desktop 
  2. Babel Licensing Service の ZIP パッケージ(babel_service_net80_x.y.z.w.zip)。両方のエディションに共通のパッケージです。
  3. Babel Licensing の Server または Data Center のライセンスファイル(babel.licenses)

始める前に、Docker をインストールしておく必要があります。Docker  の公式 Web サイトからダウンロードし、お使いのオペレーティングシステム向けのインストール手順に従ってください。

次の手順で、Babel Licensing Service を Docker にインストールします。

Dockerfile を作成する

Docker で Babel Licensing Service のイメージをビルドする環境を準備するには、次の手順に従います。

作業フォルダーを作成する

ローカルコンピューターに、Babel Licensing Service のファイルを置くフォルダーを作成します。このガイドでは、これを「作業フォルダー」と呼びます。

サービスのファイルをコピーする

Babel Licensing Service の ZIP アーカイブと babel.licenses ファイルを、前の手順で作成した作業フォルダーにコピーします。

アーカイブを展開する

Babel Licensing Service の ZIP アーカイブの内容を、作業フォルダー内の「babel」という名前のサブフォルダーに展開します。

Dockerfile を作成する

作業フォルダーに、任意のテキストエディターまたは IDE で「Dockerfile」という名前の新しいファイルを作成します。

Dockerfile の内容を追加する

次の内容を「Dockerfile」ファイルにコピーして保存します。

FROM mcr.microsoft.com/dotnet/aspnet:8.0 as runtime # Expose service ports EXPOSE 5005 # Set working directory WORKDIR /var/www/babel-lic # Copy babel licensing service files to working directory COPY /babel . # Copy license file to working directory COPY /babel.licenses . # Set entrypoint ENTRYPOINT [ "dotnet", "Babel.Licensing.Service.dll" ]

内容を順に見ていきます。

FROM mcr.microsoft.com/dotnet/aspnet:8.0 as runtime

この行は、Docker コンテナーのベースイメージを指定します。ここでは、Microsoft のコンテナーレジストリにある ASP.NET ランタイムのイメージを使用しています。

EXPOSE 5005

EXPOSE 命令は、コンテナーがこのポートをホストコンピューターに公開することを指定し、外部からアクセスできるようにします。

WORKDIR /var/www/svc/babel

WORKDIR 命令は、コンテナー内の作業ディレクトリを /var/www/svc/babel に設定します。以降のコマンドは、この場所で実行されます。

COPY /babel .

この行は、babel ディレクトリ(Babel Licensing Service のファイルが入っています)の内容を、作業フォルダーからコンテナーの作業ディレクトリ /var/www/svc/babel にコピーします。

COPY /babel.licenses .

同様に、この行は babel.licenses ファイルをビルドコンテキストからコンテナーの作業ディレクトリにコピーします。

ENTRYPOINT [ "dotnet", "Babel.Licensing.Service.dll" ]

ENTRYPOINT 命令は、コンテナーの起動時に実行されるコマンドを指定します。ここでは、Babel Licensing Service のエントリポイントとして Babel.Licensing.Service.dll を指定し、dotnet コマンドを実行します。

この Dockerfile は、必要な環境を用意し、必要なポートを公開し、サービスのファイルとライセンスファイルをコピーして、Babel Licensing Service のエントリポイントを定義します。

Docker でビルドしたこのイメージは、Docker Compose と組み合わせて Babel Licensing Service のデプロイに使用できます。

Docker Compose

ここまでで、Babel Licensing Service を実行するイメージをビルドするよう Docker に指示しましたが、データベースを実際に起動するための構成はまだ指定していません。

必要なデータベースを含めて Babel Licensing Service の環境全体を構成するために、作業フォルダーに docker-compose.yml という名前の新しいファイルを作成します。docker-compose.yml ファイルに次の内容を追加します。

version: '3.7' services: # Database db: image: mysql:latest volumes: - type: volume source: dbdata target: /var/lib/mysql restart: always ports: - '6610:3306' environment: MYSQL_ROOT_PASSWORD: eWk4fSTa45PGpJ MYSQL_DATABASE: licenses MYSQL_USER: babel MYSQL_PASSWORD: babel networks: - babellic # Babel Licensing licensing: depends_on: - db container_name: babel-licensing restart: always build: dockerfile: Dockerfile context: . image: babel/licensing:latest ports: - '5005:5005' environment: DOTNET_CLI_HOME: /tmp # Environment ASPNETCORE_ENVIRONMENT: Production # Service Address KESTREL__ENDPOINTS__GRPC__URL: http://*:5005 # Available database providers: SQLServer, MySQL, SQLite BABEL_SERVICE_DATABASE__PROVIDER: MySQL # Connection strings environment variables # SQL Server: BABEL_SERVICE_CONNECTIONSTRINGS__SQLSERVER # MySQL: BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL # SQLite: BABEL_SERVICE_CONNECTIONSTRINGS__SQLITE BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL: Server=db;User=babel;Password=babel;Database=licenses # Authentication token variables BABEL_SERVICE_APPLICATION__SIGNINGKEY: q9F0nLFRuphIHUdrlphe BABEL_SERVICE_APPLICATION__TOKENEXPIRATION: 00:30:00 # Licensing variables BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL: 00:05:00 # Reporting variables BABEL_SERVICE_REPORTING__ENCRYPTIONKEY: p5UwIWaqaChLxe3eJA9o networks: - babellic networks: babellic: volumes: dbdata: licensing:

docker-compose.yml ファイルは、licensing と db の 2 つのサービスからなるアプリケーションを定義します。licensing サービスのイメージは、指定した Dockerfile を使ってビルドされます。

Docker Compose でアプリケーションをデプロイすると、ファイルに記述されているとおり、コンテナーのポート 5005 がホストのポート 5005 にマッピングされます。ホストコンピューターのポート 5005 が別のコンテナーで使用されていないことを確認してください。使用されている場合は、空いているポートに変更できます。

db サービスの下と Babel サービスの接続文字列の中にある MySQL の root とユーザーのパスワードは、必ず強力で安全なパスワードに置き換えてください(覚えておく必要はありません)。ユーザーのパスワードは、MySQL データベースとの接続の確立に使用されます。

docker-compose.yml ファイルは、Docker イメージが実行時にどのように連携するかを定義します。サービスに必要な構成、環境変数、ネットワーク設定を指定します。このファイルと Docker Compose を使うと、Babel Licensing Service と関連するデータベースを簡単にデプロイして管理できます。

サービスの起動

前のセクションの説明に従って docker-compose.yml ファイルを用意したら、次のコマンドを実行します。

docker-compose up -d

このコマンドは、Babel Licensing Service と関連するデータベースをデタッチモードで起動します。コンテナーが起動するまで待ちます。Docker Compose は、必要なイメージがまだない場合はそれを取得し、docker-compose.yml ファイルで指定した構成に基づいてコンテナーを作成します。コンテナーが完全に起動して動作するまで、少し時間がかかることがあります。

コマンドを実行したら、docker ps コマンドでコンテナーが実行中であることを確認できます。このコマンドは、Babel Licensing Service と関連するデータベースのコンテナーを含め、実行中のコンテナーの一覧とその詳細を表示します。

$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5d2d3fc62f0a babel/licensing:latest "dotnet Babel.Licens…" 25 seconds ago Up 23 seconds 0.0.0.0:5005->5005/tcp babel-licensing 0e4245f683cf mysql:latest "docker-entrypoint.s…" 25 seconds ago Up 24 seconds 33060/tcp, 0.0.0.0:6610->3306/tcp babel-licesing-db-1

エディションはライセンスファイルで決まります。Data Center ライセンスの場合、サービスのアドレスで Web アプリケーションが提供されます。Server ライセンスの場合、そのアドレスにはエディションの比較を含むアップグレードページが表示されますが、サービス、その API、Babel Desktop は引き続き動作します。アップグレードするには、babel.licenses を置き換えてコンテナーを再起動します。再インストールするものはありません。

サービスの停止

コンテナーを停止して削除し、関連するボリュームも削除するには、次のコマンドを使用します。

  1. コンテナーの停止と削除:Docker Compose で作成したコンテナーを停止して削除するには、次のコマンドを実行します。
$ docker compose down

down コマンドは、docker-compose.yml ファイルで定義されたコンテナーを停止して削除します。実行中のコンテナーを停止し、ネットワークやボリュームなどの関連リソースを削除しますが、イメージは残します。

  1. 停止とボリュームの削除:コンテナーに関連付けられたボリュームも削除する場合は、down コマンドに -v フラグを付けます。次のコマンドを実行します。
$ docker compose down -v

-v フラグを付けると、Docker Compose はコンテナーを停止して削除するだけでなく、コンテナーのライフサイクル中に作成されたボリュームも削除します。これにより、データベースのデータファイルを含め、コンテナーに関連するすべてのリソースが完全に削除されます。

これらのコマンドは、docker-compose.yml ファイルがあるディレクトリで実行する必要があります。また、Docker Compose がインストールされていて、コマンドライン環境で使用できることを確認してください。

docker compose down または docker compose down -v を実行すると、コンテナーの停止と削除、および関連するボリュームの削除が行われ、Babel Licensing Service が使用していたリソースが片付けられます。

Babel Licensing Service を設定する

docker-compose.yml ファイルでは、いくつかの環境変数を指定して、babel-licensing サービスコンテナーの環境を設定できます。これらの変数は、appsettings.json ファイルに保存されている Babel Licensing Service の既定の構成設定を上書きします。使用できる構成変数の説明は次のとおりです。

  1. DOTNET_CLI_HOME:.NET の CLI(コマンドラインインターフェイス)の一時ディレクトリの場所を指定します。ここでは /tmp に設定しています。
  2. ASPNETCORE_ENVIRONMENT:Babel Licensing Service を実行する環境を設定します。値 Production は、サービスが本番環境で動作していることを示します。
  3. KESTREL__ENDPOINTS__GRPC__URL:Babel Licensing Service の gRPC エンドポイントの URL を定義します。ここでは http://*:5005 に設定しており、サービスは利用可能なすべてのネットワークインターフェイスのポート 5005 で待ち受けます。
  4. BABEL_SERVICE_DATABASE__PROVIDER:Babel Licensing Service が使用するデータベースプロバイダーを指定します。値 MySQL は、データベースプロバイダーとして MySQL を使用することを示します。
  5. BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL:MySQL データベースの接続文字列を設定します。Babel Licensing Service が使用するサーバー、ユーザー、パスワード、データベース名を指定します。MySQL プロバイダーは .NET 10 のイメージ(mcr.microsoft.com/dotnet/aspnet:10.0 と babel_service_net100_x.y.z.w.zip パッケージ)でも動作します。この場合、サービスは Pomelo のフォークである Microting.EntityFrameworkCore.MySql を使用し、環境変数は同じです。
  6. BABEL_SERVICE_APPLICATION__SIGNINGKEY:Babel Licensing Service の認証トークンの生成と検証に使用する署名キーを定義します。11.7.0 以降、同梱の appsettings.json にはハードコードされた値が含まれなくなりました。起動時に SigningKey が空の場合、サービスは現在のプロセス用にランダムなキーを生成し、警告をログに記録します。開発用以外のデプロイでは、特にロードバランサーの背後で複数のレプリカを実行する場合は、発行済みのトークンが再起動後も有効で、どのインスタンスでも受け付けられるように、この変数に必ず明示的で永続的なシークレットを設定してください。
  7. BABEL_SERVICE_APPLICATION__TOKENEXPIRATION:Babel Licensing Service が発行する認証トークンの有効期間を設定します。

初期管理者(11.7.0 以降):サービスには、admin / admin という既定の資格情報が含まれなくなりました。初回起動時に初期管理者を作成するには、BABEL_SERVICE_APPLICATION__ADMINUSERNAME と BABEL_SERVICE_APPLICATION__ADMINPASSWORD を設定します(必要に応じて BABEL_SERVICE_APPLICATION__ADMINEMAIL も設定します)。これらが設定されていなくてもコンテナーは起動しますが、管理者ユーザーは作成されません。そのため、必須の 2 つの値を設定してコンテナーを再起動するまで、Web アプリケーション(Data Center)にはそのアカウントでサインインできず、Babel Desktop には接続に使う管理者の API キーがありません。これらの値が使用されるのは初回起動時だけです。その後は Web アプリケーションでパスワードを変更し、環境から ADMINPASSWORD を削除してください。

  1. BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL:クライアントが Babel Licensing Service にハートビートを送信する最大間隔を指定します。形式は hh:mm:ss で、ハートビートとハートビートの間の時間間隔を表します。
  2. BABEL_SERVICE_REPORTING__ENCRYPTIONKEY:Babel Licensing Service のレポート機能でデータの暗号化に使用する暗号化キーを定義します。

これらの環境変数を使うと、要件に合わせて Babel Licensing Service のさまざまな面をカスタマイズして設定できます。docker-compose.yml ファイルでこれらの変数を上書きすれば、元の appsettings.json ファイルを変更せずにサービスの動作を変更できるため、柔軟かつ簡単に構成できます。

MSSQL Server の Docker イメージ

Docker で Babel Licensing を MSSQL と組み合わせて構成する場合は、Linux Ubuntu と互換性のある最新の Azure SQL Edge イメージを使用します。次の YAML 構成には、データベースへのアクセス、認証トークン、ライセンス管理のパラメーターに必要な主な環境変数が記述されています。この方法により、Docker 環境での Babel Licensing と MSSQL データベースのデプロイと統合が簡単になります。

version: '3.7' services: # Database ms-sql-server: image: mcr.microsoft.com/azure-sql-edge:latest volumes: - events_mssql:/var/opt/mssql restart: always ports: - '1433:1433' environment: MSSQL_SA_PASSWORD: eWk4fSTa45PGpJ ACCEPT_EULA: Y DATABASE: licenses networks: - babellic # Babel Licensing licensing: depends_on: - ms-sql-server container_name: babel-licensing-mssql restart: always build: dockerfile: Dockerfile context: . image: babel/licensing:latest ports: - '5005:5005' volumes: - type: bind source: ./babel target: /var/www/babel-lic environment: DOTNET_CLI_HOME: /tmp # Environment ASPNETCORE_ENVIRONMENT: Production # Service Address KESTREL__ENDPOINTS__GRPC__URL: http://*:5005 # Available database providers: SQLServer, MySQL, SQLite BABEL_SERVICE_DATABASE__PROVIDER: SQLServer # Connection strings environment variables # SQL Server: BABEL_SERVICE_CONNECTIONSTRINGS__SQLSERVER # MySQL: BABEL_SERVICE_CONNECTIONSTRINGS__MYSQL # SQLite: BABEL_SERVICE_CONNECTIONSTRINGS__SQLITE BABEL_SERVICE_CONNECTIONSTRINGS__SQLSERVER: data source=ms-sql-server;user id=sa;password=eWk4fSTa45PGpJ;initial catalog=licenses;trusted_connection=false;encrypt=false # Authentication token variables BABEL_SERVICE_APPLICATION__LOGTODATABASE: true BABEL_SERVICE_APPLICATION__SIGNINGKEY: q9F0nLFRuphIHUdrlphe BABEL_SERVICE_APPLICATION__TOKENEXPIRATION: 00:30:00 # Licensing variables BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL: 00:05:00 # Reporting variables BABEL_SERVICE_REPORTING__ENCRYPTIONKEY: p5UwIWaqaChLxe3eJA9o networks: - babellic networks: babellic: volumes: events_mssql: licensing:

Docker を使うと、必要な依存関係をすべてローカルコンピューターやサーバーに手作業で設定してインストールしなくても、Babel Licensing Service のインスタンスをすばやく用意できます。既存のソフトウェアのバージョンや依存関係との競合を避けられるため、セットアップが簡単になり、時間を節約できます。

FIPS が有効なホストで実行する場合:FIPS モードが有効なホストでコンテナーを実行し、ベースイメージに認定済みの OpenSSL FIPS プロバイダーが含まれていない場合、サービスが OpenSslCryptographicException: error:03000086 で起動に失敗することがあります。原因と対処方法(通常は OPENSSL_FORCE_FIPS_MODE=0 または FIPS 対応のベースイメージ)については、FIPS 準拠を参照してください。

Last updated on