Docker là một nền tảng mã nguồn mở được phát triển bởi hãng phần mềm cùng tên Docker, được dùng cho việc phát triển, đóng gói và triển khai các phần mềm duới dạng các container (máy chủ ảo đóng gói).

1. Giới thiệu - Docker là gì ?

Docker là một nền tảng mã nguồn mở được phát triển bởi hãng phần mềm cùng tên Docker, được dùng cho việc phát triển, đóng gói và triển khai các phần mềm duới dạng các container (máy chủ ảo đóng gói). Thông qua việc sử dụng các container, Docker cung cấp khả năng cho lập trình viên đóng gói và triển khai các ứng dụng phần mềm trong những môi trường độc lập. Nói một cách đơn giản chúng ta có thể tạo ra những máy chủ ảo mini để chạy những phần mềm trong môi trường riêng biệt độc lập với Hệ Điều hành của máy tính chúng ta đang làm việc - tạm gọi là PC Host.

Vậy ưu điểm của việc tạo ra những máy chủ ảo mini độc lập là gì ?

- Không can thiệp và làm ảnh hưởng tới file Hệ Thống của máy chủ : Chúng ta dễ dàng cài đặt, gỡ bỏ và nâng cấp các gói phần mềm của bên thứ ba mà không cần bận tâm tới các file cài đặt còn sót lại sau quá trình cài đặt và gỡ bỏ.

- Tạo các biến môi trường và các file cấu hình để giả lập môi trường Kiểm thử (Testing) gần giống với môi trường vận hành sản phẩm thật (Production). 

- Quản lý tiến trình deploy ứng dụng, các thành phần module cần thiết (dependencies) cùng các Hệ thống con (Sub System) nhanh chóng, dễ dàng bằng 1 file compose duy nhất. Vi dụ: Chúng ta có thể quản lý việc deploy 1 Web Server Apache, cùng với 1 Database MySQL và 1 Redis Cache Server chỉ trong 1 file cấu hình. Và chúng ta chỉ cần thực thi 1 lần là toàn bộ Hệ Thống được triển khai đồng loạt một cách tự động.

- Nâng cấp và thay thế các ứng dụng  trong Hệ Thống. Ví dụ, chúng ta có thể nâng cấp dễ dàng version của Nginx, hoặc của MySQL nhanh chóng bằng cách thay đổi version Image tương ứng và thực thi lệnh cập nhật, các Container mới sẽ được nhanh chóng tạo ra thay thế các Container mang các version cũ.

 - Dễ dàng mở rộng Hệ Thống (Scale) và giảm thiểu thời gian downtime bằng Docker Swarm: Docker cho phép chúng ta có thể dễ dàng thêm Node (máy chủ) vào bên trong Docker Cluster để tăng thêm sức mạnh cấu hình (cpu, ram, hdd) cho các ứng dụng. Ngoài ra bằng cơ chế nhân bản ứng dụng (replica), mỗi ứng dụng sẽ được tạo ra các bản sao giống nhau để phục vụ cho các request từ client - nếu một trong những bản sao (instance) bị lỗi và dừng hoạt động các bản sao còn lại vẫn sẽ hoạt động để xử lý request - ngoài ra bản sao bị lỗi sẽ được Docker nhanh chóng phát hiện và tạo bản sao mới để thay thế để bằng với số lượng bản sao đã cấu hinh. Chức năng Docker Swarm sẽ được nói rõ và chi tiết hơn trong những bài viết sau.

 

2. Cài đặt Docker:

Nền tảng Docker đã được hãng phần mềm cha đẻ cùng tên hỗ trợ trên hầu hết các nền tảng phổ biến hiện nay bao gồm Linux, WIndows và MacOS. Trước khi tiến hành download và cài đặt Docker, chúng ta cần phải kiểm tra máy tính cũng như Hệ Điều hành đang sử dụng có hỗ trợ Docker engine hay không, bằng cách truy cập vào trang huớng dẫn của Docker theo đường link sau https://docs.docker.com/engine/install, lưu ý rằng không phải tất cả các phiên bản Distro của Linux đều được hỗ trợ cài đặt Docker, các bạn tham khảo bảng thông tin sau:

Platform x86_64 / amd64 arm64 / aarch64 arm (32-bit)
CentOS yes yes  
Debian yes yes yes
Fedora yes yes  
Raspbian     yes
Ubuntu yes yes yes

 

 

Theo bảng thông tin trên, 2 phiên bản Distro Ubuntu và Debian là được hỗ trợ đầy đủ nhất trên các dòng CPU phổ biến hiện tại của Intel và AMD. Cũng có thể do đó mà các trang cung cấp dịch vụ Hosting phổ biến hiện nay như AWS, Azure, DigitalOcean đều cung cấp các Host được cài sẵn Docker đều dùng Distro Ubuntu.

Ngoài ra, Mac OS  được xem như là Hệ Điều hành khá dễ chịu cho việc cài đặt Docker, với các gói cài đặt được hỗ trợ.

 

 

2.1. Windows

Trước khi tiến hành cài đăt Docker ở Windows, các bạn lưu ý rằng phiên bản Windows cần phải từ phiên bản Pro hoặc Ultimate - điều này có nghĩa chúng ta sẽ không thể cài đặt Docker trên phiên bản Home.

Bước 1: Download Docker Desktop for Windows

Để cài đặt Docker trên Windows, chúng ta cần download và cài đặt gói phần mềm Docker Desktop for Windows, từ trang cài đặt chính thức của hãng Docker:

 

Bước 2: Cài đặt Docker 

Sau khi download gói cài đặt Docker Desktop Installer.exec, chúng ta tiến hành chạy để cài đặt bình thường.

Hoàn tất quá trình cài đặt, Docker sẽ không tự động khởi động, chúng ta sẽ cần search chương trình Docker bằng Windows Taskbar 

 

Bước 3:  Kiểm tra Docker đã được cài đặt thành công:

Chúng ta mở Command Line của Windows - bấm tổ hợp phím Windows + R và nhập lệnh "cmd" và Enter.

Để kiểm tra Docker đã được cài đặt thành công, chúng ta nhập lệnh:

docker run hello-world

Command này sẽ download 1 Image (khái niệm Image sẽ được giải thích sau) về máy tính và tạo 1 Container từ Image hello-world, kết quả là một dòng text "hello-world" được hiển thị trên màn hình console.

 

2.2 Linux 

Linux được mô tả là Hệ điều hành "thân thiện" nhất với Docker, nghĩa là các gói phần mềm của Docker được tạo ra sẽ có độ tương thích cao nhất với Linux, đồng thời trong quá trình sử dụng cũng xảy ra ít lỗi hơn. Các bước cài đặt Docker sẽ khác nhau tuỳ theo các phiên bản khác nhau của Linux. Bài viết sẽ giới thiệu cách cài đặt trên các phiên bản Linux phổ biến nhất là Ubuntu và Fedora.

Bước 1: Gỡ bỏ cài đặt phiên bản Docker hiện tại trên máy

Ubuntu

sudo apt-get remove docker docker-engine docker.io containerd runc

Fedora

sudo dnf remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-selinux \
                  docker-engine-selinux \
                  docker-engine

 

Bước 2: Update các package và cài các package cần thiết

Ubuntu

sudo apt-get update

sudo apt-get install \
apt-transport-https \
ca-certificates \
curl \
gnupg-agent \
software-properties-common

# Add Docker’s official GPG key
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Fedora

sudo dnf -y install dnf-plugins-core

sudo dnf config-manager \
    --add-repo \
    https://download.docker.com/linux/fedora/docker-ce.repo

 

Bước 3: Thêm Docker Repository

Ubuntu

sudo add-apt-repository \
"deb [arch=amd64] https://download.docker.com/linux/ubuntu \
$(lsb_release -cs) \
stable"

Fedora

sudo dnf -y install dnf-plugins-core

sudo dnf config-manager \
    --add-repo \
    https://download.docker.com/linux/fedora/docker-ce.repo

 

Bước 4:  Cài đặt Docker 

Ubuntu

sudo apt-get update

sudo apt-get install docker-ce docker-ce-cli containerd.io

Fedora

sudo dnf install docker-ce docker-ce-cli containerd.io

 

Bước 5:   Kiểm tra đã cài đặt Docker thành công

sudo docker run hello-world

Command này sẽ download 1 Image (khái niệm Image sẽ được giải thích sau) về máy tính và tạo 1 Container từ Image hello-world, kết quả là một dòng text "hello-world" được hiển thị trên màn hình console.

 

2.3. Mac OS

Khi cài đặt Docker trên Hệ Điều hành MacOS, chúng ta cần ý download phiên bản tương ứng với CPU của máy Mac, phiên bản chạy CPU của Intel hoặc chip M1 của Apple.

Bước 1: Download Docker Desktop on Mac

Chúng ta truy cập trang hướng dẫn Download của Docker và lựa chọn phiên bản:

 

Bước 2: Cài đặt Docker 

Sau khi download gói cài đặt Docker.dmg, chúng ta tiến hành double click file Docker.dmg để cài đặt. Tiếp theo chúng ta kéo thả icon Docker.app vào folder Applications.


 

Hoàn tất quá trình cài đặt, icon của Docker sẽ hiển thị bên trong danh sách các ứng dụng cài đặt. Chúng ta cũng có thể truy cập nhanh bằng Spotlight của Mac OS 

 

Hoặc kiểm tra icon của Docker và trạng thái Running của Docker trên thanh Taskbar: 

Bước 3:  Kiểm tra Docker đã được cài đặt thành công:

Sau khi cài đặt thành công, chúng ta có thể kiểm tra Docker đã được thành công và hoạt động bình thường bẳng ứng dụng Terminal.

Chúng ta nhập lệnh:

docker run hello-world

Command này sẽ download 1 Image (khái niệm Image sẽ được giải thích sau) về máy tính và tạo 1 Container từ Image hello-world, kết quả là một dòng text "hello-world" được hiển thị trên màn hình console.

 

2. Ví dụ đơn giản với Nginx:

Ví dụ đầu tiên, chúng ta sẽ tiến hành tạo 1 Container chạy 1 trang web đơn giản bằng Nginx. Để hiểu thêm về ứng dụng Nginx các bạn  vui lòng tham khảo thêm chi tiết trên trang Nginx.org.

Bước 1: Pull image Nginx:  

docker pull nginx:latest

Command này sẽ download Image của Nginx được lưu trữ trên Repo của Docker về máy tính của các bạn.

Sau khi pull được Image về máy tính, chúng ta sẽ tiến hành tạo một Container chứa web server Nginx, và đồng thời mở port 80 để truy cập Nginx bên trong Container. Do ứng dụng Nginx này được tạo bên trong Container - một máy chủ ảo. - không phải trên máy tính localhost, do đó chúng ta cần phải chuyển tiếp request từ máy tính localhost vào bên trong Container

 

Bước 2:  Tạo Container Nginx và liên kết port 80 với Container:    

Chạy command sau trên Terminal để tạo Container

docker run -p localhost:80:80 nginx:latest 

Chúng ta sẽ thấy kết quả trên Terminal tương tự như sau:

docker run -p 80:80 nginx
/docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration
/docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/
/docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh
10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf
10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf
/docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh
/docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh
/docker-entrypoint.sh: Configuration complete; ready for start up
2021/08/21 05:59:13 [notice] 1#1: using the "epoll" event method
2021/08/21 05:59:13 [notice] 1#1: nginx/1.21.0
2021/08/21 05:59:13 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6)
2021/08/21 05:59:13 [notice] 1#1: OS: Linux 5.10.25-linuxkit
2021/08/21 05:59:13 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576
2021/08/21 05:59:13 [notice] 1#1: start worker processes
2021/08/21 05:59:13 [notice] 1#1: start worker process 31
2021/08/21 05:59:13 [notice] 1#1: start worker process 32
2021/08/21 05:59:13 [notice] 1#1: start worker process 33
2021/08/21 05:59:13 [notice] 1#1: start worker process 34
2021/08/21 05:59:13 [notice] 1#1: start worker process 35
2021/08/21 05:59:13 [notice] 1#1: start worker process 36

Option "-p 80:80" nghĩa là, chúng ta sẽ liên kết port 80 trên máy tính localhost đến port 80 bên trong Container - hay còn gọi là port-forwarding, các request được gửi tới port 80 sẽ lập tức chuyển tiếp tới port 80 trong Container.

Để kiểm tra quá trình tạo Container và liên kết port thành công hay không, chúng ta mở 1 trình duyệt bất kỳ và truy cập địa chỉ http://localhost - để hiển thị trang mặc định của Nginx.

 

 

Bấm Ctrl + C để tắt process của Container.

Bên trên là quá trình tạo và chạy thử ứng dụng Nginx, ứng dụng hoàn toàn tương tự như chúng ta download gói cài đặt và chạy trực tiếp trên máy tính localhost. Chúng ta có thể chỉnh sửa và thêm các cấu hình tuỳ chỉnh giống như thao tác trên phiên bản gói cài đặt. Hướng dẫn về thao tác với Container để chỉnh sửa file, cũng như các thao tác về truy cập, copy file trong Container thông qua SSH - sẽ được trình bày trong các bài viết sau.

Ngoài Nginx như ví dụ ở trên, Docker còn hỗ trợ chúng ta nhiều Image khác từ miễn phí cho đến trả phí, chúng ta có thể download từ Nginx đến các Image của các Hệ Điều hành như Ubuntu, Fedora , các phần mềm Cơ Sở Dữ Liệu như MySQL, Postgres, etc.. 

 

3. Kết luận:

Qua bài viết này, chúng ta đã tiếp cận với cách cài đặt Docker trên các Hệ Điều hành Linux, Windows và MacOS và chạy thử tạo một Container Nginx. Trong bài viết sau, chúng ta sẽ đến với những khái niệm cơ bản của Docker là Docker Registry, Docker file và Image để tạo ra những Image và Container tuỳ chỉnh theo nhu cầu sử dụng.

Chúc các bạn thành công.

AutoCode.VN

 

minhnhatict@gmail.com