+4

Tìm hiểu một chút cơ bản về Docker!

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à framework Ruby 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ỉ code Java và nó chưa từng đụng tới Ruby. 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 đặt RubyRuby 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ài Docker 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ới Ruby.

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

https://docs.docker.com/


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí