Dạo gần đây mình mới được giao cho task tìm hiểu về Docker
nên mình cũng tìm đọc rất nhiều tài liệu và vô tình biết tới trang VIBLO. Nên thông qua sự hiểu biết hạn hẹp của mình, mình cũng muốn chia sẻ thêm một chút hiểu biết của mình đối với Docker
cho mọi người, dù trước đó có rất nhiều bài viết về Docker
😁😁😁.
Docker là gì?
Điều mà ai lúc mới tìm hiểu về Docker
cũng thắc mắc. Theo tài liệu mình tìm hiểu thì Docker
là một nền tảng cho phép ta có thể đóng gói, triển khai mã nguồn của mình một cách nhanh chóng. Để dễ hiểu, mình lấy ví dụ:
Giả sử ở đây mình sử dụng ngôn ngữ
Ruby
và frameworkRuby on Rails
để code một dự án web. Và sau khi mình hoàn thành trang web đó mà muốn gửi cho thằng bạn mình để nó test chức năng hoặc giao diện. Vấn đề xảy ra khi thằng bạn mình trước giờ chỉ codeJava
và nó chưa từng đụng tớiRuby
. Vậy là muốn để thằng bạn mình test giao diện cho trang web của mình. Mình chỉ có thể đưa máy của mình cho nó kiểm tra hoặc cài đặtRuby
vàRuby on Rails
trên máy của nó. Rất mất thời gian đúng không, chưa kể lúc cài đặt môi trường còn gặp các vấn đề liên quan giữa phiên bản, khác nhau giữa 2 máy tính nữa khiến code không chạy một cách bình thường. Vấn đề được giải quyết khi ta cóDocker
, bằng cách đóng gói mã code của mình và lúc máy thằng bạn chỉ cần càiDocker
chạy gói đó là trang web của mình sẽ hoạt động trên máy của nó mà không cần phải cài đặt một chút thứ gì liên quan tớiRuby
.
Trên là ví dụ nhỏ để mọi người ai chưa biết gì về Docker
để có thể hình dung dễ dàng. Thực sự khi tìm hiểu sâu về Docker
mình lại biết thêm những kiến khức khá là cơ bản mà mình lại không để ý tới.😁😁😁
Một số khái niệm trong Docker
Docker Engine
Bản chất thằng này nó giống như một công cụ để chúng ta có thể tương tác giữa Host
và mã nguồn code của mình. Bản thân nó giống như một chương trình quản lý các máy ảo để tương tác với Host
. Host
ở đây có thể là máy tính cá nhân hoặc có thể là con server nào đó 😁. Thực ra nói là quản lý các máy ảo cũng không đúng, chính xác hơn là quản lý các gói Containers
. Rồi sẽ có nhiều người thắc mắc Containers
là gì phải không? Vậy mình sẽ liệt kê thêm một số khái niệm cơ bản nữa trong Docker
chẳng hạn như sau
- Image
- Container
- Volume
- Network
Image
Đầu tiên nói về Image
trước ha! Nó giống như một gói "zip" của mã code của chúng ta vậy, chúng ta sau khi code xong một trang web, ứng dụng thì chúng ta sẽ dùng Docker
để tạo ra image
cho trang web, ứng dụng đó. Và gói image
này dễ dàng chia sẻ bằng cách đưa nó lên Docker hub
, một trang web chia sẻ giống như Github
vậy. Và gói image
này gồm những gì? Nó chứa đầy đủ các môi trường cần thiết để source code của chúng ta chạy một cách trơn tru. Dễ hiểu mà đúng không . Nhưng vậy làm sao để có thể chạy được các gói image
này. Đó là lúc ta biết tới container
.
Container
Vậy Container
là gì? Cũng dễ hiểu thôi nó sẽ lấy cái image
chúng ta vừa tạo để chạy nó thôi. Và một điều thú vị nữa là container
nó nhìn thì có vẻ giống là máy ảo (Virtual Machine
) nhưng thực sự nó không như vậy, mặc dù truy cập vào container
ta có thể thấy địa chỉ IP riêng của nó. Nếu có thời gian mình sẽ dành thêm một bài viết về cái này, mặc dù bây giờ trên mạng cũng vô số bài viết nói về vấn đề này .
Volume
Tiếp theo là Volume
, rồi trang web hay ứng dụng của chúng ta sẽ luôn có một cơ sở dữ liệu (Database
) đúng không nào! Vậy nên khi các image
được các container
chạy nó cũng sẽ có cơ sở dữ liệu phía dưới để lưu data. Nhưng khác với khi chúng ta code trên máy tính thì có vấn đề xảy ra như thế này! Nếu code chúng ta có vấn đề thì chúng ta sửa lại code và run lại bình thường và data của chương trình chúng ta chạy nó không hề bị ảnh hưởng bởi trước đó ta đã có tạo connection tới DBMS
của chúng ta rồi. Nhưng trong container
thì không, mỗi lần chúng ta sửa lại code, chúng ta phải build lại gói image
và chạy lại một container
mới. Mà những container
này nó không liên quan gì tới các container
khác. Nguồn gốc vấn đề từ đây chư đâu . Bùm!!! Dữ liệu từ container
mới mất sạch, thế nên Volume
ra đời, nó sẽ nối các data từ các container
chạy cùng image
lại với nhau từ đó giải quyết được vấn đề trên.
Network
Cuối cùng là Network
, thì như trên bài viết mình có đề cập là mỗi container
đều có địa chỉ IP riêng. Thì thằng này nhiệm vụ là nhóm các container
lại để nó chung 1 network thế thôi 😁😁😁
Tổng kết
Tóm lại phía trên là một chút hiểu biết cơ bản của mình về Docker
, tuy bài viết có hơi ngắn (chủ yếu do mình lười viết tiếp nữa) nhưng mong nó có thể giải đáp đôi chút thắc mắc của những bạn mới tìm hiểu về Docker
. Nếu có thời gian mình sẽ viết thêm những bài viết đi sâu hơi về nó và có các ví dụ đi kèm. Nếu thấy bài viết này có ích thì hãy upvote cho mình nhé