Docker - Liên kết Container
Giới thiệu về Liên kết Container
Xin chào các bạn yêu thích Docker! Hôm nay, chúng ta sẽ cùng lặn sâu vào thế giới thú vị của liên kết container. Là người thầy máy tính gần gũi của bạn, tôi sẽ hướng dẫn bạn trong hành trình này, ngay cả khi bạn chưa từng viết một dòng mã trước đây. Hãy thắt dây an toàn và cùng chúng tôi ra khơi trên biển container!
Liên kết container giống như giới thiệu hai người bạn tại một buổi tiệc. Nó cho phép các container giao tiếp với nhau, chia sẻ thông tin và tài nguyên. Hãy tưởng tượng bạn đang tham gia một bữa tiệc potluck (đó là máy chủ Docker của chúng ta), và mỗi món ăn (container) cần biết những món ăn khác có sẵn. Đó chính là điều chúng ta đang làm với liên kết container!
Tại sao Liên kết Container Quan trọng
Bạn có thể tự hỏi, "Tại sao tôi lại quan tâm đến liên kết container?" Hãy để tôi kể cho bạn một câu chuyện ngắn. Ngày xửa ngày xưa, trong một trung tâm dữ liệu xa xôi, các ứng dụng sống trong sự cô lập. Chúng không thể giao tiếp với nhau, chia sẻ dữ liệu hoặc làm việc cùng nhau. Đó là một cuộc sống cô đơn. Nhưng sau đó, liên kết container xuất hiện và thay đổi mọi thứ!
Liên kết container cho phép chúng ta:
- Tạo ra các ứng dụng đa container phức tạp
- Chia sẻ dữ liệu giữa các container
- Cải thiện an ninh bằng cách cách ly các dịch vụ
- Đơn giản hóa việc mở rộng ứng dụng
Liên kết Container Cơ bản
Hãy bắt đầu với một ví dụ đơn giản. Chúng ta sẽ tạo hai container: một máy chủ web và một cơ sở dữ liệu, và liên kết chúng với nhau.
Bước 1: Tạo Container Cơ sở Dữ liệu
Trước tiên, chúng ta sẽ tạo container cơ sở dữ liệu. Chúng ta sẽ sử dụng MySQL cho ví dụ này.
docker run -d --name mydb -e MYSQL_ROOT_PASSWORD=secret mysql:latest
Giải thích:
-
-d
: Chạy container ở chế độ tách biệt (trong nền) -
--name mydb
: Đặt tên cho container -
-e MYSQL_ROOT_PASSWORD=secret
: Đặt một biến môi trường cho mật khẩu root -
mysql:latest
: Sử dụng hình ảnh MySQL mới nhất
Bước 2: Tạo Container Máy chủ Web
Bây giờ, hãy tạo container máy chủ web và liên kết nó với cơ sở dữ liệu.
docker run -d --name myweb --link mydb:db -p 80:80 nginx:latest
Đây là những gì đang xảy ra:
-
--link mydb:db
: Đây là phép thuật! Chúng ta đang liên kết containermydb
và gọi nó làdb
bên trong container web -
-p 80:80
: Map port 80 trên máy chủ vào port 80 trong container
Hiểu về Liên kết
Khi chúng ta sử dụng tùy chọn --link
, Docker thực hiện một số điều cho chúng ta:
- Thêm một mục vào file
/etc/hosts
của container web - Đặt các biến môi trường trong container web
- Cho phép container web kết nối với container cơ sở dữ liệu
Hãy nhìn vào bên trong container web để xem đang xảy ra gì:
docker exec -it myweb bash
Một khi vào bên trong, chúng ta có thể kiểm tra file /etc/hosts
:
cat /etc/hosts
Bạn nên thấy một mục cho container db
với địa chỉ IP của nó.
Biến Môi trường
Docker cũng thiết lập các biến môi trường cho chúng ta. Hãy liệt kê chúng:
env | grep DB_
Bạn sẽ thấy các biến như DB_PORT
, DB_NAME
, v.v. Những biến này giúp ứng dụng của chúng ta dễ dàng kết nối với cơ sở dữ liệu.
Liên kết Cũ và Mạng Định Nghĩa Bởi Người Dùng
Bây giờ, tôi có một sự thật phải thừa nhận. Tùy chọn --link
mà chúng ta vừa sử dụng thực sự được coi là cũ trong Docker. Nó giống như sử dụng điện thoại nắp trượt trong thời đại của smartphone - nó hoạt động, nhưng có những tùy chọn tốt hơn sẵn có.
Phương pháp hiện đại để liên kết container là sử dụng mạng định nghĩa bởi người dùng. Hãy xem cách nó hoạt động:
Bước 1: Tạo Mạng
docker network create mynetwork
Bước 2: Chạy Container Trên Mạng
docker run -d --name mydb --network mynetwork -e MYSQL_ROOT_PASSWORD=secret mysql:latest
docker run -d --name myweb --network mynetwork -p 80:80 nginx:latest
Bây giờ, các container của chúng ta có thể giao tiếp bằng cách sử dụng tên của chúng như tên máy chủ, mà không cần liên kết rõ ràng!
Lợi ích của Mạng Định Nghĩa Bởi Người Dùng
Mạng định nghĩa bởi người dùng mang lại nhiều lợi ích:
- Tốt hơn về cách ly
- Tự động phân giải DNS
- Khả năng kết nối/disconnect container từ mạng một cách linh hoạt
Ví dụ Thực tế: WordPress và MySQL
Hãy áp dụng kiến thức của chúng ta vào một ví dụ thực tế: thiết lập WordPress với MySQL.
Bước 1: Tạo Mạng
docker network create wordpress-network
Bước 2: Chạy Container MySQL
docker run -d --name wordpress-db --network wordpress-network -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_DATABASE=wordpress -e MYSQL_USER=wordpress -e MYSQL_PASSWORD=wordpresspassword mysql:5.7
Bước 3: Chạy Container WordPress
docker run -d --name wordpress-site --network wordpress-network -e WORDPRESS_DB_HOST=wordpress-db -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpresspassword -e WORDPRESS_DB_NAME=wordpress -p 8080:80 wordpress:latest
Bây giờ, nếu bạn truy cập http://localhost:8080
trong trình duyệt của bạn, bạn nên thấy trang thiết lập WordPress!
Kết luận
Chúc mừng! Bạn đã chính thức bước vào thế giới của liên kết container. Chúng ta đã bao quát rất nhiều nội dung, từ liên kết cơ bản đến mạng định nghĩa bởi người dùng, và thậm chí thiết lập một trang web WordPress sử dụng container.
Nhớ rằng, liên kết container là về việc cho phép các ứng dụng của chúng ta làm việc cùng nhau một cách hài hòa. Nó giống như chỉ huy một dàn nhạc - mỗi container là một nhạc cụ, và khi được liên kết đúng cách, chúng tạo ra âm nhạc tuyệt đẹp.
Khi bạn tiếp tục hành trình Docker của mình, hãy tiếp tục thử nghiệm với các container và các tùy chọn mạng khác nhau. Càng thực hành nhiều, bạn sẽ càng thoải mái hơn với các khái niệm này.
Chúc bạn thành công trong việc container hóa, và hy vọng rằng hình ảnh Docker của bạn luôn xây dựng thành công!
Credits: Image by storyset