# Docker Composeインストール

<figure><img src="/files/Ud8toKDC5kNuf25B0V2J" alt=""><figcaption></figcaption></figure>

## 概要

このセクションでは、docker-composeオーケストレーションファイルをカスタマイズすることで、Dockerを使用してKeeperコネクションマネージャーをインストールする方法について取り扱います。

### 1. Dockerのインストール

**Windows**

Docker[公式の手順](https://docs.docker.com/desktop/install/windows-install/)に従って、Docker Desktopをインストールします。

**Linux**

LinuxにDockerをインストールするには、ご利用のLinuxディストリビューションに応じて、こちらの[ガイド](/keeperpam/jp/privileged-access-manager/references/installing-docker-on-linux.md)をご参照ください。

### 手順 2: Docker Composeファイルの作成 <a href="#id-.deployingusingdockerv2.x-usingdocker-compose" id="id-.deployingusingdockerv2.x-usingdocker-compose"></a>

Dockerがインスタンス上で稼働していることを確認したら、`docker-compose.yml` ファイルを作成し、マシン上の作業ディレクトリに転送する必要があります。

以下では、Keeperコネクションマネージャーのデプロイ向けの `docker-compose.yml` ファイル例を示します。この例では、SSL証明書にLet's Encryptを使用し、認証用データベースを自動初期化します。MySQLとPostgreSQLの2つのオプションを用意しています。

{% hint style="warning" %}
[以下に記載のように](#parameters)このファイルのパラメータを調整してください。
{% endhint %}

{% tabs %}
{% tab title="MySQL" %}

```yaml
version: "3"
services:

    guacd:
        image: keeper/guacd:2
        restart: unless-stopped
        shm_size: 1001500k
#        security_opt:
#            - "seccomp:guacd-docker-seccomp.json"
#            - "apparmor:guacd-apparmor-profile"
        environment:
            ACCEPT_EULA: "Y"
        volumes:
            - "common-storage:/var/lib/guacamole:rw"

    db:
        image: keeper/guacamole-db-mysql:2
        restart: unless-stopped
        environment:
            ACCEPT_EULA: "Y"
            MYSQL_RANDOM_ROOT_PASSWORD: "yes"
            GUACAMOLE_DATABASE: "guacamole_db"
            GUACAMOLE_USERNAME: "guacamole_user"
            GUACAMOLE_PASSWORD: "db_strong_password"
            GUACAMOLE_ADMIN_PASSWORD: "admin_strong_password"

    guacamole:
        image: keeper/guacamole:2
        restart: unless-stopped
        environment:
            ACCEPT_EULA: "Y"
            GUACD_HOSTNAME: "guacd"
            MYSQL_HOSTNAME: "db"
            MYSQL_DATABASE: "guacamole_db"
            MYSQL_USERNAME: "guacamole_user"
            MYSQL_PASSWORD: "db_strong_password"
            KCM_LICENSE: "XXXXXXXXXXXXXXXXXXXXXXXXXX"
        volumes:
            - "common-storage:/var/lib/guacamole:rw"

    ssl:
        image: keeper/guacamole-ssl-nginx:2
        restart: unless-stopped
        ports:
            - "80:80"
            - "443:443"
        environment:
            ACCEPT_EULA: "Y"
            GUACAMOLE_HOSTNAME: guacamole
            SSL_HOSTNAME: keeper.mycompany.com
            LETSENCRYPT_ACCEPT_TOS: "Y"
            LETSENCRYPT_EMAIL: you@company.com

volumes:
    common-storage:
```

**パラメータ**

このファイルを目的のKCMインスタンスにコピーします。 以下のフィールドを変更します。

* **KCM\_LICENSE**には、KCM用のBase64形式のライセンスキーを指定します。このライセンスキーは、Keeper管理コンソールの **\[コネクションマネージャー] → \[オンプレミスライセンスキー]** から確認できます。
* **shm\_size**をインスタンスで使用可能な物理メモリのおよそ半分にします。この設定値が低すぎる場合、新しいセッションを開始できなくなります。RBIは、リクエストごとにChromiumインスタンスを起動するため、多くのメモリを使用します。
* **security\_opt**は、[seccompセキュリティプロファイル](#create-the-seccomp-security-profile)のパスを指し、リモートブラウザ分離では含める必要があります ([後述](#remote-browser-isolation-configuration))。上記の例では、KCMはこれなしでも実行できるため、コメントアウトされています。
* **GUACAMOLE\_PASSWORD**と**MYSQL\_PASSWORD**は一致する必要があり、ランダムに生成された強力なパスワードでなければなりません。パスワードの生成にはKeeperボルトのご使用をお勧めします。バックスラッシュ、ドルマーク、スラッシュなどの記号は使用しないでください。
* **GUACAMOLE\_ADMIN\_PASSWORD**は、デフォルトの「guacadmin」ユーザーのログインパスワードです。これは、ランダムに生成された強力なパスワードでなければなりません。パスワードの生成にはKeeperボルトのご使用をお勧めします。バックスラッシュ、ドルマーク、スラッシュなどの記号は使用しないでください。
* **SSL\_HOSTNAME**は、このサーバーを指すように設定されたFQDNでなければなりません。DNSが外部からこのIPにルーティングできるよう設定されていて、Let's Encryptが証明書を登録できるようポート80/443が解放されていることを確認します。
  {% endtab %}

{% tab title="PostgreSQL" %}

```yaml
version: "3"
services:

    guacd:
        image: keeper/guacd:2
        restart: unless-stopped
        shm_size: 1001500k
#        security_opt:
#            - "seccomp:guacd-docker-seccomp.json"
#            - "apparmor:guacd-apparmor-profile"
        environment:
            ACCEPT_EULA: "Y"
        volumes:
            - "common-storage:/var/lib/guacamole:rw"

    db:
        image: keeper/guacamole-db-postgres:2
        restart: unless-stopped
        environment:
            ACCEPT_EULA: "Y"
            GUACAMOLE_DATABASE: "guacamole_db"
            GUACAMOLE_USERNAME: "guacamole_user"
            POSTGRES_PASSWORD: "db_strong_password"
            GUACAMOLE_PASSWORD: "db_strong_password"
            GUACAMOLE_ADMIN_PASSWORD: "admin_strong_password"

    guacamole:
        image: keeper/guacamole:2
        restart: unless-stopped
        environment:
            ACCEPT_EULA: "Y"
            GUACD_HOSTNAME: "guacd"
            POSTGRES_HOSTNAME: "db"
            POSTGRES_DATABASE: "guacamole_db"
            POSTGRES_USERNAME: "guacamole_user"
            POSTGRES_PASSWORD: "db_strong_password"
            KCM_LICENSE: "XXXXXXXXXXXXXXXXXXXXXXXXXX"
        volumes:
            - "common-storage:/var/lib/guacamole:rw"

    ssl:
        image: keeper/guacamole-ssl-nginx:2
        restart: unless-stopped
        ports:
            - "80:80"
            - "443:443"
        environment:
            ACCEPT_EULA: "Y"
            GUACAMOLE_HOSTNAME: guacamole
            SSL_HOSTNAME: keeper.mycompany.com
            LETSENCRYPT_ACCEPT_TOS: "Y"
            LETSENCRYPT_EMAIL: you@company.com

volumes:
    common-storage:
```

このファイルを目的のKCMインスタンスにコピーします。以下のフィールドを変更します。

* **KCM\_LICENSE**には、KCM用のBase64形式のライセンスキーを指定します。このライセンスキーは、Keeper管理コンソールの **\[コネクションマネージャー] → \[オンプレミスライセンスキー]** から確認できます。
* **shm\_size**をインスタンスで使用可能な物理メモリのおよそ半分にします。この設定値が低すぎる場合、新しいセッションを開始できなくなります。RBIは、リクエストごとにChromiumインスタンスを起動するため、多くのメモリを使用します。
* **security\_opt**は、[seccompセキュリティプロファイル](#create-the-seccomp-security-profile)のパスを指し、リモートブラウザ分離では含める必要があります ([後述](#remote-browser-isolation-configuration))。上記の例では、KCMはこれなしでも実行できるため、コメントアウトされています。
* **GUACAMOLE\_PASSWORD**と**POSTGRES\_PASSWORD**は一致する必要があり、ランダムに生成された強力なパスワードでなければなりません。パスワードの生成にはKeeperボルトのご使用をお勧めします。バックスラッシュ、ドルマーク、スラッシュなどの記号は使用しないでください。
* **GUACAMOLE\_ADMIN\_PASSWORD**は、デフォルトの「guacadmin」ユーザーのログインパスワードです。これは、ランダムに生成された強力なパスワードでなければなりません。パスワードの生成にはKeeperボルトのご使用をお勧めします。バックスラッシュ、ドルマーク、スラッシュなどの記号は使用しないでください。
* **SSL\_HOSTNAME**は、このサーバーを指すように設定されたFQDNでなければなりません。DNSが外部からこのIPにルーティングできるよう設定されていて、Let's Encryptが証明書を登録できるようポート80/443が解放されていることを確認します。
  {% endtab %}
  {% endtabs %}

### カスタムSSL証明書の使用

Let's Encryptの代わりにカスタムSSL証明書を使用したい場合は、Docker Composeファイルの「ssl」セクションを以下のような内容に置き換えます。

```yaml
    ssl:
        image: keeper/guacamole-ssl-nginx:latest
        restart: unless-stopped
        ports:
            - "80:80"
            - "443:443"
        environment:
            SELF_SIGNED: "N"
            ACCEPT_EULA: "Y"
            GUACAMOLE_HOSTNAME: "guacamole"
            SSL_HOSTNAME: "keeper.mycompany.com"
            CERTIFICATE_FILE: "/var/lib/guacamole/your_certificate.pem"
            PRIVATE_KEY_FILE: "/var/lib/guacamole/your_private_key.key"
        volumes:
            - "C:\Users\Path\To\Cert:/var/lib/guacamole:ro"
```

この場合、`CERTIFICATE_FILE` は、中間証明書チェーンを含むPEMエンコード形式の証明書となります。`PRIVATE_KEY_FILE` は秘密鍵ファイルです。

また、上記のコードには、ローカルファイルシステムを対象のコンテナに割り当てるボリュームマウントがあることにご留意ください。文字列の `C:\Users\Path\To\Cert` の部分のみを変更する必要があります。Linux環境では、`/path/to/cert` となります。

### 手順 3: Dockerコンテナの起動

Windowsの場合、コマンドプロンプトを開きます。Linuxの場合、ターミナルシェルを開きます。手順2で保存した `docker-compose.yml` ファイルの場所に移動します。

環境を起動するには、以下のコマンドを入力します。

```
docker compose up -d
```

**注: 古いバージョンでは、「docker-compose」のようにハイフンを付けます。**

すべてを問題なく行った場合、指定したFQDNでKeeperコネクションマネージャーのログイン画面を開くことができます。

<figure><img src="/files/zZ3mHdgg8qkP42AfV2eW" alt=""><figcaption><p>Keeperコネクションマネージャーのログイン画面</p></figcaption></figure>

### 注意事項

* サーバーにルーティングされる適切なドメイン名を設定していない場合は、とりあえずユーザーインターフェースにアクセスしてテストを開始するためにローカルシステムのhostsファイルを書き換えてください。
* 独自のSSL証明書を使用している場合は、ワイルドカード証明書のご使用はお勧めしません。SSL秘密鍵はデバイスに保存することになるため、Keeperコネクションマネージャーのエンドポイント用に特に作成した証明書を利用することが最適となります。
* Windowsを使用している場合は、Windows Defenderファイアウォールを変更して、Dockerサービスにポート443を開放する必要があります。
* `docker compose down` を実行すると、ユーザー、接続、履歴を含むコンテナ内のすべてのデータが**削除**されます。コンテナを停止するには、`docker compose stop` を使用します。

### リモートブラウザ分離用構成 <a href="#remote-browser-isolation-configuration" id="remote-browser-isolation-configuration"></a>

#### セキュリティプロファイル <a href="#create-the-seccomp-security-profile" id="create-the-seccomp-security-profile"></a>

リモートブラウザー分離を使用する場合は、`guacd` コンテナ向けに `seccomp` セキュリティプロファイル を作成する必要があります。Keeperコネクションマネージャーを新規にインストールする場合は、`kcm-setup.run` スクリプトがこの処理を自動的に行い、`guacd-docker-seccomp.json` というファイルをインスタンス上の `/etc/kcm-setup/` ディレクトリに配置します。

このファイルが自動的に作成されていない場合や、既存のインスタンスをリモートブラウザー分離に対応させるためにアップグレードする場合は、ファイルを手動で作成する必要があります。

Dockerコンテナを更新して起動した後であれば、`guacd` のDockerイメージから直接ファイルを取得できます。以下の手順により、現在の作業ディレクトリに `guacd-docker-seccomp.json` ファイルが作成されます。

{% code overflow="wrap" %}

```
docker run --rm --entrypoint=/bin/cat keeper/guacd:2 /opt/keeper/share/guacd/docker-seccomp.json > guacd-docker-seccomp.json
```

{% endcode %}

有効なセキュリティプロファイルファイルをディレクトリに用意したら、`docker-compose.yml` の `security_opt` オブジェクトに設定します。

```yaml
        security_opt:
            - "seccomp:/path/to/guacd-docker-seccomp.json"
```

#### AppArmorプロファイル

[KCM 2.20](/release-notes/jp/enterprise/keeper-connection-manager/kcm-version-2.20.0.md)以降では、KCMクライアントでRBIを使用するために AppArmorプロファイルを構成する必要があります。Ubuntuなど、AppArmorを使用するプラットフォームでは、このプロファイルが読み込まれていないとRBIは動作しません。

セキュリティプロファイルの場合と同様に、`guacd` イメージからAppArmorプロファイルを取得できます。以下のコマンドを実行すると、作業ディレクトリに `guacd-apparmor-profile` ファイルが作成されます。

{% code overflow="wrap" %}

```
sudo docker run --rm --entrypoint=/bin/cat keeper/guacd /opt/keeper/share/guacd/guacd-apparmor-profile > guacd-apparmor-profile
```

{% endcode %}

作成したプロファイルは、起動時に自動で読み込まれるよう `/etc/apparmor.d/` 配下にコピーします。

```
sudo cp guacd-apparmor-profile /etc/apparmor.d/
```

その後、再起動するか、`apparmor_parser` を手動で実行して新しいプロファイルを読み込みます。

```
sudo apparmor_parser -r /etc/apparmor.d/guacd-apparmor-profile
```

読み込み後、`docker-compose.yml` の `security_opt` オブジェクトに設定します。

```yaml
        security_opt:
            - "seccomp:/path/to/guacd-docker-seccomp.json"
            - "apparmor:/path/to/guacd-apparmor-profile"
```

KCMクライアントがすでに稼働している場合は、再起動して変更を反映します。

```
docker compose up -d
```

### イメージ

以下は各イメージの説明です。

| イメージ名                                                                                                                                               | ベースイメージ                                            | 説明                                                              |
| --------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------- | --------------------------------------------------------------- |
| [`keeper/guacamole`](/keeper-connection-manager/jp/installation/docker-compose-install/keeper-guacamole.md)                                         | [`centos:7`](https://hub.docker.com/_/centos)      | Apache TomcatでデプロイされたApache Guacamoleウェブアプリケーション。               |
| [`keeper/guacd`](/keeper-connection-manager/jp/installation/docker-compose-install/keeper-guacd.md)                                                 | [`centos:7`](https://hub.docker.com/_/centos)      | RDPやSSHなどのネイティブプロトコルをサポートするApache Guacamoleプロキシデーモンguacd。       |
| [`keeper/guacamole-db-mysql`](/keeper-connection-manager/jp/installation/docker-compose-install/database-images/keeper-guacamole-db-mysql.md)       | [`mysql:5`](https://hub.docker.com/_/mysql)        | Apache Guacamoleデータベーススキーマで自動的に初期化されたMySQLのインスタンス。              |
| [`keeper/guacamole-db-postgres`](/keeper-connection-manager/jp/installation/docker-compose-install/database-images/keeper-guacamole-db-postgres.md) | [`postgres:11`](https://hub.docker.com/_/postgres) | Apache Guacamoleデータベーススキーマで自動的に初期化されたPostgreSQLのインスタンス。         |
| [`keeper/guacamole-ssl-nginx`](/keeper-connection-manager/jp/installation/docker-compose-install/ssl-termination/keeper-guacamole-ssl-nginx.md)     | [`nginx:stable`](https://hub.docker.com/_/nginx)   | <p>KeeperコネクションマネージャーにSSLターミネーションを自動的に提供するNGINXのインスタンス。<br></p> |

### :tada:インストール完了!

Keeperコネクションマネージャーインスタンスが実行状態となったので、guacadminとしてログインし、接続の設定を開始できます。 以降の手順については、以下のページをご参照ください。

{% content-ref url="/pages/3JzAlEHz7PsS6daC3ATV" %}
[KCMの使用方法](/keeper-connection-manager/jp/using-keeper-connection-manager.md)
{% endcontent-ref %}

インストールガイドの以降のセクションでは、環境をカスタマイズしたり変更したりする場合の、Dockerイメージごとの詳細情報を掲載しております。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.keeper.io/keeper-connection-manager/jp/installation/docker-compose-install.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
