Docker バインディング固定 IP/クロスホストコンテナ相互アクセス操作

Docker バインディング固定 IP/クロスホストコンテナ相互アクセス操作

序文

これまでは、パイプワークで割り当てた静的 IP は一時的なものであり、再起動すると無効になっていました。また、パイプワークでバインドされた物理マシン、仮想マシン、Docker コンテナの IP はすべて同じネットワークセグメントにあり、実稼働環境では非常に困難でした。現在は、Docker 独自のネットワークを使用して、再起動しても消えない固定 IP 割り当てを実装しています。

環境の紹介

サーバーIPコンテナ割り当てネットワークセグメント開始するコンテナのID
192.168.1.105 172.172.0.0/24 172.172.0.10
192.168.1.106 172.172.1.0/24 172.172.1.10

バインディング手順

まず192.168.1.105仮想マシンを操作する

ステップ1: カスタムネットワークを作成する

docker ネットワーク作成 --subnet=172.172.0.0/24 docker-br0

注: ここでは 172.172.0.0 ネットワーク セグメントが選択されていますが、他の空きネットワーク セグメントを指定することもできます。docker-br0 はカスタム ブリッジの名前で、任意の名前を付けることができます。

注: ここでのサブネット マスクは 255.255.255.0 である必要があります。これは、IP の後の 24 です。これは、後で iptables を使用してルーティング テーブルを構成するためです。以前は 255.255.0.0 を使用していましたが、構成できませんでした。そのため、ここでは 24 に設定しました。

ブリッジを作成したら、ifconfig を使用して追加のブリッジを表示します。追加のブリッジは、Docker の起動または再起動後に自動的に表示されます。永続的にブリッジを削除するには、docker network rm docker-br0 を使用します。

ステップ2: コンテナを起動するIPアドレスとして、カスタムネットワークセグメント内の任意のIPアドレスを選択します。

docker run -i -d --net docker-br0 --ip 172.172.0.10 --name nginx -v /usr/local/software/:/mnt/software/ 3bee3060bfc8 /bin/bash

注: コンテナを作成するときに、最初の手順で作成されたネットワーク セグメント内の静的 IP アドレスとして 172.172.0.10 が選択されました。そして、docker-br0 ブリッジから始めます。-v はマウントであり、コンテナにマウントする必要があるローカル ディレクトリを示します。 3bee3060bfc8は画像IDです

docker exec -it nginx /bin/bash を使用して起動したコンテナに入り、yum install net-tools を使用して iptables をダウンロードし、ifconfig を使用してコンテナの IP を表示します。

ステップ3: ローカルマシンとコンテナが相互にpingできるかどうかをテストする

# テスト ping Baidu [root@e98109ef9fd6 /]# ping www.baidu.com
PING www.a.shifen.com (119.75.213.61) 56(84) バイトのデータ。
119.75.213.61 からの 64 バイト (119.75.213.61): icmp_seq=1 ttl=56 time=10.1 ms
119.75.213.61 からの 64 バイト (119.75.213.61): icmp_seq=2 ttl=56 time=8.26 ms
 
#テストホスト [root@e98109ef9fd6 /]# ping 192.168.1.105
PING 192.168.1.105 (192.168.1.105) 56(84)バイトのデータ。
192.168.1.105 からの 64 バイト: icmp_seq=1 ttl=64 time=0.099 ms
192.168.1.105 からの 64 バイト: icmp_seq=2 ttl=64 time=0.081 ms
 
# 別の仮想マシンに ping をテストします [root@e98109ef9fd6 /]# ping 192.168.1.106
PING 192.168.1.106 (192.168.1.106) 56(84)バイトのデータ。
192.168.1.106 からの 64 バイト: icmp_seq=1 ttl=63 time=1.67 ms
192.168.1.106 からの 64 バイト: icmp_seq=2 ttl=63 time=0.587 ms

この時点で、コンテナに固定 IP アドレスをバインドすることは完了です。以下は、コンテナがホスト間で相互にアクセスする方法です。

ホスト間のコンテナアクセス

ステップ 4: 192.168.1.106 仮想マシンで、上記のステップ 1 ~ 3 に従って、コンテナーを固定 IP アドレスにバインドします。

ステップ 5: 2 つのコンテナーで相互にアクセスし、ホスト間のコンテナー アクセスが ping できないことを確認します。

[root@e98109ef9fd6 /]# 172.172.1.10 にpingを実行します
PING 172.172.1.10 (172.172.1.10) 56(84)バイトのデータ。
192.168.1.105 icmp_seq=1 宛先ホストに到達できません
192.168.1.105 icmp_seq=2 宛先ホストに到達できません
192.168.1.105 icmp_seq=3 宛先ホストに到達できません
 
[root@e98109ef9fd6 /]# 172.172.0.10 にpingを実行します
PING 172.172.0.10 (172.172.0.10) 56(84)バイトのデータ。
192.168.1.106 icmp_seq=1 宛先ホストに到達できません
192.168.1.106 icmp_seq=2 宛先ホストに到達できません
192.168.1.106 icmp_seq=3 宛先ホストに到達できません

ステップ6: ルーティングテーブルを構成する

#ルーティングルールを追加する

ip route add 他のコンテナのipネットワークセグメント/サブネットマスク via 他の仮想マシンのip devはどのネットワークカードを介して通信するか

のように:

IP ルート 172.172.1.0/24 を 192.168.1.106 dev eno16777736 経由で追加します

追加後、route コマンドを使用して追加されたルールを表示するか、ip route del 172.172.1.0/24 を使用してルーティング ルールを削除できます。

192.168.1.105 および 192.168.1.106 の仮想マシンにそれぞれ対応するルーティング ルールを追加します。

192.168.1.105: ip ルート追加 172.172.1.0/24 経由 192.168.1.106 dev eno16777736

192.168.1.106: ip ルート追加 172.172.0.0/24 経由 192.168.1.105 dev eno16777736

ステップ 7: 2 つのコンテナーで相互にアクセスし、クロスホスト コンテナーが相互に ping できることを確認します。

[root@e98109ef9fd6 /]# 172.172.1.10 にpingを実行します
PING 172.172.1.10 (172.172.1.10) 56(84)バイトのデータ。
172.172.1.10 からの 64 バイト: icmp_seq=1 ttl=62 time=0.636 ms
172.172.1.10 からの 64 バイト: icmp_seq=2 ttl=62 time=0.411 ms
172.172.1.10 からの 64 バイト: icmp_seq=3 ttl=62 time=0.472 ms
 
[root@8343ad7e7f0f /]# 172.172.0.10 にpingを実行します
PING 172.172.0.10 (172.172.0.10) 56(84)バイトのデータ。
172.172.0.10 からの 64 バイト: icmp_seq=1 ttl=62 time=0.920 ms
172.172.0.10 からの 64 バイト: icmp_seq=2 ttl=62 time=0.674 ms
172.172.0.10 からの 64 バイト: icmp_seq=3 ttl=62 time=0.657 ms

追加知識: docker-compose カスタム ネットワーク、固定コンテナ IP アドレス

デフォルトのブリッジ ネットワークのため、コンテナーを再起動すると IP アドレスが変更されます。シナリオによっては、コンテナの IP アドレスを修正する必要があります。

Docker-compose は、コマンド モードに応じてネットワークやコンテナーなどを作成する Docker 用のオーケストレーション ツールです。

設定ファイルを使用すると比較的便利で、問題を追跡できます。

docker-compose.ymlファイルを直接貼り付けます

バージョン: '2'
サービス:
  nginx:
   イメージ: nginx:1.13.12
   コンテナ名: nginx
   再起動: 常に
   端末: 真
   ネットワーク:
     外部ネットワーク:
      ipv4_アドレス: 172.19.0.2
 
ネットワーク:
  外部ネットワーク:
   ipam:
     設定:
     - サブネット: 172.19.0.0/16
      ゲートウェイ: 172.19.0.1

例:

ゲートウェイはゲートウェイアドレスです

サブネットはネットワークセグメントです

extnetworkはカスタムネットワーク名です

上記の設定では、nginxコンテナのIPアドレスは172.19.0.2に固定されています。

例: カスタム ネットワーク モード:

バージョン: '2'
サービス:
  nginx:
   イメージ: nginx:1.13.12
   コンテナ名: nginx
   再起動: 常に
   ネットワーク:
     外部ネットワーク:
   ポート:
     - 80:80
   ボリューム:
     - '/nginx/conf.d:/etc/nginx/conf.d'
  nginx2:
   イメージ: nginx:1.13.12
   コンテナ名: nginx2
   再起動: 常に
   ネットワーク:
     外部ネットワーク:
      ipv4_アドレス: 172.19.0.2
     
  デシベル:
   イメージ:mysql:5.7
   コンテナ名: db
   ボリューム:
    - /var/lib/mysql:/var/lib/mysql
   再起動: 常に
   ネットワーク:
     外部ネットワーク:
   ポート:
     -3306:3306
   環境:
    MYSQL_ROOT_PASSWORD: ワードプレス
    MYSQL_DATABASE: ワードプレス
    MYSQL_USER: ワードプレス
    MYSQL_パスワード: wordpress   
  
  ワードプレス:
   画像: wordpress:最新
   コンテナ名: wordpress
   依存:
     -db
   ポート:
     - 「8000:80」
   再起動: 常に
   ネットワーク:
     外部ネットワーク:
   環境:
     WORDPRESS_DB_HOST: db:3306
     WORDPRESS_DB_NAME: ワードプレス
     WORDPRESS_DB_USER: ワードプレス
     WORDPRESS_DB_PASSWORD: ワードプレス
ネットワーク:
  外部ネットワーク:
   ipam:
     設定:
     - サブネット: 172.19.0.0/16
      ゲートウェイ: 172.19.0.1

上記のDockerバインディング固定IP/クロスホストコンテナ相互アクセス操作に関する記事は、編集者が皆さんと共有する内容のすべてです。参考になれば幸いです。また、123WORDPRESS.COMを応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Docker で IP 設定を修正する方法
  • Docker は静的な外部ネットワークの固定 IP にバインドできないため、その解決策
  • Dockerコンテナの固定IP割り当ての詳細な説明
  • Dockerコンテナはカスタムネットワークセグメントで固定IP/静的IPアドレスを指定します
  • Dockerで固定IPとブリッジを設定する方法
  • Dockerコンテナ起動時に固定IPを設定する実装

<<:  XHTML CSS ページをプリンタ ページに変換する

>>:  mysql indexof関数の使用手順

推薦する

CentOS7 に MySQL データベースをインストールしてデバッグする詳細な手順 [例]

この例では、デバッグ用の MySQL データベースをダウンロードしてインストールする必要があります。...

Vueでデータを読み取るためにこれを悪用しないでください

目次序文1. これを使用してデータ内のデータを読み取るプロセス2. Dep.target はいつ存在...

コードを通じてHTMLエスケープ文字を識別する方法について説明します

データ内に次のような特徴を持つ「 ' 」などの文字が含まれることがあります。 &# ...

3つのDocker Nginxログの処理の詳細な説明

社内の同僚は Nginx ログの標準出力、つまりコンソール経由の処理を必要としているため、まずログを...

要素のフォームコンポーネントに関する注意事項

要素フォームとコード表示詳細はエレメントフォーム公式サイトをご覧ください構造と機能の分析紹介とソース...

Zabbixで監視する必要があるホストを追加するための詳細な手順

監視ホストの追加ホスト 192.168.179.104 が zabbix 監視項目に追加されます (...

Docker Machineの詳細な説明

Docker と Docker Machine の違いDocker はクライアント サーバー アーキ...

Vue は div の高さをドラッグ可能にします

この記事では、divのドラッグ可能な高さを実現するためのVueの具体的なコードを参考までに共有します...

CSS3 と JavaScript を使用して Web カラー ピッカーのサンプル コードを開発する

この例の Web カラー ピッカー機能は、ページ効果を実現するために CSS3 を使用します。つまり...

Centos7 に Zabbix3.0 をインストールするための非常に詳細な手順

序文最近、同社の業務の一部がコンピュータルームに移転し、ホストリソースの監視と管理をより便利に行うた...

Vueの最初のレンダリングのプロセス全体についての簡単な説明

目次1. Vueの初期化vue エントリ ファイルフルバージョンとランタイムバージョンの違い1.1、...

Linux で複数のファイルの名前を一括で変更する方法

Linux では、通常、ファイルの名前を変更するために mv コマンドを使用します。これは、単一のフ...

Linux でファイルを削除するときに「操作は許可されていません」というプロンプトが表示される場合の対処方法

同僚からよく聞かれるのですが、ファイル/ディレクトリを削除すると「操作は許可されていません」というエ...

Linux 上でプライベート Git サーバーを構築するための詳細なチュートリアル

1. サーバーのセットアップリモート リポジトリは実際にはローカル リポジトリと何ら変わりなく、純粋...

CentOS7にMySQL 8.0.26をインストールする手順

1. まず、お使いのマシンに応じて、MySQL 公式サイトから対応するデータベースをダウンロードしま...