Tìm hiểu một chút cơ bản về Docker!
Bài đăng này đã không được cập nhật trong 2 năm
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ữ
Rubyvà 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ỉ codeJavavà 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 đặtRubyvàRuby on Railstrê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àiDockerchạ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é 
Tài liệu tham khảo
All rights reserved