質問:たとえば、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について尋ねられた場合、名前空間は基本的に必須です。上記は氷山の一角にすぎません。