containerは、ネームスペースやコントロールグループなどのLinuxカーネルセキュリティ機能を使用して、システムの他の部分から分離されたプロセスのグループです。これは仮想マシンに似た構造ですが、はるかに軽量です。追加のカーネルを実行したり、ハードウェアをシミュレートしたりするオーバーヘッドはありません。同じサーバー上に複数のコンテナを簡単に作成できます。Linuxコンテナを使用すると、オペレーティングシステム全体の複数のインスタンスを同じサーバー上で実行したり、システムの残りの部分に影響を与えずにアプリケーションとその依存関係をコンテナにバンドルしたりできます。サーバーがあり、クライアント用にWebサイトを含むいくつかのサービスを設定したとします。Webサーバーの同じインスタンスの仮想ホストになります。Linuxコンテナの場合、各Webサイトは独自のWebサーバーを備えた独自のコンテナで構成されます。LXDを使用して、これらのコンテナーを作成および管理できます。LXDは、コンテナーのライフサイクル全体を管理するハイパーバイザーサービスを提供します。このチュートリアルでは、LXDを使用して、同じサーバーに2つのNginxベースのWebサイトをインストールします。各Webサイトは独自のコンテナーに限定されます。次に、リバースプロキシとして機能する3番目のコンテナにHAProxyをインストールします。次に、トラフィックをHAProxyコンテナーにルーティングして、インターネットから両方のWebサイトにアクセスできるようにします。前提条件このチュートリアルを完了するには、次のものが必要です。-rootユーザーとファイアウォール。*レコードがサーバーのIPアドレスを指している2つの完全修飾ドメイン名(FQDN)。これを設定するには、チュートリアルhttps://www.digitalocean.com/community/tutorials/how-to-set-up-a-host-name-with-digitalocean[DigitalOceanでホスト名を設定する方法]に従ってください。必要に応じて、チュートリアルhttps://www.digitalocean.com/community/tutorial_series/getting-started-with-digitalocean-block-storage[DigitalOceanブロックストレージの概要]に従って20GB以上のブロックストレージを追加します。これを使用して、コンテナに関連するすべてのデータを保存できます。+」グループに追加する非rootユーザーアカウントを使用してサーバーにログインします。この非ユーザーアカウントを使用して、すべてのコンテナー管理タスクを実行します。+`グループに追加する必要があります。これを行うには、次のコマンドを使用します。lxdサーバーからログアウトし、再度ログインして、新しいSSHセッションが新しいグループメンバーシップで更新されるようにします。ログインしたら、LXDの設定を開始できます。ステップ2-LXDの構成LXDは、使用する前に適切に構成する必要があります。重要な構成決定は、コンテナを保存するためのストレージバックエンドのタイプです。[ブロックストレージ]を使用して保存されます。+`パッケージをインストールします。zfsutils-linuxこれをインストールしたら、LXDを初期化する準備が整いました。初期化中に、ZFSストレージバックエンドの詳細を指定するよう求められます。事前に割り当てられたファイルを使用するか、ブロックストレージを使用するかに応じて、次の2つのセクションがあります。ケースに適した手順に従ってください。ストレージメカニズムを指定したら、コンテナのネットワークオプションを構成します。事前に割り当てられたファイルを使用してコンテナを保存するようにLXDを設定するには、次の手順に従います。次のコマンドを実行してLXD初期化プロセスを開始します。init次の出力に示すように、いくつかの情報を提供するよう求められます。*と呼ばれる事前割り当てファイルの推奨サイズを含む、すべてのデフォルトを選択します。configured.推奨サイズは、サーバーの使用可能なディスク容量から自動的に計算されます。デバイスを構成したら、ネットワーク設定を構成します。これについては、次のオプションセクションの後で説明します。Storageを使用する場合は、LXDの構成で指定するために、作成したブロックストレージボリュームを指すデバイスを見つける必要があります。ボリュームをフォーマットするコマンドを見て、デバイスを見つけます。+`コマンドで指定されたパスを探します。次の図は、ボリュームの例を示しています。下線が引かれている部分だけが必要です。[構成手順は、作成されたブロックストレージのデバイスを示しています。+」ですが、実際の名前は異なる場合があります。ボリュームを特定したら、ターミナルに戻り、次のコマンドを発行してLXD初期化プロセスを開始します。init一連の質問が表示されます。次の出力に示すように質問に答えます。+」を選択し、デバイスへのパスを指定します。device:次に、残りの質問にデフォルト値を使用します。configured.プロセスが完了したら、ネットワークを構成します。初期化プロセスでは、次の図のような一連の画面が表示され、コンテナのネットワークブリッジを構成して、プライベートIPアドレスを取得し、相互に通信し、インターネットにアクセスできるようにします。[LXDネットワーク構成]各オプションにはデフォルト値を使用しますが、IPv6ネットワーキングについて尋ねられたら、このチュートリアルでは使用しないため、*いいえ*を選択します。ネットワーク設定を完了すると、コンテナを作成する準備が整います。ステップ3-コンテナーの作成LXDを正常に構成しました。ストレージバックエンドの場所を指定し、新しく作成されたコンテナのデフォルトネットワークを設定しました。+`コマンドを使用して、いくつかのコンテナを作成および管理する準備が整いました。使用可能なインストール済みコンテナーをリストする最初のコマンドを試してみましょう。list次の出力が表示されます。+`コマンドがLXDハイパーバイザーと通信するのはこれが初めてなので、出力により、コマンドがLXDとの安全な通信のためのクライアント証明書を自動的に作成したことがわかります。次に、コンテナの起動方法に関する情報が表示されます。最後に、コマンドはコンテナーの空のリストを表示しますが、これはまだ作成していないため予想されます。3つのコンテナを作成しましょう。Webサーバーごとに1つ、リバースプロキシ用に3つ目のコンテナーを作成します。リバースプロキシの目的は、インターネットからの着信接続をコンテナ内の適切なWebサーバーに向けることです。+)コンテナーを作成して起動します。16.04のコードネームであるXenialの最初の文字へのショートカットです。ubuntu:+`は、LXDイメージの事前構成済みリポジトリの識別子です。次のコマンドを実行して、コンテナを作成します。haproxyコンテナを作成したのはこれが初めてなので、最初のコマンドはインターネットからコンテナイメージをダウンロードし、ローカルにキャッシュします。次の2つのコンテナは非常に高速に作成されます。+`の作成からのサンプル出力を見ることができます。+`コマンドを使用してそれらに関する情報を表示しましょう。list出力には、各コンテナの名前、現在の状態、IPアドレス、タイプ、およびスナップショットが作成されているかどうかを示すテーブルが表示されます。|+---------+---------+-----------------------+------+------------+-----------+コンテナ名とそれに対応するIPv4アドレスに注意してください。サービスを構成するために必要になります。+`コンテナに接続して、最初のWebサーバーを設定しましょう。+`コマンドを使用します。次のコマンドを実行して、コンテナに接続します。`のコマンドパラメータがそこで停止することを示し、残りの行はコンテナ内で実行されるコマンドとして渡されます。+`にログインシェルを提供します。コンテナ内に入ると、シェルプロンプトは次のようになります。+`コマンドを実行できます。このシェルは、コンテナの範囲内に制限されています。このシェルで実行するものはすべてコンテナ内に残り、ホストサーバーにエスケープできません。コンテナ内のUbuntuインスタンスのパッケージリストを更新して、Nginxをインストールしましょう。`コンテナでホストされていることを明確にするテキストを追加しましょう。/var/www/html/index.nginx-debian.htmlファイルに次の変更を加えます。ファイルを保存して、エディターを終了します。コンテナからログアウトし、ホストサーバーに戻ります。`コンテナに対してこの手順を繰り返します。+」コンテナを終了します。+`を使用して、コンテナ内のWebサーバーが機能していることをテストしましょう。前に示したWebコンテナーのIPアドレスが必要です。http://10.10.10.100/出力は次のようになります。+`コマンドとそのIPアドレスを使用して2番目のコンテナーもテストし、正しく設定されていることを確認します。両方のコンテナを設定したら、HAProxyのセットアップに進むことができます。ステップ5-HAProxyコンテナーの構成これらのコンテナの前に、プロキシとしてHAProxyを設定します。これがどのように機能するかについてさらに背景が必要な場合は、チュートリアルhttps://www.digitalocean.com/community/tutorials/an-introduction-to-haproxy-and-load-balancing-concepts[HAProxyと負荷分散の概要]を参照してください。使用するドメイン名に基づいて、各コンテナにトラフィックを誘導します。`を次の構成例で使用します。」で利用できるようにします。これらのドメイン名の代わりに独自のドメイン名を使用してください。ubuntuインストールパッケージのリストを更新し、HAProxyをインストールします。haproxyインストールが完了したら、HAProxyを構成できます。お気に入りのテキストエディターでファイルを開きます。`セクションにいくつかの変更を加えます。+」オプションを追加します。50000...次に、2つのバックエンドコンテナーを指すようにフロントエンドを構成します。+」セクションを追加します。+`セクションにリダイレクトします。+」という名前を付けます。次のコードをファイルに追加して、バックエンドを定義します。+`オプションは、負荷分散戦略を示します。この場合、接続の最小数を選択します。http-request`オプションは、実際のWebクライアントIPでHTTPヘッダーを設定します。IPアドレスを記録するため、トラフィックの発信元を分析するのが難しくなります。+)を指定し、その後にサーバーのホスト名とポートを指定します。」コンテナに関連付けられたIPに解決されます。+」などの独自のホスト名があります。+`パラメーターは、HAPRoxyがWebサーバーのヘルスチェックを実行して、それが利用可能であることを確認するように指示します。構成が有効であることをテストするには、次のコマンドを実行します。-c出力は次のようになります。validHAProxyをリロードして、新しい設定を読み取ります。haproxyホストに戻るために、コンテナからログアウトします。`で受信した接続を他の2つのコンテナの適切なWebサーバーに転送するリバースプロキシとして機能するようにHAProxyを設定しました。+`が実際にリクエストを正しいWebコンテナに転送することをテストしてみましょう。このコマンドを実行してください。+`ヘッダーが設定されます。これは、HAProxyを使用して接続を適切なWebサーバーにリダイレクトする必要があります。出力は次のようになります。`コンテナに転送しました。次に、外部リクエストをHAProxyにルーティングして、世界がWebサイトにアクセスできるようにします。ステップ6-着信接続をHAProxyコンテナーに転送するパズルの最後のピースは、リバースプロキシをインターネットに接続することです。+」コンテナに転送するようにサーバーを設定する必要があります。HAProxyはコンテナにインストールされ、デフォルトではインターネットからアクセスできません。+」ルールを作成します。`)の2つのIPアドレスが必要です。次のコマンドを実行して、ルールを作成します。:80コマンドの内訳は次のとおりです。+`テーブルを使用することを指定します。+`は、ルールをPREROUTINGチェーンに追加することを指定します。+」は、TCPプロトコルを使用していることを示します。+`は、ルールの宛先IPアドレスを指定します。+:宛先ポートを指定します。NAT(DNAT)へのジャンプを実行したいことを示しています。+`は、リクエストをHAProxyを使用してコンテナのIPアドレスに送信することを望んでいることを示しています。Firewallの仕組み]およびhttps://www.digitalocean.com/community/tutorials/をご覧ください。+`パッケージをインストールします。iptables-persistentパッケージをインストールするときに、現在のiptablesルールを保存するように求められます。iptables」ルールを受け入れて保存します。2つのFQDNをセットアップした場合、Webブラウザーを使用して各Webサイトに接続できるはずです。+`コマンドを使用してローカルコンピューターからそれぞれにアクセスします。+`オプションでHTTPヘッダーフィールドを追加します。+`コマンドの出力は次のとおりです。+`コマンドの出力は次のとおりです。{...どちらの場合も、正しいWebサイトが表示されます。結論HAProxyがトラフィックを誘導する2つのWebサイトを、それぞれ独自のコンテナーに設定しました。このプロセスを複製して、より多くのWebサイトを構成し、各Webサイトを独自のコンテナーに限定することができます。新しいコンテナにMySQLを追加してから、WordPressなどのCMSをインストールして、各Webサイトを実行することもできます。このプロセスを使用して、古いバージョンのソフトウェアをサポートすることもできます。最後に、LXDはコンテナの完全な状態のスナップショットを取得する機能を提供します。これにより、後でバックアップを作成し、コンテナを簡単にロールバックできます。LXDを2つの異なるサーバーにインストールすると、それらを接続し、インターネットを介してサーバー間でコンテナーを移行することができます。