Bài 1- Kiến thức cơ bản cần biết về Docker cho người mới bắt đầu
- Các khái niệm cơ bản về Docker
- Docker là gì?
Docker là một nền tảng mã nguồn mở giúp các nhà phát triển đóng gói ứng dụng và tất cả các phụ thuộc vào một container, giúp đơn giản hóa quá trình building, deploying và running phần mềm. Mỗi container chứa đựng mọi thứ cần thiết để phần mềm hoạt động như mã nguồn, thời gian chạy, các công cụ và thư viện cần thiết. Các container này độc lập với môi trường chạy, đảm bảo ứng dụng hoạt động nhất quán bất kể môi trường triển khai là máy tính cá nhân hay môi trường sản xuất.
Ban đầu Docker viết bằng Python, nhưng hiện tại đã chuyển sang Golang. Khi cần triển khai ứng dụng lên bất kỳ máy chủ nào, bạn chỉ cần chạy container Docker và ứng dụng sẽ được khởi chạy ngay lập tức. Mục tiêu chính của Docker là đơn giản hóa quy trình phát triển, triển khai và quản lý ứng dụng, giúp các nhà phát triển tập trung vào việc viết mã mà không phải lo lắng về sự khác biệt giữa các môi trường.
-
- Container là gì?
Docker Container là một đơn vị phần mềm độc lập, có thể thực thi, gói gọn mã nguồn và tất cả các thư viện, công cụ cần thiết để chạy ứng dụng đó dưới dạng package. Container được xây dựng dựa trên Docker Image và là một thể hiện đang chạy của Image đó. Chúng được cô lập với nhau và với hệ thống máy chủ, đảm bảo ứng dụng chạy nhất quán và đáng tin cậy trên mọi môi trường.
Docker khá giống với Virtual Machine, nhưng Docker phát triển mạnh mẽ và phổ biến nhanh chóng hơn. Dưới đây là một số nguyên nhân:
- Dễ sử dụng: Docker rất dễ sử dụng có các developer, Admin System,… vì nó tận dụng container để build và kiểm tra nhanh chóng. Và nó có thể đóng gói các ứng dụng trên laptop của họ và chạy trên public cloud, private cloud,…
- Tốc độ: Nói về tốc độ thì docker container rất nhẹ và nhanh và bạn có thể khởi tạo và chạy docker container chỉ trong vài giây.
- Môi trường chạy: Bạn có thể tận dụng và chia nhỏ các container riêng lẻ. Ví dụ bạn có thể chạy database trên một container và Redis cache chạy trên một container khác trong khi ứng dụng Node.js lại có thể chạy trên một container khác nữa. Khi sử dụng Docker bạn rất dễ để liên kết các container với nhau để tạo thành một ứng dụng. Từ đó, làm cho nó dễ dàng scale và update các thành phần độc lập với nhau.
Thời điểm hiện tại thì thế giới bắt đầu sử dụng thêm một công cụ quản lý container hiện đại khác là Kubernetes.
-
- Lịch sử phát triển Docker
Docker được tạo ra bởi Solomon Hykes, khi ông còn đang làm việc trong một dự án nội bộ của dotCloud ở Pháp. Đến đầu năm 2013, Docker được phát hành dạng mã nguồn mở và sau đó đến năm 2015, Docker trở thành top 20 dự án có số sao đánh giá cao nhất trên GitHub với hơn 6,800 fork và 11,00 lập trình viên.
-
- Tại sao phải sử dụng Docker?
Việc setup và deploy application trên một hoặc nhiều máy chủ là một quá trình phức tạp và tốn nhiều công sức. Bao gồm việc cài đặt các công cụ và môi trường cần thiết cho ứng dụng, sau đó cố gắng đảm bảo ứng dụng chạy đúng cách trên từng máy chủ riêng biệt. Vấn đề khó khăn thêm nữa là sự không đồng nhất giữa các môi trường trên các máy chủ khác nhau. Để giải quyết những thách thức này, Docker ra đời như một giải pháp hiệu quả.
- Vận chuyển nhiều phần mềm và tốc độ nhanh hơn
Sử dụng Docker giúp người dùng chuyển phần mềm nhanh hơn gấp 7 lần so với việc không sử dụng Docker. Docker mang lại khả năng vận chuyển các dịch vụ riêng lẻ với tần suất linh hoạt theo mong muốn.
- Tiết kiệm chi phí
Sử dụng Docker Container giúp thực hiện một số code khác nhau trên cùng một máy chủ một cách thuận tiện hơn, từ đó tăng khả năng tận dụng tài nguyên và giúp tiết kiệm chi phí.
- Lợi ích khi sử dụng Docker
- Trái với máy ảo, Docker có khả năng start và stop container chỉ trong vài giây.
- Bạn có thể triển khai container trên bất kỳ hệ thống nào mà bạn muốn.
- Container có thể được xây dựng và xóa bỏ nhanh chóng hơn so với máy ảo.
- Việc thiết lập môi trường làm việc dễ dàng hơn bao giờ hết. Chỉ cần cấu hình một lần và không cần phải cài đặt lại các phần mềm phụ thuộc. Nếu bạn chuyển sang một máy tính khác hoặc có người mới tham gia vào dự án, bạn chỉ cần chia sẻ cấu hình với họ.
- Docker giữ cho không gian làm việc của bạn sạch sẽ hơn bằng cách ngăn chặn tác động đến các phần khác khi bạn loại bỏ môi trường.
- Cách thức hoạt động của Docker
Docker hoạt động bằng cách cung cấp phương thức tiêu chuẩn để chạy code. Nếu như máy ảo ảo hóa (loại bỏ nhu cầu quản lý trực tiếp) phần cứng của máy chủ thì các container sẽ ảo hóa hệ điều hành của máy chủ. Docker được cài đặt trên từng máy chủ và cung cấp các lệnh cơ bản để bạn có thể build, khởi tạo và dừng container.
Còn để hiểu về cơ chế hoạt động của Docker khá là phức tạp. Ở đây, mình sẽ tóm gọn lại cho bạn dễ hiểu về hoạt động của Docker thông qua một Docker engine và kết hợp với 2 yếu tố sau:
Nếu bạn đang sử dụng hệ điều hành Windows/Mac cũ, bạn có thể tận dụng Docker toolbox, vì cho phép bạn điều khiển Docker engine với Docker Compose và Kitematic.
-
- Các thuật ngữ cần biết khi tìm hiểu về Docker
Để không gặp khó khăn khi bắt đầu sử dụng Docker bạn sẽ cần nắm rõ các công cụ và thuật ngữ kỹ thuật của nó. Một số công cụ và thuật ngữ công nghệ bạn sẽ gặp phải khi sử dụng Docker bao gồm:
- DockerFile: Mọi container Docker bắt đầu bằng một file văn bản đơn giản chứa hướng dẫn về cách tạo image container Docker. DockerFile tự động hóa tiến trình tạo image Docker. Về cơ bản, đây là danh sách các lệnh mà Docker Engine sẽ chạy để tập hợp image.
- Docker container: Là các phiên bản live, running instance của Docker image. Docker image là file chỉ đọc còn container là phiên bản live, executable và người dùng có thể tương tác với chúng. Cùng với đó, quản trị viên có thể điều chỉnh cài đặt và các quy định của họ.
- Docker Hub: Là kho lưu trữ công khai Docker image, được xem là “thư viện và cộng đồng lớn nhất thế giới về image container”. Docker Hub chứa hơn 100.000 image container, bao gồm image được sản xuất bởi Docker, Inc, image được chứng nhận thuộc Cơ quan đăng ký tin cậy Docker và hàng nghìn image khác. Tất cả người dùng Docker Hub có thể chia sẻ image của họ theo ý muốn. Họ cũng có thể tải xuống các image cơ sở được xác định trước để sử dụng làm điểm bắt đầu cho bất kỳ dự án container nào.
- Docker Client: Đây là thành phần mà bạn có thể tương tác với Docker thông qua command line. Docker client sẽ gửi lệnh tới Docker Daemon thông qua REST API như đã đề cập ở trên.
- Docker Engine: Đây là thành phần chính của Docker như một công cụ để đóng gói ứng dụng.
- Docker Daemon: Dùng để lắng nghe các request từ Docker Client để quản lý các đối tượng như container, image, network và volume thông qua REST API.
- Docker Volumes: Là phần dữ liệu được tạo ra khi container được khởi tạo.
- Docker Machine: Tạo ra các docker engine trên máy chủ.
- Docker Compose: Chạy ứng dụng bằng cách định nghĩa cấu hình các Docker Container thông qua file cấu hình.
-
- Quy trình thực thi một hệ thống sử dụng Docker
Thông thường, để triển khai hệ thống Docker, bạn phải tuân theo ba bước cơ bản là build, push và pull, run.
- Build: Bước đầu tiên, bạn cần tạo một dockerfile, trong dockerfile này chính là code của bạn. Dockerfile này sẽ được build ở một máy tính có cài đặt Docker Engine. Khi build xong, bạn sẽ có một container chứa ứng dụng kèm bộ thư viện.
- Push: Bạn thực hiện push Container lên cloud và lưu lại sau khi có được container.
- Pull & Run: Nếu máy tính khác của bạn muốn sử dụng container thì máy của bạn phải thực hiện pull container này về máy đó. Và máy đó phải cài đặt trước Docker Engine. Tiếp theo, bạn mới thực hiện Run Container này.
-
- Khi nào thì nên sử dụng Docker?
Trong những trường hợp sau đây bạn có thể sử dụng Docker hiệu quả:
- Triển khai kiến trúc Microservice.
- Sản phẩm công ty cần một cách tiếp cận mới về xây dựng, đẩy lên server và thực thi ứng dụng một cách nhanh chóng.
- Khi build ứng dụng cần scale một cách linh hoạt. Các gói VPS của Vietnix cũng cung cấp tài nguyên linh hoạt cho phép bạn dễ dàng nâng cấp hoặc hạ cấp để phù hợp với nhu cầu mở rộng của các ứng dụng Docker.
- Config máy local và server trên cùng một môi trường nhanh chóng.
- Hướng dẫn cài đặt Docker
- Cài Docker trên macOS
Tải bộ cài tại Docker Desktop for Mac, sau đó bạn cài đặt Docker đơn giản như các công cụ thông thường khác trên MacOS.
- Cài Docker trên Windows 10
Tải bộ cài tại Docker Desktop for Windows, tiến hành cài đặt. Đối với Windows phải kích hoạt chế độ Hyper-V virtualization (Ở chế độ này bạn không dùng được VirtualBox nữa). Nếu chưa kích hoạt Hyper-V thì bạn kích hoạt theo hướng dẫn Enable Hyper-V.
Chạy lệnh PowerShell sau để kích hoạt:Microsoft-Hyper-V -All
Kích hoạt thông qua thiết lập Windows
- Nhấn phải chuột vào biểu tượng cửa sổ, chọn Apps and Features.
- Chọn Programs and Features.
- Chọn Turn Windows Features on or off.
- Đánh dấu vào Hyper-V như hình dưới.
- Cài Docker trên Ubuntu
Bạn lần lượt chạy các lệnh để cài đặt:
sudo apt update sudo apt install apt-transport-https ca-certificates curl software-properties-common curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" sudo apt update apt-cache policy docker-ce sudo apt install docker-ce sudo systemctl status docker
Sau khi cài đặt, bạn có thể cho user hiện tại thuộc group docker, để khi gõ lệnh không cần xin quyền sudo:
sudo usermod -aG docker $USER
Logout sau đó login lại để có hiệu lực.
Ngoài ra khi sử dụng đến thành phần docker-compose thì bạn cài thêm:
sudo apt install docker-compose
Nếu có nhu cầu sử dụng Docker Machine trên Ubuntu, (công cụ tạo – quản lý các máy ảo chạy Docker Engine, các máy ảo này tạo bởi VirtualBox, bạn sử dụng Docker-machine để thực hành các ví dụ kết nối nhiều máy chạy Docker Engine khác nhau tạo thành cụm Server), thì cài thêm Docker Machine. Phiên bản mới nhất lấy tại Docker Machine.
Ví dụ cài bản v0.16.1, gõ lệnh sau:
curl -L https://github.com/docker/machine/releases/download/v0.16.1/docker-machine-`uname -s`-`uname -m` >/tmp/docker-machine &&
chmod +x /tmp/docker-machine &&
sudo cp /tmp/docker-machine /usr/local/bin/docker-machine
Tất nhiên là Docker Machine cần VirtualBox để làm việc, nếu chưa có thì cài thêm:
sudo apt install virtualbox
Tất nhiên là Docker Machine cần VirtualBox để làm việc, nếu chưa có thì cài thêm:
sudo apt install virtualbox
Cài Docker trên CentOS7/RHEL7
Bạn lần lượt chạy các lệnh để cài đặt:
Cài Docker trên CentOS8/RHEL8
Bạn lần lượt chạy các lệnh để cài đặt:
(còn tiếp)