Naważniejsze komendy
Wyświetl sieci / VPC:
docker network ls
Szczegóły konfiguracji:
docker network inspect
Utwórz nową sieć:
docker network create <>
Podłączenie / rozłączenie sieci z kontenerem:
docker network connect
docker network disconnect
Zaczynamy podstawy
Pamiętaj aby kontenery były w tej same sieci VPC aby mogły komunikować się z sobą. Dla przykładu front-end i back-end.
$ docker network create my_vpc a120f56169066097f7a6725fa36e9c7de17a9d1cb6cb4b83669e534f7b84471c$ docker network ls NETWORK ID NAME DRIVER SCOPE f96820e040e7 bridge bridge local 21fb2d66d4bf host host local a120f5616906 my_vpc bridge local 1df57004929e none null local$ docker container run -d --name httpd_vpc --network my_vpc httpd:2.4 45adf5a2d755b62434964bb858d8b0aed68d336e9abd03a05f23cda03de258e8 $ docker network inspect my_vpc [ { "Name": "my_vpc", "Id": "a120f56169066097f7a6725fa36e9c7de17a9d1cb6cb4b83669e534f7b84471c", "Created": "2018-10-31T22:01:03.1142723Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "45adf5a2d755b62434964bb858d8b0aed68d336e9abd03a05f23cda03de258e8": { "Name": "httpd_vpc", "EndpointID": "fe4bb87723da64a066a2c0be1408e8f450c0bc37fe617e49d3d86f38ae9a9bfc", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ]$ docker network connect my_vpc ubuntu $ docker network inspect my_vpc [ { "Name": "my_vpc", "Id": "a120f56169066097f7a6725fa36e9c7de17a9d1cb6cb4b83669e534f7b84471c", "Created": "2018-10-31T22:01:03.1142723Z", "Scope": "local", "Driver": "bridge", "EnableIPv6": false, "IPAM": { "Driver": "default", "Options": {}, "Config": [ { "Subnet": "172.18.0.0/16", "Gateway": "172.18.0.1" } ] }, "Internal": false, "Attachable": false, "Ingress": false, "ConfigFrom": { "Network": "" }, "ConfigOnly": false, "Containers": { "45adf5a2d755b62434964bb858d8b0aed68d336e9abd03a05f23cda03de258e8": { "Name": "httpd_vpc", "EndpointID": "fe4bb87723da64a066a2c0be1408e8f450c0bc37fe617e49d3d86f38ae9a9bfc", "MacAddress": "02:42:ac:12:00:02", "IPv4Address": "172.18.0.2/16", "IPv6Address": "" }, "cdd389ac1f6f8f83b257104eae229401c537c0d4a08abf9b2795a009ac9a32dd": { "Name": "ubuntu", "EndpointID": "b129dd3a637e870931d91dea69d9b6221608796e5ce52ba1402969af3b740f3e", "MacAddress": "02:42:ac:12:00:03", "IPv4Address": "172.18.0.3/16", "IPv6Address": "" } }, "Options": {}, "Labels": {} } ]
DNS
Najwygodniejszy sposób użycia domen DNS jest użyciem nazw kontenerów. Przykład
$ docker container exec -it ubuntu curl httpd_vpcIt works!
DNS Round Robin - almost Load Balancing
Jeżeli potrzebujesz użyć bliskiego load balancingu czyli rozdzielać ruch między dwoma i więcej kontenerami. Przygotowuje 3 kontenery httpd z zmienionym "It works".
$ docker network create my_vpc_lb$ docker container run -it -d --net my_vpc_lb --net-alias my_lb httpd:2.4
$ docker container run -it -d --net my_vpc_lb --net-alias my_lb httpd:2.4
$ docker container run -it -d --net my_vpc_lb --net-alias my_lb httpd:2.4$ docker container ls$ docker container exec -it <<ID>> bash root@dee376719358:/usr/local/apache2# echo inst1 >> htdocs/index.html root@dee376719358:/usr/local/apache2# exit exit
Teraz uruchomimy nowy kontener jako clienta w VPC utworzonym np. ubuntu i zainstalujemy CURL
$ docker container run -it --net my_vpc_lb ubuntu
#apt-get update && apt-get install -y curl
Przechodzimy do testu wewnątrz ubuntu i odwołanie do DNS RR: my_lb
root@5a9c42637ef6:/# curl my_lb inst3 root@5a9c42637ef6:/# curl my_lb ins1 root@5a9c42637ef6:/# curl my_lb ins2 root@5a9c42637ef6:/# curl my_lb ins1 root@5a9c42637ef6:/# curl my_lb inst2