Docker を使用する
概要: Docker は、コンテナ内でアプリケーションを実行するために使用するプラットフォームです。特定のソフトウェア (Redis、MongoDB など) や特定のソフトウェアバージョンを、OS でサポートされないものやコンパイルが必要なものを含めて使用できるようになります。
Docker は Plesk 拡張として使用できます。これを使用して、特定の Docker イメージをベースにコンテナを実行・管理することや、Docker をローカルホスト上とリモートサーバの両方で使用することができます。
このトピックでは、Plesk で Docker コンテナを作成、構成、管理する方法を学習します。また、Plesk からリモート Docker ホストを制御する方法についても学習します。
要件と制約事項
警告: Docker 拡張では、Docker Hub からイメージをそのままダウンロードします。いかなる方法でも事前構成は行いません。一部の Docker コンテナやその中のソフトウェアは、信頼できる環境での使用のみを想定しているため、追加のセキュリティ設定が必要になる可能性があります。これらのイメージをダウンロードして Plesk で起動する前に、ご自身でセキュリティを強化する必要があります。具体的な手順については、コンテナやソフトウェアベンダーのマニュアルを参照してください。たとえば、 Redis ドキュメントのセキュリティセクションを参照してください。
-
Plesk は次のオペレーティングシステムで Docker に対応します:CentOS 7、Red Hat Enterprise Linux 7、Debian 10、Debian 11、Ubuntu 18.04、Ubuntu 20.04、Ubuntu 22.04、AlmaLinux 8.x、Rocky Linux 8.x、AlmaLinux 9.x、Virtuozzo 7 Update 1 Hotfix 1 (7.0.1-686) 以降。
Plesk for Windows の場合、リモートマシンにインストールした Docker を使用できます(このセクションで後述する「**リモート Docker を使用する**」を参照してください)。
-
Docker コンテナにデプロイされた Plesk では Docker を使用できません。
-
Plesk でリモート Docker サービスを使用するには、追加のライセンスが必要になります。 単独で 購入することも、Hosting Pack、Power Pack、または Developer Pack の一部として購入することもできます。
-
Docker は x64 システム上でのみ機能します。
-
Plesk 上の Docker コンテナを移行またはバックアップすることはできません。ただし、コンテナで使用されるデータをバックアップするか(後述の「ボリュームマッピング」を参照)、スナップショットをダウンロードすることはできます。
-
Virtuozzo 7 は Update 1 Hotfix 1(7.0.1-686) 以降がインストールされている場合にサポートされます。このアップデートから、CentOS 7 をベースにした新しいコンテナはデフォルトでファイアウォールが有効になった状態で作成されます。これは Virtuozzo でセキュリティが強化されているためです。Plesk 管理者は、Plesk の動作に必要なポートを開放しておくために、ファイアウォールを手動で構成する必要があります。
前提条件
Docker の使用を開始する前に、 Docker 拡張 を Plesk サーバにインストールする必要があります。
- Plesk 管理者の場合は、拡張カタログから拡張をインストールします。
- それ以外の場合は、ホスティング事業者に連絡して拡張をインストールしてもらえるか確認してください。
拡張がインストールされると、利用を開始できます。ナビゲーションペインに Docker オプションが表示されています。
イメージカタログ
カタログ([Docker] > [Docker イメージカタログ])に、https://hub.docker.com/explore からのイメージが表示されます。デフォルトで、推奨されるイメージのみが表示されます。それ以外のイメージを表示するには、検索ボックスまたはフィルタを使用します。
アプリケーションごとに複数のバージョンを使用できます。以下のように、適切なタグを選択することで特定のバージョンを実行できます。
フィルタを使用するには:
-
検索ボックスの横の矢印 をクリックします。
-
イメージ名とリポジトリを両方あるいは片方のみ指定します。
選択できるリポジトリ:
- ローカルリポジトリ - ローカルイメージが含まれる。これらのイメージは、既にダウンロードされ、Docker のサーバに保存されています。詳しくは、このセクションで後述する「ローカルイメージを管理する」を参照してください。
- Docker Hub - https://hub.docker.com/explore
コンテナを実行するには:
-
[Docker] > [Docker イメージカタログ]にアクセスします。
-
検索ボックスまたはフィルタを使用して、カタログ内のアプリケーションを簡単に探すことができます。
-
アプリケーションの説明やマニュアルを Docker Hub で参照するには、イメージ名をクリックします。ローカルイメージはこの対象となりません。
-
特定のバージョンを実行するには、[実行]ボタンの横の矢印をクリックし、アプリケーションバージョンを選択します。
-
選択したアプリケーションの最新バージョンを実行するには、[実行]をクリックします。
イメージがローカル保存されている場合、[実行(ローカル)]というボタンになります。
Plesk はコンテナを作成して、環境変数などの設定を指定するようユーザに要求してから、コンテナを実行します。[設定]画面で[キャンセル]をクリックすると、実行をキャンセルできます。設定について詳しくは、後ほど説明する「コンテナ設定」を参照してください。
-
[Docker カタログ]ページ上部のコンテナリストにコンテナが表示されます。
コンテナを正常に実行するために必要な設定については、ログを参照してください([ログ])。
コンテナ設定
注釈: コンテナ設定を変更したい場合、コンテナを停止する必要はありません。新しい設定を保存すると、Plesk がコンテナを再作成します。
コンテナ設定を編集するには、[設定]または[詳細] > [設定]にアクセスします。
メモリを制限する
デフォルトで、Docker コンテナでの RAM の使用は無制限です。RAM の使用を制限するには、[無制限]チェックボックスをオフにして、[メモリ上限]フィールドにメガバイト単位で上限値を入力します。
注釈: 現時点では、Docker コンテナで CPU とディスク使用量を制限することはできません。
注釈: Docker コンテナは管理者レベルのオブジェクトであり、契約レベルの cgroup 制限(CPU、RAM、ディスク使用量)ではコントロールされません。
自動的に起動
オプション[システムの再起動後に自動的に起動]をオンにしないと、システムの再起動後、このコンテナを使用するウェブサイトがダウンして、コンテナを手動で起動しなければならなくなります。
ポートマッピング
[自動ポートマッピング]はデフォルトでオンになっており、コンテナの内部ポートはホストシステムの任意のポートに無作為にマッピングされます(例:32768)。
ホストシステムでポートを変更するには、オプション[自動ポートマッピング]をクリアして、[手動マッピング]に別の外部ポートを指定します。チェックボックスをクリアしても[手動マッピング]が表示されない場合、コンテナがポートを露出(expose)していないことを意味します。
手動マッピングを使用する場合、デフォルトでは、Docker はホストシステムの localhost インターフェース (127.0.0.1) の指定されたポートにのみバインドします。この方法では、ポートにインターネットからアクセスできず、コンテナ内のアプリケーションは攻撃から保護されます。Docker をホストシステムのすべてのネットワークインターフェースの指定されたポートにバインドするには、[a private port on the host](ホストのプライベートポート) チェックボックスをオフにします。そうすると、コンテナ内のアプリケーションはインターネットからアクセスできるようになり、ホストシステムの任意の IP アドレスを介して指定されたポートにアクセスできるようになります。
警告: Docker では、認証はアプリケーション自体によって実行されるものと想定されますが、そうでない場合もあります (たとえば、MySQL/MariaDB はデフォルトで匿名アクセスを許可しませんが、Redis は許可します)。コンテナ内のアプリケーションをインターネットからアクセス可能にすると、攻撃者によってアプリケーションが攻撃されてしまう可能性があります。
ボリュームマッピング
Docker ボリュームとは、サーバ上のディレクトリを Docker コンテナにマウントしたもので、ホストシステムからアクセス可能な永続的なストレージを使用できるようになります。Docker ボリュームはバックアップ可能であり、さらに重要なのは、コンテナを停止または削除しても削除されないということです。
コンテナ内のデータについて詳しくは、Docker のドキュメントを参照してください。
ボリュームマッピングを追加するには、以下を指定します。
- 左の「Destination」フィールドに、コンテナ内のディレクトリの絶対パスを指定します。
- 右の「Source」フィールドに、コンテナにマウントしたいサーバ上のディレクトリの絶対パスを指定します。
追加のディレクトリをマッピングするには、[マッピングを追加]をクリックします。
環境変数を設定する
環境変数はコンテナ内のアプリケーションによって使用されます。場合によっては、変数の追加や既存の変数の編集が必要になります。Plesk では、変数を必要な数だけ追加することができます。
コンテナを操作する
コンテナに対して以下の操作を実行できます。
-
コンテナを再起動([再起動])または停止([停止])する。この場合、コンテナは現在の設定で再作成されます。
注釈: マウントされたボリュームにデータを保存しなかった場合(後述の「ボリュームマッピング」セクションを参照)、それらのデータは失われます。
-
ログおよびリソース使用状況を参照する([詳細])。
-
環境変数やボリュームマッピングなどのコンテナ設定を変更する([設定]または[詳細] > [設定])。
CentOS 上の Plesk では、コンテナにメモリ上限を設定できます([設定] > [メモリ上限])。
-
コンテナを名称変更する([設定] > [コンテナ名])。
-
同じバージョンまたは別のバージョンのイメージを使用してコンテナを再作成する([詳細] > [再作成])。
-
カスタム設定のコンテナをベースにイメージを作成する([詳細] > [イメージとして保存])。
-
コンテナのスナップショットを作成する([詳細] > [スナップショットをダウンロード])。
-
コンテナを削除する([削除]または[詳細] > [削除])。
コンテナを再作成する
通常、アプリケーションを新しいバージョンに更新したい場合には、コンテナの再作成が必要になります。カタログで提供されているあらゆるアプリケーションバージョンを使用してコンテナを再構築できます。
カスタム設定は、再作成中も保持されます。コンテナ内のアプリケーションで使用されるデータを保持するには、コンテナを再作成する前にボリュームマッピングを指定する必要があります。ボリュームマッピングによって、コンテナ内で使用されるディレクトリへのアクセスが可能になります(「コンテナ設定」の「ボリュームマッピング」を参照してください)。
コンテナを再作成するには:
- [Docker]にアクセスし、再作成したいコンテナの下で[詳細]をクリックします。
- コンテナ設定で[再作成]をクリックし、イメージバージョンと、デフォルト環境変数を使用するかどうかを指定します。
リモート Docker を使用する
デフォルトで、Plesk は Plesk コンポーネントとしてインストールされた Docker を使用しますが、Plesk の外部にインストールされた 1 つ以上の Docker サービスを使用することもできます。ただし、一度に使用できるサーバは 1 つだけです。選択されたサーバのホスト名が、Plesk の Docker カタログのタイトルに表示されます。
注釈: リモートの Docker サービスを管理するには、Plesk ライセンスキーのアドオンが必要になります。このアドオンがないと、Plesk サーバで実行されているローカルの Docker サービスしか管理できません。
リモートサービスを構成する
Docker のマニュアル の説明に従って Docker を実行するリモートサーバを構成し、Plesk でリモートサーバとして使用します。
リモートサービスを管理する
以下の手順は、Plesk for Linux と Plesk for Windows の両方が対象となります。
リモートホスト上の Docker を使い始めるには:
- [ツールと設定] > [Docker]([サーバ管理]の下)にアクセスします。
- [サーバを追加]をクリックし、Docker のあるリモートサーバの設定を指定します。
- Plesk でこの Docker サービスの使用を開始するには、[アクティブに設定]をオンにしておきます。
Docker へのリンクがナビゲーションペインに表示されます。
Docker サービスを切り替えるには:
- [ツールと設定] > [Docker]([サーバ管理]の下)にアクセスします。
- サーバのリストで、使用したいサーバを選択し、[アクティブに設定]をクリックします。
あるいは、サーバの設定を編集する時に、アクティブとして設定できます。
カスタム設定でイメージを作成する
コンテナに加えた変更をベースに新しいイメージを作成したい場合、[イメージとして保存]を使用します。これにより、コンテナのスナップショットが作成され、イメージカタログに新しいイメージとして表示されます。このようにして、環境変数などのカスタム設定でイメージを作成することができます。
自分のコンテナからイメージを作成するには:
[Docker] > コンテナ名の下の[詳細] > [イメージとして保存]の順に選択し、オプションで以下を指定します。
- イメージ名。デフォルトで ID が生成され、名前として使用されます。
- タグ。イメージバージョンを指定できます。デフォルトのバージョンは「latest」です。
作成されたイメージはイメージカタログに表示され、「ローカルイメージ」と表記されます。
ローカルイメージを管理する
ローカルイメージとは、Docker によってローカルディスクに保存されるイメージであり、イメージカタログからダウンロードする必要はありません。
イメージは以下のような場合にローカルになります。
- イメージの任意のバージョン(タグ)を選択し、イメージのダウンロードが始まった。その後、コンテナを実行するか、実行をキャンセル([設定]画面)すると、イメージはローカル保存される。
- Plesk の Docker カタログにイメージをアップロードする(Docker イメージカタログの[イメージをアップロード])。
- コンテナからカスタムイメージを作成した(「カスタム設定でイメージを作成する」を参照)。
- コマンドラインインターフェースを使用してイメージをビルドした。
Docker で、あるイメージに属するバージョン群から少なくとも 1 つのバージョンがダウンロードされている場合、このイメージはカタログで「ローカルイメージ」と表記されます。「実行(ローカル)」と表記される場合、最新バージョンが既にダウンロードされていることを意味します。また、ある製品に存在するローカルイメージの数も表示されます。
ローカルイメージを表示し、古くなったローカルイメージを削除するには:
-
[Docker] > [Docker イメージカタログ]にアクセスします。
-
すべてのローカルイメージを表示するには、検索ボックスの横の矢印をクリックし、[リポジトリ]フィルタで[ローカル]を選択します。
-
特定の製品のローカルイメージをすべて表示するには、製品名の下のリンクをクリックします。すべてのローカルイメージのタグと占有しているディスクスペースが表示されます。
-
すべてのイメージを削除するには、[すべてのイメージを消去]をクリックします。
-
特定のイメージを削除するには、削除したいイメージの横にある削除 アイコンをクリックします。
ドメインからコンテナへプロキシリクエストを送るように nginx をセットアップする
一部の Docker コンテナはポートを露出するため、コンテナ内のアプリケーションにこれらのポートを経由してアクセスできます。
ウェブサイトで Docker コンテナ内のアプリケーションを使用するときに、URL に標準ではないポートを指定するのは都合が悪い可能性があります。回避策として、ドメインからこのポートへプロキシリクエストを送るように nginx をセットアップすることができます。ドメインは標準ポート(80 など)を使用でき、URL にポートを明示的に指定する必要がありません。
要件
- Plesk で nginx が実行されている必要があります。
- コンテナ内のポートをホストシステムのポート(たとえば 32768)に手動でマッピングする必要があります(Docker > コンテナを選択 > [設定] > [自動ポートマッピング]オプションをクリア)。
システムの任意のポート(32768 など)にコンテナ内のポートを手動でマッピングした後で、nginx がドメインからこのポートへプロキシリクエストを送るようにセットアップすることができます。これにより、ドメインが nginx で標準ポート(80 など)を使用できるようになります。これには、以下の方法でドメイン設定に nginx 用のルールを追加します。
[ウェブサイトとドメイン] > ドメイン > [Docker プロキシルール] > [ルールを追加]に移動して、以下を指定します。
- URL:コンテナ内で実行されるアプリケーションを使用するウェブサイトの URL を指定します。メインウェブサイトまたはその一部にできます。
- コンテナ:Docker コンテナとして実行されるアプリケーションを選択します。
- ポート:コンテナ設定で指定したマッピングを 1 つ選択します(コンテナ内のポートからシステムのポートへのマッピング)。nginx がシステムのポートへプロキシリクエストを送るようになります。
プロキシルールはウェブサーバの構成、たとえばウェブサイトの nginx.conf
ファイル( /var/www/vhosts/system/$domain/conf/
内)などに実装されます。
#extension docker begin
location ~ ^/.* {
proxy_pass http://0.0.0.0:9080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
#extension docker end
プロキシルールは NAT 環境内のサーバで問題なく機能します。
注釈: プロキシルールでウェブサイトに接続された Docker コンテナは、契約のディスクスペース使用量に加算されません。ただし、ウェブサイトディレクトリが Docker コンテナにボリュームとしてマウントされる場合は例外となります。この場合、コンテナ内のすべてのファイルが、ウェブサイトによるディスクスペース使用量に加算されます。