October 18, 2021

Docker là gì, tại sao phải dùng Docker ?

Công nghệ phát triển, hàng loạt các ứng dụng được tạo ra, nhiều ngôn ngữ lập trình mới hình thành nhằm đáp ứng nhu cầu cụ thể nào đó. Những ngôn ngữ lập trình khác nhau lại yêu cầu các phần mềm hỗ trợ, gói thư viện và môi trường khác nhau. Ví dụ bạn là lập trình Android, bạn muốn làm việc với IOS bạn phải cài thêm OS hoặc để deploy được các ứng dụng Python, Java, Scala…. bạn phải tiến hành cài đặt hàng tá môi trường. Đó là chưa kể xung đột phần mềm, port… Cài thôi đã mệt, nhựng sẽ thật kinh khủng nếu xảy ra xung đột phần mềm và làm ảnh hưởng đến hoạt động của các ứng dụng đang hoạt động trên máy của bạn. Chính vì thế Docker ra đời. Trong bài nay, mình sẽ giới thiệu các nội dung chính về Docker. Docker là gì, Docker giúp ích được gì cho bạn và cách thức hoặt động như thế nào.

I. Quá trình hình thành Docker

1. Containerlization

  • Một mô khá quen thuộc với chúng ta và nó cũng có từ rất lâu rồi : Máy chủ vật lý + hệ điều hành(OS) + Application

    Với mô hình này, mỗi máy chỉ cài được 1 OS cho dù ổ cứng của bạn có khủng thế nào đi nữa. Điều này gây lãng phí tài nguyên.
  • Chính vì thế công nghệ ảo hóa vitualization ra đời

    Với công nghệ này, mỗi máy chủ vật lý chúng ta có thể tạo được nhiều OS khác nhau thông qua các VM ware hoặc Virtual Box. Mô hình này đã khắc phục được nhược điểm của mô hình đầu tiên nhưng chính bản thân nó lại có 2 nhược điểm lớn:
    Tài nguyên:  Khi bạn tạo 1 máy ảo, bạn phải cấp cho nó 1 dung lượng ổ cứng nhất định, ví dụ là 2Gb Ram, 50Gb ổ cứng và khi bạn chỉ cần bật nó lên thậm chí không làm gì thì nó vẫn ngốn 2Gb Ram và 50Gb ổ cứng của máy chủ vật lý.
    Thời gian: Thời gian để khởi động hay tắt 1 máy ảo như thế là khá lâu và có thể lên đến vài phút.
  • Chính vì thế người ta lại sinh ra công nghệ  containerlication

    Với công nghệ này chúng ta cũng tạo ra được nhiều máy con giống như công nghệ ảo hóa nhưng vấn đề là các máy con này dùng chung phần nhân của máy mẹ(OS kernel) và chia sẻ tài nguyên của máy mẹ. Chính vì thế tránh được việc lãng phí tài nguyên. Điểm nổi bật của công nghệ này đó là Container.

2. Vậy Container là gì ?

  1.  Container hay Docker Container là một. Hoạt động giống như một thư mục (directory), chứa tất cả những thứ cần thiết để một ứng dụng có thể chạy được. Mỗi một docker container được tạo ra từ một docker image. Các thao tác với một container : chạy, bật, dừng, di chuyển, và xóa. Không bị các yếu tố liên quan đến môi trường hệ thống làm ảnh hưởng tới, cũng như không làm ảnh hưởng tới các phần còn lại của hệ thống.
  2. Cách thức hoạt động:
    Ví dụ 1 ứng dụng web được dev A nào đó đóng gói bằng Docker Engine, cái đóng gói được gọi là Docker Image. Trong Docker Image chứa ubuntu đã cài đặt sẵn  apache và ứng dụng web. Docker Image được đưa lên Docker Hub. Sau đó Docker Image được chia sẽ cho các dev B,C,D,E. Từ Docker Image, dev B,C,D,E có thể tạo ra Docker Container, run Docker Container này là có thể thao tác với ứng dụng web mà không cần phải cài đặt môi trường hay các phần mềm liên quan. Các từ in đậm là gì thì bên dưới mình sẽ giải thích rõ hơn.
  3. Ưu điểm của Container:
    • Có thể triển khai bất cứ nơi đâu do không phụ thuộc vào OS và cơ sở hạ tầng
    • Thời gian khởi động cực nhanh
    • Khi nhiều người cùng phát triển một dự án sẽ không sợ sai khác về môi trường

II. Docker 

  1. Docker

    Có thể hiểu docker là nền tảng mở, tạo ra môi trường cho ứng dụng và đóng gói ứng dụng. Ban đầu được viết bằng Python sau đó chuyển sang Go-lang. Docker hỗ trợ nhiều nền tảng hệ điều hành khác nhau bao gồm Linux, Windows và cả Mac. Ngoài ra, Docker còn hỗ trợ nhiều dịch vụ điện toán đám mây nổi tiếng như Microsoft Azure hay Amazon Web Services

  2. Các thành phần của Docker

    • Docker engine: là phần chính của docker, chứa các tool cho phép người dùng đóng gói ứng dụng, tạo và khởi chạy docker container từ các docker image
    • Docker image: tương tự file .gho để ghost win. Một docker image thường chứa OS(Windows, ubuntu, CentOS)và các môi trường lập trình được cài sẵn (httpd, mysqld, nginx, python, git, …). Bạn có thể tải các image từ người khác
    • Docker hub: là nơi để mọi người upload, chia sẽ các images Docker của mình (hiện có khoảng 300.000 images)

III. Quy trình của một hệ thống sử dụng Docker

Hệ thống Docker bao gồm 3 bước chính:

Build -> Push -> Pull,Run
  • Build

    Đầu tiên chúng ta tạo ra docker image
    Docker image được build với 1 máy tính có docker engine.
    Sau khi build ta có được docker container, docker container chứa toàn bộ môi trường, thư viện và ứng dụng của chúng ta.

  • Push

    Sau khi có được container, chúng ta sẽ push container này lên đám mây thông qua docker hub.

  • Pull/run

    Nếu 1 member khác trong team muốn dùng container này, họ buộc phải cài đặt docker engine. Sau đó pull container về máy và run container này. Như vậy member này có được môi trường , thư viện và ứng dụng của chúng ta để có thể phát triển thêm mà không cần cài đặt những thứ liên quan.

 

Khi thực hành có chỗ nào chưa hiểu, cần support, các bạn hãy liên hệ với các chuyên gia – Cloud Ace – để được hỗ trợ tốt hơn.

Pham Van Tuyen

Anh Tuyen Pham là Tổng giám đốc của Cloud Ace Việt Nam và là GDG Cloud HCM Chapter Lead. Anh là diễn giả quen thuộc tại các sự kiện do Google tổ chức tại Việt Nam như Kubernetes Vietnam, Google Cloud Next Extended. Anh đã có các chứng chỉ của Google Cloud như Google Cloud Architect và Data Engineer.

View all posts by Pham Van Tuyen →