Portainer を使用した Docker コンテナのデプロイのプロジェクト実践

Portainer を使用した Docker コンテナのデプロイのプロジェクト実践

1. 背景

最近、Rancher 2.5.5 を使用して Redis のマスタースレーブ レプリケーションを展開していたところ、Rancher が大量の iptables ルールを生成することがわかりました。これらのルールにより、Rancher が展開されているマシンで Redis のマスタースレーブ レプリケーション機能を使用できなくなっていました。Rancher と k8s に関する私の理解は、ネットワーク アーキテクチャと使用方法の理解に限られており、基礎となるレイヤーを深く理解していないため、このネットワーク競合の問題を短期的に解決することはできません。

そのため、Docker の管理モードを Rancher から Portainer に変更しました。この Portainer は比較的軽量で、構築プロセス中に習得するのに数時間かかりました。ここで、参考までにプロセス全体を復元してみます。

2. 操作手順

  • Portinerをインストールする
  • 管理ノード
  • コンテナをデプロイする

3. Portinerをインストールする

Portiner をインストールする方法はたくさんありますが、私は常に最も簡単な方法で必要なものを入手したいので、ここでは docker を使用してビルドします。

3.1 Dockerのデプロイメント

docker のデプロイ方法は非常に簡単です。単純な run container コマンドを実行するだけです。コマンドは次のとおりです。

docker run -d \
-p 9000:9000 \
-p 8000:8000 \
--常に再起動\
-v /var/run/docker.sock:/var/run/docker.sock \
-v /opt/docker/portainer-ce/data:/data \ です。
--name portainer-ce portainer/portainer-ce

このコマンドは、物理マシンのポート 8000 とポート 9000 をコンテナのポート 8000 とポート 9000 にマッピングします。また、ホスト マシンの Docker 通信ファイル/var/run/docker.sockコンテナにマッピングします。さらに、永続的なデプロイメントのために、ディレクトリ/opt/docker/portainer-ce/dataがコンテナの/dataディレクトリにマッピングされます。コマンドを実行すると、次の図に示すように結果情報が返されます。

上の図では、dockerコンテナが正常に実行されていることがわかります。次に、サービスが正常に実行されているかどうかを確認する必要があります。ブラウザを使用して、URL http://127.0.0.1:9000/アドレスにアクセスします。結果は次のとおりです。

上の写真では、Portainer システムにアクセスできることがわかり、システムが正常にインストールされたことがわかります。

3.2 ノードの初期化

ここで、管理者アカウントのパスワードを設定する必要があります。ここでは、パスワードを入力して確認し、 Create userボタンをクリックして管理者アカウントを作成します。

管理者アカウントを設定したら、次の図に示すように初期化する必要があります。

上の画像には 3 つのオプションがあります。私は Portainer を使用してローカル Docker プログラムを管理することを選択しました。 Connectボタンをクリックして初期化操作を完了します。

3.3 機能の初期調査

初期化操作が完了すると、以下に示すようにPortainerの作業インターフェースに入ることができます。

上の図では、Portainerシステムにすでにlocalノードがあることがわかります。次の図に示すように、それをクリックしてノード管理に入ることができます。

上の図では、Portainerシステムがlocalノードのスタック、コンテナ情報、イメージ情報、ディスク情報、ネットワーク情報などをリストしていることがわかります。ここで、 Containersブロックをクリックして、次の図に示すようにコンテナリストを表示します。

上図では、コンテナ一覧に 2 つのコンテナがあること、またコンテナの実行状態がわかるほか、これらのコンテナを制御することもできることがわかります。

4. 管理ノード

これでローカル Docker を制御できるようになりましたが、これでは満足できません。他のマシンも制御する必要があります。

4.1 ノードの追加を開始する

Portainerシステムにはendpointsメニューがあり、次の図に示すように複数のノードを追加できます。

上の図からわかるように、すでにlocalノードが存在します。リストの上にAdd endpointボタンがあります。ボタンをクリックすると、下の図に示すように、追加されたノードの詳細ページに移動します。

上の図では、5 つのオプションがあることがわかります。ここでは、最も単純なオプション、つまりDocker API使用して制御する方法を選択します。

4.2 オープンAPIコントロール

この方法では、ノードのdocker起動プログラムにパラメータを追加する必要があるため、まずノードサーバーにログインする必要があります。ssh経由でサーバーにログインするコマンドは次のとおりです。

SSH ルート@xxx.xxx.xxx.xxx

コマンドを実行すると、次の図が返されます。

上の図では、ノードが配置されているサーバーを入力したことがわかります。次に、docker起動用の設定ファイルを編集する必要があります。コマンドは次のとおりです。

vim /usr/lib/systemd/system/docker.service

コマンドを実行した後、下の図に示すように、vim編集インターフェースで設定を変更できます。

リモートアクセスコードをdockerの起動コマンドラインに追加します。コードは次のとおりです。

-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock

次の図に示すように、コードを/usr/bin/dockerdプログラムの後ろにコピーします。

設定ファイルを保存したら、Dockerサービスを再起動する必要があります。Dockerを再起動するコマンドは次のとおりです。

systemctl デーモンをリロード && systemctl docker を再起動します

Dockerを再起動した後、すべてがうまくいけば完了です。

4.3 ポートステータスの確認

dockerの設定情報を表示するには、コマンドは次のようになります。

docker情報

コマンドを実行すると、返される情報は下図のようになります。

上の画像では、Docker が警告プロンプトを表示し、リモート アクセスを有効にするとセキュリティ上のリスクがあることを示しています。今は無視しますが、このプロンプトが表示されるということは、リモート アクセス機能が実際に有効になっていることを示しています。

また、ポートを開くことで、開通が成功したかどうかを確認できます。コマンドは次のとおりです。

ネットスタット -ntl

コマンドを実行すると、下の図に示すように、現在のホストのポート開放ステータスが返されます。

上図では、ポート2375が正常に開かれており、ノード自体が Docker を開いたことがわかります。

ただし、Portainer が IP 経由でこのノードにアクセスする場合、ネットワーク内のファイアウォールがこのポートをブロックするかどうかを考慮する必要があります。ここで、 nmapツールを使用して、ノードのポートがアクセス可能かどうかを検出できます。ここで、Portainer システムのコマンド ターミナルに戻り、nmap ツールを使用して検出します。コマンドは次のとおりです。

nmap -p 2375 xxx.xxx.xxx.xxx

コマンドを実行すると、2375 がオンになっているかどうかが返されます。実行結果を下の図に示します。

上図では、ノードのポート2375が開いており、接続できることがわかります。

4.4 ノードの追加を完了する

次に、以下のようにブラウザウィンドウに戻ります。

上の図に示すウェブページで、ノードのIPアドレスとポートをURL形式で入力し、 Add endpodintボタンをクリックしてノードを追加します。ノードが正常に追加された場合は、下の図に示すように、対応するプロンプトが表示されます。

上の図では、Portainer システムがノードが正常に追加されたことを通知し、このノードがノード リストに表示されていることがわかります。

5. コンテナの展開

ノードを追加したら、リモート ノードにコンテナをデプロイする準備が整います。

5.1 単一のコンテナをデプロイする

Portainerのホームページに戻ると、次の図に示すように、追加したノード情報が表示されます。

上の図で追加したノードを選択し、コンテナメニューオプションを入力すると、下の図に示すように、このノードのコンテナリストが表示されます。

上図に示すページのリストの上には、 Add containerボタンがあります。このボタンをクリックすると、「コンテナの追加」の詳細ページにリダイレクトされます。

上の図に示すページでは、Docker イメージのアドレスを入力する必要があります。ここでは、nginx イメージをランダムに選択し、ホストのポート 8888 をコンテナのポート 80 にマッピングしました。この情報を送信すると、下の図に示すように、Portainer システムはコンテナが正常に実行されているかどうかを通知します。

上の図では、コンテナが正常に実行され、コンテナ リストにジャンプしていることがわかります。次に、このノードに対応する 8888 ポートにアクセスして、サービスが利用可能かどうかを確認できます。

ブラウザを開き、アドレスバーにURL http://xxx.xxx.xxx.xxx:8888/を入力します。アクセス後に返される結果は、次の図のようになります。

上の図では、 nginxサービスが正常に実行されたことがわかります。

5.2 docker-composeをデプロイする

Portainerシステムは、コンテナリストページでコンテナをデプロイするだけでなく、Portainerシステムではstacksと呼ばれるdocker-composeを使用したデプロイもサポートしています。メニューバーでこの項目を選択すると、次の図に示すように、docker-composeサービスのリストが表示されます。

リストの上にAdd stackボタンがあります。このボタンをクリックして、次の図に示すように、 docker-composeサービスを追加します。

上の図に示すページでは、docker-compose情報を入力するように求められます。ここでは、Redisサービス用のdocker-compose構成を準備しました。構成コードは次のとおりです。

バージョン: '3.5'
サービス:
  レディス:
    画像: "redis:latest"
    コンテナ名: redis_test
    コマンド: redis-server
    ポート:
      - 「16379:16379」

ページに構成を入力した後、送信すると、次の図に示すように、Portainerは対応するノードにdocker-composeサービスをデプロイします。

デプロイが成功すると、スタックリストにデプロイしたサービスが表示されます。また、リスト内のサービス名をクリックして詳細ページに入り、次の図に示すように、サービスを表示および変更することもできます。

上の図では、このサービスがどのコンテナを実行しているかを確認でき、コンテナを終了または削除することもできます。

この記事は Portainer の予備的な調査に過ぎず、さらに詳しい内容を知るには、引き続き精力的な調査が必要です。

Portainer を使用して Docker コンテナをデプロイするプロジェクトの実践に関するこの記事はこれで終わりです。Portainer による Docker コンテナのデプロイに関する関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

Portainer を使用して Docker コンテナをデプロイするプロジェクトの実践に関するこの記事はこれで終わりです。Portainer による Docker コンテナのデプロイに関する関連コンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker可視化ツールPortainerの導入と中国語翻訳
  • Dockerでportainerをデプロイする詳細な手順

<<:  Eclipseを使用してMySQLデータベースに接続する方法を説明します

>>:  中国語ウェブコンテンツを紹介する10の経験

推薦する

Virtualbox で Ubuntu 16.04 の起動時に共有ディレクトリを自動的にマウントする最良の方法

仮想マシンを使用する人は通常、操作と使用を容易にするために仮想マシン用の共有ディレクトリを設定します...

TypeScript でオブジェクト キーの値の範囲を制限する方法

TypeScript を使用する場合、TypeScript が提供する型システムを使用してコードのあ...

Linux サーバーに SSH パスワードなしでログインする方法

テスト サーバーにログインするたびに、必ず ssh ログインのパスワードを入力する必要があります。ロ...

Vue+Openlayer で select を使用して要素を選択する実装コード

効果画像: 実装コード: <テンプレート> <div id="map&q...

MySQL 5.7を完全にアンインストールするための詳細な手順

この記事は主に、MySQLを再インストールする際のクリーンでないアンインストールのさまざまな問題をま...

MySQL で中国語の文字をピンインでソートする簡単な例

名前を格納するフィールドが GBK 文字セットを使用している場合、GBK 内部コード自体がエンコード...

ランダムな文字を生成する Java サンプルコード

サンプルコード: java.util.Random をインポートします。 java.util.UUI...

特定の部門 ID に基づいて、すべての下位レベルの複数レベルのサブ部門を照会する MySQL の例

シミュレーションテーブルとデータスクリプト次の SQL ステートメントをコピーして、sys_dept...

Navicateを使用してAlibaba Cloud Server上のMySQLに接続する

1. まず、サーバーの mysql にアクセスして権限を変更します。 GRANT オプション付きで、...

nginx を使用したプロキシ サーバーの設定

Nginx は、リバース プロキシ機能を使用して負荷分散を実装できるほか、フォワード プロキシ機能を...

Linux で ss コマンドと zabbix を組み合わせてソケットを監視する方法の詳細な説明

目次序文1. ssコマンド2. Zabbix監視マシンの全体的なソケットステータス2.1. スクリプ...

VMwareがLinuxシステムをインストールして起動した後に黒い画面が表示される問題を解決する

1. 設置環境1. HUAWEI mate x CPU i5 82500u、8g メモリ、独立グラフ...

Javascript サンプル プロジェクトでの虫眼鏡効果の実装プロセス

目次序文事例: JD.com の虫眼鏡効果の模倣オフセットシリーズクライアントシリーズスクロールシリ...

Vueでフォーム検証を実装する方法

1. インストールと使用まず、Vue プロジェクトにインストールします。 npm インストール --...

jsを使用してスライダーをドラッグする効果を実現します

この記事では、jsでスライダーをドラッグする方法の具体的なコードを参考までに共有します。具体的な内容...