Trong bài viết này, mình sẽ hướng dẫn các bạn cách kết nối 2 container sử dụng ASP.NET Core với SQL Server.
Trong Docker, có 3 loại network được tự động tạo ra: bridge, host, và none
PS C:\WINDOWS\system32> docker network ls
NETWORK ID NAME DRIVER SCOPE
d665d2690c92 bridge bridge local
4029cb0d3764 host host local
0a2d8cf2eb08 none null local
Khi bạn run một container, bạn có thể sử dụng flag: --network để chỉ định loại network mà bạn muốn container chạy trên đó khi run. Vì mặc định được tạo ra bởi docker, nên bạn có thể sử dụng nó bất cứ khi nào cần.
Để giao tiếp với các container với nhau, 2 container phải nằm trong 1 network.
Trong bài viết này, mình làm 2 ví dụ. Tại sao có 2 ví dụ? Vì ví dụ đầu tiên sẽ tương đối đơn giản dễ hiểu. Ví dụ 2 sẽ có 1 chút rắc rối nhưng dựa trên ví dụ 1, bạn sẽ dễ dàng hiểu ra.Các lệnh về network
Liệt kê network docker network ls Tạo 1 networkdocker network create <network-name>
Xóa 1 network
docker network rm <network-name>
Kết nối 1 container vào 1 network
docker network connect <network-name> <container-name>
Kiểm tra thông tin mạng
docker network inspect <network-name>
Tạo network cho 2 container Ubuntu
Trong ví dụ đầu tiên, chúng ta sẽ liên kết 2 container Ubuntu với nhau. Chúng ta tạo 1 mạng driver là bridge đặt tên là Ubuntu-network.
Tạo network:
docker network create ubuntu-network
Tạo 2 container và connect tới Ubuntu-network
docker run --name ubuntuA -dit --network=ubuntu-network ubuntu
docker run --name ubuntuB -dit --network=ubuntu-network ubuntu
Chúng ta sẽ có mô hình
Kiểm tra bằng lệnhdocker network inspect ubunutu-network
Để kiểm tra xem ubuntuA có ping tới được ubuntuB hay không, chúng ta sử dụng lệnh ping
Mở bash:docker exec -it ubuntuA "bash"
Cài đặt lệnh ping:
apt-get update && apt-get install -y iputils-ping
Sau đó bạn gõ:
ping -c 2 ubuntuB
64 bytes from ubuntuB.ubuntu-network (172.19.0.3): icmp_seq=1 ttl=64 time=0.323 ms
64 bytes from ubuntuB.ubuntu-network (172.19.0.3): icmp_seq=2 ttl=64 time=0.092 ms
--- ubuntuB ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 0.092/0.207/0.323/0.115 ms
Như vậy là bạn đã kết nối thành công giữa Ubuntu A và Ubuntu B
Kết nối ASP.NET Core với SQL Server
Bạn xem phần hướng dẫn để pull và tạo container cho SQL Server 2019: https://nhatkyhoctap.blogspot.com/2022/06/docker-cai-at-ms-sql-server-linux-voi.html
Đối với ứng dụng ASP.NET Core, bạn tải source code Github tại đây: https://github.com/anbinhtrong/AspNetSqlCompose
Dựa vào ví dụ 1, chúng ta tạo network dành cho ASP.NET Core với SQL Server
docker network create api-network
Với SQL Server, chúng ta vừa cho phép external network truy cập vào SQL Server và vừa cho phép ứng dụng ASP.NET truy cập vào SQL Server thông qua bridge api-network
docker network create api-network
Tạo container
docker run -e 'ACCEPT_EULA=Y' -e "SA_PASSWORD=Nhatkyhoctap#$1111" -p 1431:1433 --name sql1 -d mcr.microsoft.com/mssql/server:2019-latest
docker run -p 8080:80 --name contoso contoso -e "serverName=sql1,1433" -e "databaseName=ContosoUniversity" -e "userName=sa" -e "password=Nhatkyhoctap#$1111"
Để kết nối vào network api-network, chúng ta sử dụng lệnh connect
docker network connect api-network contoso
docker network connect api-network sql1
docker network inspect api-network
Bạn truy cập SQL Server từ bên ngoài vào qua địa chỉ localhost,1431. Nhưng nếu truy cập thông qua api-network sẽ là sql1,1433
Tham khảo
https://xuanthulab.net/mang-network-bridge-trong-docker-ket-noi-cac-container-voi-nhau.html
https://viblo.asia/p/tim-hieu-va-lam-viec-voi-docker-container-networks-p1-XqakEmmbkWK
Hi vọng với bài viết này sẽ giúp bạn hosting 1 project ASP.NET đơn giản sử dụng docker.
Chúc các bạn thành công!
Nhận xét
Đăng nhận xét