Docker
Docker は、テスト目的で Babel Licensing Service を実行するのに便利で効率的な方法です。Docker は、コンテナーと呼ばれる軽量で分離された環境を提供します。コンテナーには Babel Licensing Service とそのすべての依存関係が収められるため、互換性の問題やホスト環境との競合を気にせずに、さまざまなシステムでサービスをデプロイしてテストできます。
前提条件
- Docker Desktop
- Babel Licensing Service の ZIP パッケージ(
babel_service_net80_x.y.z.w.zip)。両方のエディションに共通のパッケージです。 - 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 5005EXPOSE 命令は、コンテナーがこのポートをホストコンピューターに公開することを指定し、外部からアクセスできるようにします。
WORKDIR /var/www/svc/babelWORKDIR 命令は、コンテナー内の作業ディレクトリを /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 を置き換えてコンテナーを再起動します。再インストールするものはありません。
サービスの停止
コンテナーを停止して削除し、関連するボリュームも削除するには、次のコマンドを使用します。
- コンテナーの停止と削除:Docker Compose で作成したコンテナーを停止して削除するには、次のコマンドを実行します。
$ docker compose downdown コマンドは、docker-compose.yml ファイルで定義されたコンテナーを停止して削除します。実行中のコンテナーを停止し、ネットワークやボリュームなどの関連リソースを削除しますが、イメージは残します。
- 停止とボリュームの削除:コンテナーに関連付けられたボリュームも削除する場合は、
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 の既定の構成設定を上書きします。使用できる構成変数の説明は次のとおりです。
DOTNET_CLI_HOME:.NET の CLI(コマンドラインインターフェイス)の一時ディレクトリの場所を指定します。ここでは/tmpに設定しています。ASPNETCORE_ENVIRONMENT:Babel Licensing Service を実行する環境を設定します。値Productionは、サービスが本番環境で動作していることを示します。KESTREL__ENDPOINTS__GRPC__URL:Babel Licensing Service の gRPC エンドポイントの URL を定義します。ここではhttp://*:5005に設定しており、サービスは利用可能なすべてのネットワークインターフェイスのポート 5005 で待ち受けます。BABEL_SERVICE_DATABASE__PROVIDER:Babel Licensing Service が使用するデータベースプロバイダーを指定します。値MySQLは、データベースプロバイダーとして MySQL を使用することを示します。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を使用し、環境変数は同じです。BABEL_SERVICE_APPLICATION__SIGNINGKEY:Babel Licensing Service の認証トークンの生成と検証に使用する署名キーを定義します。11.7.0 以降、同梱のappsettings.jsonにはハードコードされた値が含まれなくなりました。起動時にSigningKeyが空の場合、サービスは現在のプロセス用にランダムなキーを生成し、警告をログに記録します。開発用以外のデプロイでは、特にロードバランサーの背後で複数のレプリカを実行する場合は、発行済みのトークンが再起動後も有効で、どのインスタンスでも受け付けられるように、この変数に必ず明示的で永続的なシークレットを設定してください。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 を削除してください。
BABEL_SERVICE_LICENSING__HEARTBEATINTERVAL:クライアントが Babel Licensing Service にハートビートを送信する最大間隔を指定します。形式はhh:mm:ssで、ハートビートとハートビートの間の時間間隔を表します。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 準拠を参照してください。