Đây là bài viết chia sẻ về 1 nền tảng giúp bạn xây dựng, kiểm thử và triển khai ứng dụng một cách nhanh chóng mà các bạn nên biết.

Nội dung

I. Tổng quan về docker
  1. Docker là gì? Tại sao NÊN dùng docker?
  2. Các thành phần
  3. Cách hoạt động
  4. Cài đặt
II. Dockerfile
Nguồn tham khảo


I. Tổng quan về docker

1. Docker là gì? Tại sao NÊN dùng docker?

Có hiểu hiểu đơn giản thì docker là một nền tảng cho phép bạn “xây dựng, vận chuyển, chạy bất kỳ ứng dụng nào ở bất kỳ đâu”.

Dưới đây là 1 vài lí do nên dùng docker:

  • Phát triển các ứng dụng, dịch vụ yêu cầu cài đặt quá nhiều thứ liên quan, hoặc có version không tương thích với máy chủ hiện tại.
  • Khi có nhu cầu scale, mở rộng linh hoạt để đáp ứng nhanh. VD như bật/tắt nhanh các container để hỗ trợ tăng tải cho hệ thống của bạn.
  • Rất phù hợp với Microservices. Mình chắc chắn rằng bạn sẽ không muốn chạy từng service nhỏ lên và cấu hình chúng bằng tay.
  • Tăng tốc, hỗ trợ CI/CD tốt hơn. Vì lúc này automation server chỉ cần quan tâm Docker thay vì lại phải cài đặt đủ thứ vào.
  • Dễ thay đổi, di chuyển hơn vì mọi thứ ở trong container. Bản thân Docker vẫn có version control cho các Image, từ đó dễ dàng up/down version ứng dụng hơn.
  • An toàn hơn vì mỗi container là một môi trường hoàn toàn độc lập với bên ngoài.

So sánh docker với VM (Virtual Machine)

TÍNH NĂNG DOCKER VM
Khả năng tương thích Hoạt động tốt nhất với Linux Tất cả các hệ điều hành
Kích cỡ Nhẹ Lớn hơn đáng kể - từ Gigabyte trở lên
Virtualization Chỉ lớp ứng dụng Cả kernel hệ điều hành và các lớp ứng dụng
Hiệu suất Dễ dàng khởi động các container Mất nhiều thời gian hơn để bắt đầu một phiên bản VM
Bảo vệ Kém an toàn Tương đối an toàn hơn
Khả năng nhân rộng Dễ dàng nhân rộng. Bạn có thể kéo Docker Image tương ứng với các ứng dụng khác nhau Khó tái tạo, đặc biệt là với số lượng phiên bản VM ngày càng tăng

2. Các thành phần

architecture Docker Engine: là thành phần chính của Docker, đây có thể được xem là một “công xưởng” để hỗ trợ đóng gói và vận hành các ứng dụng thông qua các container.

Docker Hub: là một cái hub, chuyên chứa tất cả các images Docker. Các image này được build và đóng gói sẵn bởi rất nhiều nhà phát triển trên thế giới.

Images: là một khuôn mẫu để chạy lên thành container.

Container: image khi run lên sẽ là container, có thể có nhiều container chạy cùng lúc từ một image.

Docker Client: là nơi chúng ta có thể giao tiếp với Docker thông qua các câu lệnh (Docker CLI).

Docker Daemon: là một service chạy ngầm, tiếp nhận tất cả yêu cầu từ Docker Client để quản lý các đối tượng như Container, Image, Network và Volumes. Các Docker Daemon cũng giao tiếp với nhau để quản lý các Docker Service.

Dockerfile: là một file bao gồm các chỉ dẫn để build một image.

Volumes: là cơ chế lưu trữ dữ liệu khi các container vận hành.

3. Cách hoạt động

Build: Đầu tiên tạo một dockerfile, trong dockerfile này chính là code của chúng ta. Dockerfile này sẽ được Build tại một máy tính đã cài đặt Docker Engine. Sau khi build ta sẽ có được Container, trong Container này chứa ứng dụng kèm bộ thư viện của chúng ta.

Push: Sau khi có được Container, chúng ta thực hiện push Container này lên cloud và lưu tại đó.

Pull, Run: Nếu một máy tính khác muốn sử dụng Container chúng ta thì bắt buộc máy phải thực hiện việc Pull container này về máy, tất nhiên máy này cũng phải cài Docker Engine. Sau đó thực hiện Run Container này.

4. Cài đặt

Mình sẽ hướng dẫn cách cài đặt trên MacOS nhé, Các bạn dùng windows có thể lên gg tìm hiểu cách cài nhé!

Đầu tiên các bạn lên trang chủ tải file Docker.dmg về nhé (chọn apple silicon cho mac dùng chip M, còn mac dùng chip intel thì chọn intel chip nhé)

Tải xong rồi cái bạn cài đăt vào máy như bình thường và mở lên thôi :»

Đây là giao diện khi mở lên Để lưu trữ image của mình và chia sẻ image đó cho người khác có thể pull về dùng các bạn cần tạo tài khoản dockerhub .

Khi không dùng nữa các bạn nhớ quit cho đỡ tốn pin nhé!
Mình hay mở docker bằng terminal vì khởi động nhanh hơn thao tác giao diện

qxnam@Qxs-MacBook-Pro % open -a docker

II. Dockerfile, docker-compose

  • Dockerfile: là một file văn bản chứa toàn bộ các chỉ thị lệnh thực thi để tạo ra một Docker Image, không có phần đuôi mở rộng.

Cú pháp chung của một Dockerfile: INSTRUCTION arguments

INSTRUCTION sẽ không phân biệt case-sensitive, nhưng để tốt nhất thì nên viết UPPERCASE cho dễ phân biệt enviroment variable khác.

arguments là đoạn nội dung mà chỉ thị sẽ làm gì.

Dưới đây là 1 số INSTRUCTION mình thường dùng để build:

Instruction Mô tả Vị trí
FROM Là base image khi build Trên cùng
COPY Sao chép file từ máy lên docker image Sau FROM
WORKDIR Định nghĩa thư mục làm việc cho CMD Sau FROM
MAINTAINER Chứa thông tin người build Tuỳ chọn
USER Đặt user hoặc UID cho container được tạo bởi image Tuỳ chọn
RUN Thực thi một command trong quá trình build image Sau FROM
CMD Thực thi một command trong quá trình build một container mới từ docker image Cuối cùng
ENTRYPOINT Thực thi một command khi container running Cuối cùng
VOLUME Liên kết thư mục giữa máy và docker container Tuỳ chọn

Docker có hiểu như 1 tờ công thức nấu ăn, nhưng thực tế khi nấu ăn các bạn không chỉ nấu 1 món mà nấu nhiều món, vì thế lại sinh ra 1 thứ gọi là docker compose để nấu nhiều món ăn. all

  • Docker compose: là công cụ để định nghĩa và run nhiều container. Sử dụng file .yaml để config các service. Dùng để build và run các container.

Mình thử viết 1 api thử ha: code

Và đây là kết quả: code

Nguồn tham khảo

  • https://dockerlabs.collabnix.com/docker/cheatsheet/
  • https://viblo.asia/p/tim-hieu-co-ban-ve-docker-6J3Zgx1glmB