Docker Cơ bản - Part 1

Docker. Hiện tại dự án mình đang làm có sử dụng docker. Lúc đầu cài đặt môi trường mình cũng không biết docker là gì! và cũng chỉ biết sử dụng 1 vài lệnh để có thể start sever, build, rails c.. Nên trong tháng này mình muốn tìm hiểu về Docker là gì? và khám phá xem Docker giúp j cho dev....

Docker là gì?

Docker là một nền tảng mở (open platform), dùng để phát triển và vận hành ứng dụng Như chúng ta đã biết mô hình server đời đầu bao gồm : 1 physical server - 1 hệ điều hành - 1 application rõ ràng nhận thấy mô hình nảy sinh rất nhiều vấn đề như :

  • lãng phí tài nguyên khi hệ thống không tận dụng được hết 1 con server có cầu hình khủng, ổ cứng, ram khủng...
  • mở rộng hệ thống cũng gặp khó khăn khi nếu muốn bạn phải thuê thêm server, rồi lại cấu hình... Để khắc phục 2 yếu điểm trên người ta xây dựng 1 mô hình server được gọi là (vitualization) Đó là mô hình ảo hóa, tạo máy ảo, ổ đĩa ảo hay ram ảo. Nói nôm na là sẽ tạo 1 phiên bản phụ ( phiên bảo ảo hóa ) của 1 số phần mềm. Lợi ích của ảo hóa Ảo hóa giúp cho chúng ta có thể chạy được nhiều thứ hơn trên một chiếc máy tính duy nhất, từ đó tiết kiệm chi phí mua sắm thiết bị mới. Đối với các nhà quản trị mạng, công nghệ ảo hóa giúp người ta có thể tận dụng hết tài nguyên máy tính, tài nguyên mạng của hệ thống để đem lại hiệu quả xử lý cao hơn.

Tuy nhiên công nghệ ảo hóa cũng có những bất lợi như:

  • ngốn tài nguyên (giả sử chạy máy ảo 4 máy ảo linux khi bạn có 1 máy chủ cấu hình (512G SSD và 16GB RAM). nếu bạn cấp cho mỗi máy ảo linux 64G SSD và 2G RAM) Thì rõ ràng bạn đã mất 256G và 8G RAM để chứa 4 máy ảo linux
  • tốn thời gian thực thi ( thời gian khởi động, tắt ) Với những bất cập như vậy người ta lại xây dụng mô hình containerlization Vậy công nghệ container và vitrualization có khác nhau ở chỗ nào? Container Vitrualization Với công nghệ này chúng ta có thể sinh ra được nhiều máy ảo như vitualization nhưng điều đặc biệt là tất cả máy ảo đều dùng chung 1 máy server. Như vậy việc sử dụng tài nguyên sẽ được tối ưu hơn. Như ta đã biết Công nghệ ảo hóa (virtualization technology) là phương pháp đóng gói một hệ điều hành cùng toàn bộ các ứng dụng của nó thành một gói máy ảo. Trong khi đó container chỉ đóng gói ứng dụng mà môi trường cần thiết để chạy ứng dụng. Do đó container sẽ nhẹ hơn và sử dụng ít tài nguyên hơn máy ảo. Mỗi máy ảo chạy một hệ điều hành riêng, với tài nguyên phần cứng riêng, độc lập với máy chủ vật lý. Trong khi đó các container cùng nhau chia sẻ hạt nhân hệ điều hành, với những phân vùng mà hệ điều hành chia sẻ các container chỉ được đọc, và mỗi container sở hữu một phân vục riêng có thể ghi trong đó.

Giả lập môi trường trên server ở dưới máy local

Như chúng ta đã biết việc chạy code ở local ok nhưng khi lên server lại chết. Nguyên nhân có rất nhiều nhưng phần lớn là do dự khác biệt về môi trường giữa local và server.

  • Do đó Docker có thể tạo ra 1 môi trường giống như trên server và chạy thử chương trình ở đó.
  • Dùng thử hệ điều hành mới
  • Trải nhiệm môi trường lập trình mới : Bạn có thể tạo 1 docker conatiner để thiết lập 1 môi trường.
  • Chia sẻ môi trường làm việc : Khi bạn tạo 1 docker container bạn có thể dễ dàng chia sẻ cho các thành viên khác trong nhóm Miên man quá nhiều về lịch sử cũng như nhưng lợi ích mà Docker mang lại cho 1 developer phần sau mình sẽ giải thích về khác niệm cũng như thành viên trong Docker

Các thành phần cơ bản của Docker

  1. Image: Là file ảnh, file nền của một hệ điều hành, một nền tảng, một ngôn ngữ (vd: ubuntu image, ruby image, rails image, mysql image…) và nó là dạng file read only file tức là file chỉ đọc. Note: Bạn có thể tạo riêng image cho mình và 1 image có thể tạo từ nhiều image khác. VD : bạn tạo 1 image chạy ubutu và trong đó có sẵn ruby và rails
  2. Container: Container là 1 máy ảo và được tạo từ image. Các thay đổi trong máy ảo như cài đặt phần mêm. tạo file.. đều được lưu ở 1 lơp layout được gọi là writabe file-layer
  3. Docker engine có nhiệm vụ quản lý việc bạn tạo image, chạy container, thêm sửa xóa image, container
  4. Docker Hub Chia sẻ các image

Cài đặt

https://docs.docker.com/get-started/

  1. SET UP THE REPOSITORY Update the apt package index: $ sudo apt-get update
  2. Install packages to allow apt to use a repository over HTTPS
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common
  1. Add Docker’s official GPG key:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
  1. Repositories stable
sudo add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"
  1. Install Docker CE: sudo apt-get install docker-ce
  2. Run Docker with image 'hello-word': sudo docker run hello-world Như bạn đã biết docker engine se tìm trong máy bạn có image nào tên là hello-worldkhông? Nếu trong máy bạn có thì nó sẽ tạo và chạy container. Nếu chưa nó sẽ lên docker-hub để tải image về cho bạn. Note: Mỗi lần chạy docker-run nó sẽ tạo mới 1 container.

Kết luận

Ở bài viết này mình chỉ đề cập đến lịch sử và ưu điểm của docker cũng như giải thích những khái niệm và chạy chương trình hello-world. ở các bài sau mình sẽ đi chi tiết hơn về docker


All Rights Reserved