Docker名前空間

質問:たとえば、TESTLINKを構築するために、Dockerコンテナー間のコラボレーションが必要な場合、コラボレーションには2つのコンテナーが必要であり、mariadbです。コンテナーが分離されていることは誰もが知っています。2つのコンテナーが相互に通信する必要がある場合、ネットワークはどうやるか

方法1:
コンテナを起動してIPアドレスを指定します。ポートマッピング方法を使用できますが、サービスが多すぎると、膨大なポートリストを維持する必要があるため、使いやすくなりません。環境の中で、各環境がポートを確立します。マッピングリストの保守は大きなプロジェクトです。

方法2:
1。リンク
2.コンテナモード
上記の2つのモードを解決できます。リンクは、ネットワーク通信を実現するために、リンクパラメータを介して2つのサービスを接続することです。

例えば:

docker run -d --name mariadb -e ALLOW_EMPTY_PASSWORD=yes -e MARIADB_USER=bn_testlink -e
MARIADB_DATABASE=bitnami_testlink -v /home/gaofei/test/mysql:/var/lib/mysql -p 8088:3306
bitnami/mariadb:latest


Docker -eパラメーターは環境変数を指定し、その機能はパラメーターの受け渡しと同等です。ミラー起動の初期化では、渡される必要のあるいくつかのパラメーターが指定されます。

コンテナーを使用して同じネットワーク名前空間を共有します
 dockerrun --name = conan -itd -p 899:4200 connan
 #-netコンテナーdockerrunを指定します
 --name = holms -itd --net = container:conan holmes docker
 compose up- d
 コンテナオーケストレーション:docker composeは単一のマシンでのみ使用でき、クラスターは適用されません。
 実際、dockerコマンドは構成ファイルになります。

 

3つのDocker分離テクノロジー:
Linux名前空間:ネットワーク、プロセス、ファイル...
cgroup:分離されたリソース(cpu、メモリ、io)
共同ファイルシステム:(ミラーディレクトリ(このコンテナーのディレクトリのみが表示されます))

コンテナを作成する場合:コンテナ
のプロセスを作成します(ネットワーク、プロセス、ファイル名スペースを選択します。デフォルトは新規です)。
コンテナはプロセスです。ネットワークスペース、プロセススペース、ファイルマウントスペースを作成するだけです。
ps -efはホストのすべてのプロセスを確認しますが、コンテナーの内部は確認できません。
ifconfig#表示されるのはホストのネットワーク構成情報です。

コンテナを入力して、コンテナのネットワーク構成を表示します。

1.コンテナに応じてPidを見つけます

[root@izbp1jfqk9lif6vh3vclhkz ~]# docker inspect zcc_jenkins | grep "Pid*"
            "Pid": 2914,
            "PidMode": "",
            "PidsLimit": 0,

2. Pidに従って、コンテナの内部ネットワークを入力します。

[root@izbp1jfqk9lif6vh3vclhkz ~]# cd /proc/2914
[root@izbp1jfqk9lif6vh3vclhkz 2914]# cd ns
[root@izbp1jfqk9lif6vh3vclhkz ns]# ll
total 0
lrwxrwxrwx 1 1000 1000 0 Oct 26 22:24 ipc -> ipc:[4026532162]
lrwxrwxrwx 1 1000 1000 0 Oct 26 22:24 mnt -> mnt:[4026532160]
lrwxrwxrwx 1 1000 1000 0 Oct 25 10:08 net -> net:[4026532165]
lrwxrwxrwx 1 1000 1000 0 Oct 26 22:24 pid -> pid:[4026532163]
lrwxrwxrwx 1 1000 1000 0 Oct 26 22:24 user -> user:[4026531837]
lrwxrwxrwx 1 1000 1000 0 Oct 26 22:24 uts -> uts:[4026532161]

ここでは、いくつかの主要な名前空間を表示できます。

3.名前空間を入力して表示できます。

nsenter -t 2914 -n
[root@izbp1jfqk9lif6vh3vclhkz ns]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.2  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:ac:11:00:02  txqueuelen 0  (Ethernet)
        RX packets 9559  bytes 6317939 (6.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 8555  bytes 1544289 (1.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        loop  txqueuelen 1  (Local Loopback)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

4.最後に、終了してホストのネットワーク構成を表示します。

[root@izbp1jfqk9lif6vh3vclhkz ns]# exit
logout
[root@izbp1jfqk9lif6vh3vclhkz ns]# ifconfig
br-88c96636d51c: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 172.18.0.1  netmask 255.255.0.0  broadcast 172.18.255.255
        ether 02:42:9c:0a:73:00  txqueuelen 0  (Ethernet)
        RX packets 722466  bytes 620939057 (592.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 456232  bytes 194335800 (185.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.17.0.1  netmask 255.255.0.0  broadcast 172.17.255.255
        ether 02:42:fc:5f:37:27  txqueuelen 0  (Ethernet)
        RX packets 13980  bytes 1782939 (1.7 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 15015  bytes 15977791 (15.2 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.28.24.72  netmask 255.255.240.0  broadcast 172.28.31.255
        ether 00:16:3e:13:a3:f2  txqueuelen 1000  (Ethernet)
        RX packets 722466  bytes 620939057 (592.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 456232  bytes 194335800 (185.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

上記は、dockerの名前空間の差分ビューです。

インタビューでDockerについて尋ねられた場合、名前空間は基本的に必須です。上記は氷山の一角にすぎません。

おすすめ

転載: blog.csdn.net/chuancheng_zeng/article/details/109300744