Tìm hiểu Docker phần 4
Bài đăng này đã không được cập nhật trong 5 năm
Một câu hỏi đặt ra là chúng ta làm thế nào để sử dụng nhiều Docker image và container.
Giả sử chúng ta có một container web server cần kết nối với container database. Với mỗi container sẽ giữ chức năng riêng biệt của nó và chúng sẽ làm việc riêng biệt với nhau. Vậy làm cách nào để chúng ta có thể cho chúng kết nối và làm việc với nhau. Có 2 từ khóa để giải quyết vấn đề này Legacy Linking
và Bridge Network
.
Linking Containers by Name
Đây là một cách khá đơn giản, trong môi trường phát triển chúng ta có thể dễ dãng để thiết lập cũng như sử dụng. Chúng ta chỉ cần đặt cho container một cái tên là sau đó các container khác có thể link tới nó bằng cách sử dụng name đó. Sau đây mình sẽ làm một số các bước để cho các bạn có thể hiểu rõ hơn nhé.
- Bước đầu tiên chúng ta run container với một cái tên nào đó.
- Kết nối đến một running container
Rồi ok, đầu tiên để định nghĩa một cái tên cho container thì chúng ta sẽ sử dụng câu lệnh sau
docker run -d --name my-mongodb mongo
tham số --name
ở đây có nghĩa là định nghĩa ra một cái tên cho container. Nó cho phép chúng ta có thể chạy container với một tên tùy ý chúng ta đặt. Ở đây chúng ta đã đặt custome name cho mongo
là my-mongodb
.
Bước tiếp theo chúng ta muốn link node
container tới mongo
container thì chúng ta sẽ sử dụng câu lệnh sau:
docker run -d -p 3000:3000 --link my-mongodb:mongo node
--link
: Link tới container được đặt tênmongo
: alias container được link tớimy-mongodb
: tên của container được link, là custome name cái mà muốn ám chỉ trỏ tớipostgres
container
Container network
Đầu tiên chúng ta cần biết Docker Host nó là cái gì. Thì các bạn cứ tưởng tượng nó như là một Linux host, nó có thể là virtualbox, môi trường local của mình. Bất cứ ở đâu thì chúng ta có nhưng container cần được giao tiếp kết nối với nhau để làm việc chung với nhau. Để làm được điều đó, chúng ta có thể sử dụng bằng cách sử dụng naming
như cách trên mình vừa giới thiệu. Nhưng có một vấn đề ở đây là nếu bất cứ ai biết tên của container đó đều có thể tự động lấy nó. Và một điều nữa là một khi bạn chạy một loạt các container đang running, bạn muốn cô lập các container đó, vì vậy bạn cần nhóm chúng vào trong một nhóm. Đó chính là lý do tại sao chúng ta dùng bridge
network. Điều này là rất tốt bởi vì chúng ta có thể nhóm những container vào những isolated network khác nhau và chỉ ra những container nào là đang trong chung một network. Và để tạo ra container network cũng khá là đơn giản.
- Đầu tiên chúng ta sẽ tạo ra một custome bridge network
- Sau đó run container trong network vừa tạo
Trước hết thì bridge network
là cái gì ? Như các bạn đã biết đấy nó là một default network
mà sau khi bạn cài đặt Docker xong, nó sẽ được tự động tạo ra. Chúng ta có thể xem bằng câu lệnh docker network ls
. Khi bạn run một container, thì có thể sử dụng flag: --network để chỉ định loại network mà muốn container chạy trên đó khi run.
bridge
network được hiện diện trên tất cả các Docker hosts nếu như chúng ta không chỉ ra container sẽ chạy trên network nào. Chúng ta có thể xem thông tin bằng câu lệnh docker network inspect
Rồi ok, đầu tiên chúng ta sẽ tạo ra một custome container network bằng câu lệnh như sau:
docker network create --drive bridge isolated_network
Trong đó:
create
: tạo một custome networkbridge
: Sử dụng nền tảng là bridge network để build lên một custome network mới.isolated_network
: tên của network mới tạo ra.
Vậy mỗi container mà chúng ta muốn link up thì chúng ta sẽ phải có một cái tên
docker run -d --net=isolated_network --name mongodb mongo
Trong trường hợp này đó là mongodb
Demo Container Network in Action
Mình sẽ làm một ví dụ nho nhỏ sau, kết nối web server với database
Đầu tiên chúng ta tạo một network với tên là isolated_network
docker network create --driver bridge isolated_network
Chúng ta có thể kiểm tra xem network được tạo thành bằng cách
docker network ls
docker network inspect
Bạn có thể thấy thấy chúng ta chưa có bất cứ container nào trong network này.
Tiếp theo chúng ta sẽ add mongodb
vào network
docker run -d --net=isolated_network --name mongodb mongo
Tiếp theo thêm node express
vào network
docker run -d --net=isolated_network --name nodeapp -p 3000:3000 node
Bây giờ 2 container trên đã có thể giao tiếp với nhau.
Bây giờ giả dụ mà chúng ta muốn xóa network này đi thì chúng ta sẽ làm thế nào. Chúng ta sẽ phải xóa hết các container trong network này đi nhé rồi mới xóa được network này. Các bạn hãy làm theo các câu lệnh sau đây nhé
docker ps -a -q
docker stop ${docker ps -a -q}
docker rm ${docker ps -a -q}
docker rm isolated_network
Summary
Qua một số các mục trên mình đã đưa ra thêm cho bạn các thông tin về Legacy Linking
và Bridge Network
. Cảm ơn các bạn đã đọc bài chia sẻ của mình
Reference
All rights reserved