Có bao giờ bản thân bạn rơi vào tình cảnh oái ăm rằng, rõ ràng chương trình hayứng dụng bạn đã tạo ra, khi ở trên máy tính cá nhân của mình thì chạy ổn định và khônghề có lỗi xảy ra, ấy
CƠ SỞ LÝ THUYẾT VỀ DOCKER
GIỚI THIỆU
Docker là một dự án mã nguồn mở giúp đơn giản hóa việc xây dựng, triển khai và chạy ứng dụng thông qua công nghệ container dựa trên nền tảng ảo hóa Ban đầu, Docker được phát triển bằng ngôn ngữ Python, nhưng hiện nay đã chuyển sang sử dụng Golang.
Docker là công cụ giúp đóng gói phần mềm thành các container chuẩn, bao gồm tất cả các thành phần cần thiết như thư viện, công cụ hệ thống, mã nguồn và môi trường chạy Khi bạn cần triển khai ứng dụng lên bất kỳ máy chủ nào, chỉ cần chạy container Docker và ứng dụng sẽ khởi động ngay lập tức.
Khi sử dụng Docker, bạn có thể triển khai và mở rộng quy mô ứng dụng một cách dễ dàng trong mọi môi trường, đồng thời đảm bảo mã nguồn của bạn luôn hoạt động ổn định.
Docker hoạt động trên kiến trúc client-server Trong đó:
The client serves as the interface through which users send requests to the Docker Daemon (DOCKER-HOST) using the Command Line Interface (CLI), enabling operations such as building, pulling, and running images.
Server : Docker daemon lắng nghe các request từ client và tiến hành các thao tác đó, quản lý các images, containers, networks và volumes Docker daemon.
Registry : đây là nơi lưu trữ các images khi đã build và hiện tại có một nơi lưu trữ public cho mọi người đấy là Docker Hub.
1.3 Các khái niệm cơ bản:
Docker Engine : dùng để tạo ra Doker image và chạy Docker containter, như một công cụ để đóng gói ứng dụng.
Docker Hub là nền tảng tương tự như GitHub nhưng dành cho các hình ảnh Docker Tại đây, bạn có thể tìm thấy hàng ngàn hình ảnh công khai được tạo ra bởi cộng đồng, giúp bạn dễ dàng tìm kiếm và tải về những hình ảnh cần thiết Chỉ cần thực hiện lệnh pull và cấu hình theo yêu cầu của bạn, bạn đã có thể sử dụng chúng ngay lập tức.
Container là công nghệ cho phép chạy chương trình trong một môi trường độc lập, tách biệt hoàn toàn với các chương trình khác trên cùng một máy tính.
Docker Daemon là thành phần lắng nghe yêu cầu từ Docker Client, giúp quản lý các đối tượng như Container, Image, Network và Volumes thông qua REST API Đồng thời, các Docker Daemon cũng tương tác với nhau để điều phối và quản lý các Docker Service một cách hiệu quả.
Chương I: Cơ sở lý thuyết về Docker Trang 2
Hình 2: Kiến trúc của Docker
Dockerfile là một tệp tin dạng văn bản không có phần mở rộng, chứa các chỉ dẫn về môi trường thực thi phần mềm và cấu trúc cho Docker Image Từ những lệnh trong Dockerfile, Docker sẽ tiến hành xây dựng Docker Image.
Docker Volumes : là phần dữ liệu được tạo ra khi container được khởi tạo.
Docker Repository: Là nơi lưu trữ các Image.
Docker Compose là công cụ giúp bạn dễ dàng chạy ứng dụng với nhiều Docker containers Nó cho phép cấu hình các lệnh trong file docker-compose.yml để sử dụng lại, và được cài đặt sẵn khi bạn cài Docker.
2 Nguyên lí hoạt động:
Như đã đề cập ở trên:
Dockerfile là một tệp văn bản không có phần mở rộng, chứa các chỉ dẫn để xây dựng Docker Image Các lệnh trong Dockerfile sẽ được Docker sử dụng để tạo ra Docker Image.
Dockerfile là một tập hợp các instruction (hướng dẫn) hay câu lệnh được sử dụng để xây dựng cấu trúc cho Docker.
Các câu lệnh của Dockerfile có dạng:
INSTRUCTION là tên gọi của các chỉ thị trong Dockerfile, mỗi chỉ thị đảm nhận một nhiệm vụ cụ thể theo quy định của Docker Khi khai báo các chỉ thị này, cần phải viết bằng chữ IN HOA.
Hình 4: Cấu trúc của Instruction
Một Dockerfile bắt buộc phải bắt đầu bằng chỉ thị FROM để khai báo đâu là image sẽ được sử dụng làm nền để xây dựng image của bạn.
Hình 3: Nguyên lí hoạt động của Docker
arguments là phần nội dung của các chỉ thị, quyết định chỉ thị sẽ làm gì.
Chỉ thị RUN trong Docker được sử dụng để thực thi các lệnh trong quá trình xây dựng image, thường là các lệnh Linux Các lệnh này sẽ phụ thuộc vào image gốc được chỉ định trong phần FROM.
The ADD directive enables the copying of files and directories from the build machine or remote file URLs specified in the source, integrating them into the filesystem of the destination image.
ADD [ chown=:]
ADD [ chown=:] ["", ""]
Chỉ thị COPY cũng giống với ADD là copy file, thư mục từ và thêm chúng vào
của container Khác với ADD, nó không hỗ trợ thêm các file remote file URLs từ các nguồn trên mạng.
COPY [ chown=:]
COPY [ chown=:] ["", ""]
Chỉ thị ENV trong Dockerfile được sử dụng để khai báo các biến môi trường dưới dạng key - value thông qua các chuỗi Giá trị của những biến này sẽ có sẵn cho các chỉ thị tiếp theo trong Dockerfile.
CÁC CÔNG NGHỆ XOAY QUANH DOCKER
Container được phát triển dựa trên những tính năng mới của kernel Linux, trong đó hai tính năng quan trọng nhất là “namespaces” và “cgroups” Hai tính năng này cho phép tách biệt hoàn toàn một process khỏi các process khác, đảm bảo tính độc lập và an toàn cho các ứng dụng chạy trong môi trường container.
Linux namespaces là công nghệ cốt lõi trong hầu hết các hệ thống triển khai container hiện đại, cho phép cách ly tài nguyên hệ thống giữa các tiến trình một cách độc lập Chẳng hạn, PID namespace giúp cô lập không gian số PID của tiến trình, cho phép hai tiến trình trên cùng một máy chủ có thể có cùng một PID Tính năng này của Linux hỗ trợ việc tạo ra một hệ thống ảo hóa, tương tự như chức năng của các công cụ máy ảo, và là yếu tố chính giúp các tiến trình tách biệt hoàn toàn với nhau.
Linux namespaces sẽ bao gồm các thành phần nhỏ hơn như:
PID namespace: cho phép ta tạo các process tách biệt.
Networking namespace: cho phép ta chạy chương trình trên bất kì port nào mà không bị xung đột với các process khác chạy trên server.
Mount namespace : cho phép ta mount và unmount filesystem mà không ảnh hưởng gì tới host filesystem.
UTS: Cô lập hostname và domain name.
IPC: Cô lập tài nguyên liên tiến trình (Interprocess Communication).
User: Cô lập không gian số UID/GID.
Cgroup: Cô lập về thư mục root của tính năng cgroups.
Sự cô lập trong mạng lưới container là rất quan trọng, vì nếu không có namespaces, một tiến trình trong container A có thể ảnh hưởng đến các tệp hệ thống trong container khác.
B, hoặc có thể thay đổi tên máy chủ của container C, hoặc có thể xóa đi network interface của container D Bằng cách đặt tên cho các loại tài nguyên này, tiến trình trong container
Tiến trình trong container A không thể can thiệp vào các tiến trình đang tồn tại trong container B, C và D Điều này có nghĩa là các tiến trình trong container A không có khả năng truy cập hay tương tác với các tiến trình của các container khác.
Linux namespaces cho phép cách li tiến trình, khiến cho tiến trình đó chỉ hiển thị trên máy chủ như một tiến trình duy nhất, trong khi các tiến trình khác trong B, C, D không được hiển thị so với A.
Chương I: Cơ sở lý thuyết về Docker Trang 6
Namespaces không giới hạn quyền truy cập vào tài nguyên vật lý như CPU, bộ nhớ và đĩa Quyền truy cập này được quản lý và giới hạn thông qua một tính năng của kernel, được gọi là "cgroups".
Cgroups là một tính năng tích hợp trong kernel, cho phép quản trị viên quản lý và giới hạn tài nguyên cho các quy trình trên hệ thống Chức năng chính của cgroups bao gồm kiểm soát việc sử dụng CPU, bộ nhớ, và các tài nguyên khác, giúp tối ưu hóa hiệu suất và bảo mật cho hệ thống.
Số lượng chia sẻ CPU trên mỗi quá trình.
Các giới hạn về bộ nhớ cho mỗi quá trình.
Chặn I/O thiết bị trên mỗi quy trình.
Các gói tin mạng nào được xác định là cùng loại để một ứng dụng khác có thể thực thi các quy tắc lưu lượng mạng.
Vậy tại sao cgroups lại quan trọng?
Cgroups cho phép quản trị viên quản lý và giới hạn tài nguyên hệ thống như CPU, RAM, I/O thiết bị khối và các nhóm thiết bị, đảm bảo rằng các chương trình hoạt động trong các ranh giới chấp nhận được.
1.2.2 Ưu tiên Ưu tiên hơi khác so với giới hạn tài nguyên vì bạn không nhất thiết phải hạn chế các quy trình Thay vào đó, bạn chỉ đơn thuần nói rằng bất kể có bao nhiêu tài nguyên có sẵn, quy trình X sẽ luôn có nhiều thời gian trên hệ thống hơn quy trình Y.
Mặc dù tính năng tính toán tài nguyên thường bị tắt theo mặc định trong các phiên bản Linux doanh nghiệp để tiết kiệm tài nguyên, việc bật tính năng này cho một tiến trình cụ thể có thể mang lại lợi ích đáng kể Điều này cho phép bạn theo dõi mức tiêu thụ tài nguyên của các tiến trình trong cgroup, từ đó giúp quản lý và tối ưu hóa hiệu suất hệ thống hiệu quả hơn.
Cgroups có một chức năng quan trọng gọi là freezer, cho phép tạo bản snapshot cho tiến trình hiện tại và di chuyển nó Điều này mang lại lợi ích lớn trong việc tối ưu hóa tài nguyên trên server, giúp quản lý hiệu quả các loại tiến trình, ứng dụng và tài nguyên mà chúng yêu cầu, từ đó nâng cao tỷ trọng sử dụng.
Cài đặt Linux với cgroups theo mặc định giúp tăng cường bảo mật đáng kể Mặc dù không có hạn chế nào cho các tiến trình, bạn có thể thiết lập các giới hạn mặc định hoặc hạn chế quyền truy cập vào các thiết bị cụ thể cho người dùng theo nhu cầu.
1.2.5 Cgroups hoạt động như thế nào?
In this section, we will explore cgroups V1, which remains the default in many container technologies such as Kubernetes, OpenShift, and Docker, despite the availability of cgroups V2 in Red Hat Enterprise Linux 8 (RHEL 8).
Cgroups là một cơ chế quan trọng trong kernel, cho phép kiểm soát các subsystem như thiết bị, CPU, RAM và quyền truy cập mạng Những subsystem này được gọi là controllers trong thuật ngữ cgroup, giúp quản lý tài nguyên hệ thống một cách hiệu quả.
SỬ DỤNG DOCKER
CHUẨN BỊ TRƯỚC KHI TRIỂN KHAI
Hệ điều hành: Docker hỗ trợ nhiều hệ điều hành, nhưng các hệ điều hành phổ biến nhất bao gồm:
Linux (Ubuntu, Debian, CentOS, Fedora, v.v.)
Windows (Phiên bản Pro hoặc Enterprise)
MacOS (Yêu cầu Apple Silicon hoặc Intel chip)
Kernel 64-bit và CPU có hỗ trợ ảo hoá, kernel có cấu trúc x86_64/amd64.
Kernel-based Virtual Machine có hỗ trợ ảo hoá.
QEMU ( Quick Emulator – trình giải lập mã nguồn mở) phải từ version 5.2 trở lên.
Có tối thiểu 4GB RAM.
Cho phép cấu hình ánh ID mapping trong namespaces của user.
Có tối thiểu 4GB RAM.
Bật Hardware Virtualization trong BIOS.
Bật tính năng WSL2/Hyper-V trên Windows.
1.3.1 MacOS sử dụng chip Intel:
Có tối thiểu 4GB RAM.
1.3.2 MacOS sử dụng chip Apple:
Có tối thiểu 4GB RAM.
Để có trải nghiệm tốt nhất, khuyến khích cài đặt Rosetta 2.
Chương II: Sử dụng Docker Trang 10
Trong bài tiểu luận này, chúng ta sẽ tập trung vào việc triển khai Docker trên hệ điều hành Windows, vì đây là hệ điều hành phổ biến nhất hiện nay Bài viết sẽ cung cấp hướng dẫn chi tiết về các phiên bản Docker dành cho Windows, trong khi người dùng sử dụng các hệ điều hành khác có thể tham khảo thêm thông tin tại DockerDocs: https://docs.docker.com/desktop/.
Hyper-V, trước đây được biết đến với tên gọi Viridian, là một công nghệ hypervisor quan trọng, có mặt trong Windows Server 2008 và các phiên bản Windows sau này Công nghệ này cung cấp một nền tảng ảo hóa đáng tin cậy, mở rộng và có tính sẵn sàng cao, thể hiện nỗ lực không ngừng của Microsoft trong việc mang đến cho khách hàng và đối tác một hệ điều hành tối ưu cho ảo hóa.
Kiến trúc Hyper-V gồm 3 thành phần chính:
Hypervisor ngăn ảo hóa (Virtual stack).
2.1.1 Hypervisor: Đảm bảo tạo ra một hệ thống tách rời thực sự mạnh mẽ hỗ trợ trên đó nhiều hệ điều hành khác nhau bằng cách tạo ra các bộ vi xử lý ảo bộ nhờ Timer và các bộ điều khiển ngắt.
Hình 6: Kiến trúc các lớp của Hyper-V
Qua đó các hệ điều hành này dựa trên việc sử dụng các tài nguyên ảo hóa này như một hệ thống phần cứng thật sự.
Hypervisor đóng vai trò quan trọng trong Hyper-V, cung cấp các chức năng thiết yếu cho quá trình ảo hóa máy chủ vật lý.
Tạo ra các phân vùng về mặt logic.
Quản lý công việc lên kế hoạch cho bộ nhớ và bộ xử lý cho các máy ảo.
Thi hành các quy tắc truy cập bộ nhớ.
Thi hành chính sách sử dụng tài nguyên CPU.
Cung cấp các cơ chế sắp xếp các luồng thông tin vào ra và liên lạc giữa các phân vùng của hệ thống
Đưa ra một giao diện chương trình đơn giản được gọi là Hypercalls.
2.1.2 Parent Partition: Đây là phân vùng giữ nhiệm vụ tạo và quản lý các phân vùng con trên hệ thống và bao gồm khả năng dùng WMI cho việc quản lý từ xa Phân vùng này ngoài ra còn phải quản lý và phân bố thiết bị phần cứng đồng thời hiển thị cho bộ xử lý và cấp phát bộ nhớ tất cả điều hoạt động thông qua lớp Hypervisor Tài nguyên phần cứng của phân vùng cha sẽ được chia sẻ và cấp phát sử dụng bởi các phân vùng con Bên cạnh đó còn mang nhiệm vụ quản lý điện năng tình trạng hoạt động và ghi nhận các sự cố lỗi khi xảy ra.
Management Service (VMM service): chịu trách nhiệm quản lý trạng thái của máy ảo đang hoạt động trong các phân vùng con (Active, Offline, Stopped…) và
Chương II: Sử dụng Docker Trang 12
Phân vùng Parent Partition quản lý các tác vụ ảnh hưởng đến trạng thái của máy ảo, đặc biệt là trong quá trình tạo Snapshot Khi một máy ảo được khởi động, dịch vụ VMM sẽ khởi tạo một Virtual Machine Worker Process riêng biệt cho từng máy ảo.
Virtual Machine Worker Process: thành phần này được khởi tạo bởi VMM
Khi máy ảo được khởi động, một quy trình Worker của Virtual Machine sẽ được tạo ra cho từng máy ảo Hyper-V Quy trình này đảm nhiệm việc quản lý các mức độ tương tác giữa phân vùng cha đang chạy hệ điều hành Windows Server 2008 và phân vùng con chạy hệ điều hành máy khách.
Các thiết bị ảo (Virtual Devices) được quản lý bởi Bo mạch ảo (Virtual Motherboard - VMB), nằm trong Máy ảo làm việc (Virtual Machine Worker) được cấp phát riêng cho từng máy ảo Có hai loại thiết bị ảo: Core Vdevs và plugin Vdevs Trong đó, Core Vdevs bao gồm thiết bị mô phỏng (Emulated Devices) như card video Vesa, đĩa mềm và BIOS, cùng với thiết bị tổng hợp (Synthetic Devices) không dựa vào phần cứng cụ thể như card mạng và ổ cứng, chỉ có trên máy khách hỗ trợ Dịch vụ tích hợp (Integration Services).
Virtual Infrastructure Driver hoạt động trong chế độ Kernel, cung cấp quản lý phân vùng bộ nhớ cho các máy ảo trong phân vùng con Nó cũng đảm nhiệm các thành phần chức năng cao hơn trong Virtualization Stack, kết nối với Hypervisor.
Windows Hypervisor Interface Library : Là một thư viện DLL chứa trong
Parent Partition đang vận hành hệ điều hành, trong khi bất kỳ hệ điều hành máy khách nào được chứng nhận cũng hoạt động hiệu quả trên Child Partition, mà nằm trong danh sách hệ điều hành được hỗ trợ của Hyper-V.
VMBus : là một thành phần của Integration Services trong Hyper-V chịu trách nhiệm tối ưu hóa quá trình liên lạc giữa phần vùng cha và phân vùng con.
Các Nhà Cung Cấp Dịch Vụ Ảo hóa chỉ tồn tại trong phân vùng cha và có nhiệm vụ cung cấp hỗ trợ thiết bị tổng hợp qua VMBus cho các Khách Hàng Dịch Vụ Ảo hóa (VSCs) đang hoạt động trong các phân vùng con.
Khách hàng dịch vụ ảo hóa là các thiết bị tổng hợp hoạt động trong các phân vùng con Chúng giao tiếp với các VSPs trong phân vùng cha thông qua VMBus để thực hiện các truy xuất thiết bị của các phân vùng con.
Child Partition là một phân vùng phần cứng về mặt logic đang chạy một hệ điều hành độc lập trong môi trường Hyper-V.
Phân vùng con là một trong ba khái niệm chính trong môi trường Hyper-V, bên cạnh phân vùng chính (Root Partition) và phân vùng cha (Parent Partition) Kể từ phiên bản Hyper-V 1.0, phân vùng chính và phân vùng cha đã trở nên tương đương, không còn sự phân biệt rõ ràng Trên một máy vật lý chạy Hyper-V, chỉ có một phân vùng cha, trong khi số lượng phân vùng con có thể tùy thuộc vào tài nguyên hiện có và gần như là không giới hạn.
Mỗi phân vùng trong hệ thống đều có tài nguyên bộ nhớ và bộ xử lý riêng, đồng thời lưu trữ thông tin chính sách về thiết bị sử dụng Phân vùng cha có quyền truy cập trực tiếp vào bộ nhớ và thiết bị vật lý, từ đó kích hoạt lớp Hypervisor và chịu trách nhiệm tạo ra và quản lý các phân vùng con Các phân vùng con này có khả năng chạy hệ điều hành độc lập, thường được gọi là hệ điều hành máy khách (Guest OS).
Phân vùng con chứa hệ điều hành Windows tương thích với Hyper-V cho phép tối ưu hóa hiệu suất trong quá trình triển khai Việc sử dụng Integration Service giúp khởi tạo Virtual Service Clients, cho phép chúng giao tiếp hiệu quả với Virtual Service Providers (VSPs) đang hoạt động trên phân vùng chính thông qua VMBus.
Phân vùng con chứa hệ điều hành khác Windows hướng Hyper-V: là những hệ điều hành không thuộc họ Windows nhưng tương thích với Hyper-V.
CÀI ĐẶT VÀ HƯỚNG DẪN SỬ DỤNG
1 Cài đặt bằng Command Line(CLI):
Bước 1 : Tải về máy Docker Desktop installer.exe từ trang https://www.docker.com. Bước 2 : mở terminal hoặc powershell.
Chương II: Sử dụng Docker Trang 16
Bước 3: Nhập vào terminal hoặc powershell lệnh:
Hình 8: Câu lệnh cài đặt file installer.exe (Teminal)
Nếu sử dụng PowerShell thì chạy với lệnh này:
Hình 9: Câu lệnh cài đặt file installer.exe (PowerShell)
Start-Process là lệnh cmdlet PowerShell dùng để khởi động một tiến trình (trong trường hợp này là trình cài đặt Docker).
'Docker Desktop Installer.exe': Tên của tệp thực thi cài đặt.
Wait : Tham số này yêu cầu PowerShell đợi quá trình hoàn tất trước khi tiếp tục thực hiện lệnh tiếp theo.
install : Đây là đối số được truyền cho trình cài đặt, cho biết trình cài đặt nên chạy. Nếu sử dụng Windows Command Prompt thì chạy với lệnh này:
Hình 10: Câu lệnh cài đặt file installer.exe (Command Prompt)
start là lệnh tích hợp trong dấu nhắc lệnh dùng để mở một cửa sổ riêng để chạy chương trình hoặc lệnh được chỉ định.
/w : Công tắc này yêu cầu dấu nhắc lệnh đợi chương trình hoàn tất trước khi chuyển sang lệnh tiếp theo.
"" : Tiêu đề trống cho cửa sổ sẽ được mở; điều này là bắt buộc nếu lệnh có chuỗi dấu ngoặc kép theo sau.
"Docker Desktop Installer.exe": Tên của tệp thực thi cài đặt.
install : Đối số này được truyền cho trình cài đặt, tương tự như lệnh PowerShell.
Lệnh cài đặt Docker:
quiet: Ẩn thông tin đầu ra khi chạy trình cài đặt.
accept-license: Chấp nhận Thỏa thuận Dịch vụ Đăng ký Docker ngay bây giờ, thay vì yêu cầu chấp nhận khi ứng dụng được chạy lần đầu.
no-windows-containers: Vô hiệu hóa tích hợp container Windows.
allowed-org=: Yêu cầu người dùng đăng nhập và thuộc về tổ chức
Docker Hub được chỉ định khi chạy ứng dụng.
backend=: Chọn backend mặc định để sử dụng cho Docker Desktop, bao gồm hyper-v, windows hoặc wsl-2 (mặc định).
installation-dir=: Thay đổi vị trí cài đặt mặc định (C:\Program Files\
Tệp admin-settings.json được tự động tạo ra, cho phép các quản trị viên quản lý và điều chỉnh các cài đặt của Docker Desktop trên các máy khách trong tổ chức của họ.
Sau khi nhập xong sẽ hiện lên một cửa sổ, sau đó chọn như hình bên dưới rồi bấm OK.
Use WSL 2 instead of Hyper-V (recommended):
Chương II: Sử dụng Docker Trang 18
Sau khi cài đặt thành công Docker Desktop, người dùng có thể chọn sử dụng Windows Subsystem for Linux 2 (WSL 2) thay vì Hyper-V WSL 2 là một tính năng của Windows cho phép chạy Linux trực tiếp trên hệ điều hành mà không cần máy ảo đầy đủ Với WSL 2, hiệu suất được cải thiện nhờ sử dụng một kernel Linux thực, mang lại tốc độ và hiệu năng tối ưu hơn so với Hyper-V.
Để thêm biểu tượng của chương trình hoặc ứng dụng ra màn hình chính (desktop) của Windows, bạn có thể sử dụng tùy chọn "Add shortcut to desktop" Điều này giúp bạn truy cập nhanh hơn vào các ứng dụng yêu thích Sau khi cài đặt hoàn tất, hãy đóng cửa sổ và khởi động lại máy tính để áp dụng thay đổi.
Cài đặt bằng Docker Desktop(GUI)
Bước 1 : Tải về máy Docker Desktop installer.exe từ trang https://www.docker.com
Step 2: Run the Docker Desktop installer.exe to initiate the installation process This procedure is similar to the command line installation, so you can follow the same steps.
Hình 12: Docker Desktop yêu cầu khởi động lại máy sau khi cài đặt
Lần đầu tiên khởi động, Docker sẽ yêu cầu chúng ta đọc và chấp thuận các chính sách của Docker.
Sau đây là tóm tắt chính sách của Docker :
Docker Desktop miễn phí dành cho các doanh nghiệp nhỏ với dưới 250 nhân viên và doanh thu hàng năm dưới 10 triệu đô la, cũng như cho mục đích sử dụng cá nhân, giáo dục và các dự án nguồn mở phi thương mại.
Nếu không, bạn cần phải trả phí đăng ký để sử dụng chuyên nghiệp.
Các cơ quan chính phủ cũng phải trả phí đăng ký.
Các gói đăng ký Docker Pro, Team và Business bao gồm quyền sử dụng Docker Desktop cho mục đích thương mại.
Chọn Chấp nhận để tiếp tục Docker Desktop sẽ khởi động sau khi bạn chấp nhận các điều khoản.
Lưu ý : Docker Desktop sẽ không chạy nếu bạn không đồng ý với các điều khoản
Chương II: Sử dụng Docker Trang 20
Hình 13: Các chính sách của Docker
Khi bạn mở Docker Desktop, Docker Dashboard sẽ hiển thị.
Chế độ xem Container cho phép bạn theo dõi thời gian chạy của tất cả các container và ứng dụng, đồng thời tương tác và quản lý vòng đời của chúng trực tiếp từ máy tính của bạn Giao diện trực quan trong chế độ xem này giúp bạn thực hiện các hành động cần thiết để kiểm tra, tương tác và quản lý các đối tượng Docker, bao gồm cả container và ứng dụng dựa trên Docker Compose.
Hình 14: Cửa sổ làm việc chính của Docker Desktop
Hình 15: Các chức năng của Docker được hiển thị ở menu bên trái cửa sổ làm việc
Chế độ xem Images cung cấp danh sách các image Docker, cho phép bạn chạy chúng dưới dạng vùng chứa, kéo phiên bản mới nhất từ Docker Hub và kiểm tra các hình ảnh Nó cũng tóm tắt các lỗ hổng của image và có tùy chọn dọn dẹp để xóa các image không cần thiết, giúp tiết kiệm dung lượng Nếu bạn đã đăng nhập, bạn có thể xem các image mà bạn và tổ chức của bạn đã chia sẻ trên Docker Hub.
Chế độ xem Volumes trong Docker Dashboard cung cấp khả năng quản lý hiệu quả các volume, cho phép người dùng tạo, xóa và thực hiện các thao tác khác Điều này giúp lưu trữ và bảo vệ dữ liệu bên ngoài các container, đảm bảo rằng dữ liệu không bị mất khi container bị xóa hoặc ngừng hoạt động Ngoài ra, người dùng có thể theo dõi các volume đang được sử dụng và kiểm tra các tệp, thư mục bên trong các volume của mình.
Chế độ xem Build giúp bạn theo dõi lịch sử các bản dựng và quản lý chúng hiệu quả Mặc định, chế độ này hiển thị danh sách tất cả các bản dựng đang diễn ra và đã hoàn thành, giúp bạn dễ dàng kiểm soát quá trình phát triển dự án.
Ngoài ra, Docker Dashboard cho phép bạn:
Điều hướng đến menu Cài đặt để cấu hình cài đặt Docker Desktop của bạn Chọn biểu tượng Cài đặt trong tiêu đề Bảng điều khiển.
Truy cập menu Troubleshoot để gỡ lỗi và thực hiện các thao tác khởi động lại. Chọn biểu tượng Troubleshoot trong tiêu đề Dashboard.
Nhận thông báo về các bản phát hành mới và cập nhật tiến trình cài đặt qua Trung tâm thông báo Để truy cập, hãy chọn biểu tượng chuông ở góc dưới bên phải của Docker Dashboard.
Truy cập Trung tâm học tập từ tiêu đề Bảng điều khiển để bắt đầu với các hướng dẫn nhanh trong ứng dụng Trung tâm này cung cấp nhiều tài nguyên hữu ích giúp bạn tìm hiểu về Docker.
Truy cập bảng điều khiển Docker Scout
Kiểm tra trạng thái của dịch vụ Docker.
Từ Docker Dashboard, bạn có thể sử dụng Tìm kiếm nhanh, nằm ở tiêu đề Dashboard, để tìm kiếm:
Chương II: Sử dụng Docker Trang 22
Bất kỳ container hoặc ứng dụng Compose nào trên hệ thống cục bộ đều có thể được quản lý dễ dàng Bạn có thể xem tổng quan về các biến môi trường liên quan và thực hiện các hành động nhanh chóng như bắt đầu, dừng hoặc xóa chúng.
Docker Hub cung cấp nhiều loại hình ảnh, bao gồm hình ảnh công khai, hình ảnh cục bộ và hình ảnh từ kho lưu trữ từ xa (kho lưu trữ riêng tư của các tổ chức mà bạn là thành viên) Bạn có thể kéo hình ảnh theo thẻ, xem tài liệu hướng dẫn, truy cập Docker Hub để biết thêm thông tin chi tiết, hoặc chạy một vùng chứa mới dựa trên hình ảnh đã chọn.
Tiện ích mở rộng là công cụ hữu ích giúp bạn dễ dàng tìm hiểu và cài đặt chỉ với một cú nhấp chuột Nếu đã cài đặt, bạn có thể mở tiện ích trực tiếp từ kết quả tìm kiếm.
Bất kỳ container nào Từ đây bạn có thể xem container liên quan.
Tài liệu Tìm trợ giúp từ tài liệu chính thức của Docker ngay trên Docker Desktop.
Docker Desktop cung cấp một biểu tượng khay dễ dàng truy cập trên thanh tác vụ, được gọi là menu Docker Để hiển thị menu này, người dùng chỉ cần chọn biểu tượng, sau đó sẽ thấy các tùy chọn có sẵn.
Dashboard Thao tác này sẽ đưa bạn đến Docker Dashboard.
Switch to Windows containers (nếu bạn đang sử dụng Windows)
About Docker Desktop Bao gồm thông tin về các phiên bản bạn đang chạy và liên kết đến Thỏa thuận dịch vụ đăng ký chẳng hạn.
ỨNG DỤNG DOCKER
1 Sử dụng Docker để tạo ứng dụng:
1.1 Triển khai Web đơn giản: Đầu tiên, chuẩn bị một các file cơ bản của một website như index.html, style.css, script.js bỏ vào cùng một folder (web tính toán đơn giản).
Để triển khai một website, việc tạo Dockerfile là cần thiết, vì đây là một tập lệnh văn bản hướng dẫn tạo hình ảnh container Lưu ý rằng Dockerfile không có phần mở rộng tệp, nếu không sẽ gây ra lỗi trong quá trình xây dựng Ngoài ra, Dockerfile cần phải được đặt trong cùng thư mục với các tệp index.html, style.css và script.js.
Bên trong dockerfile các lệnh tùy theo nhu cầu của người dùng (để tìm hiểu các lệnh thì cần tìm hiểu về dockerfile)
Bước tiếp theo là mở các trình biên dịch(powershell, terminal, ) và chuyển đến thư mục có chứa Dockerfile Sau đó nhập vào dòng lệnh sau:
Dòng lệnh docker build -t my-calculator-app có thể được phân tích thành các thành phần sau:
Chương II: Sử dụng Docker Trang 24
Hình 18: Định dạng của một Dockerfile
Dockerfile chứa các câu lệnh cơ bản để xây dựng image Docker Lệnh "docker build" cho phép người dùng tạo một image từ tệp Dockerfile, đọc các lệnh được định nghĩa trong tệp và thực hiện chúng trong thư mục hiện tại.
-t là viết tắt của tag, cho phép bạn gán tên cho image được tạo.
Ứng dụng my-calculator-app cho phép bạn gán tên cho hình ảnh theo cách dễ nhận diện Bạn có thể tùy chỉnh tên và thêm các thẻ để tăng khả năng tìm kiếm.
(dấu chấm): Dấu chấm đại diện cho thư mục hiện tại Docker sẽ tìm kiếm tệp
Dockerfile trong thư mục này sẽ sao chép tất cả các tệp và thư mục hiện tại vào image trong quá trình build, nếu có lệnh COPY trong Dockerfile.
Sau khi nhập dòng lệnh vào thì trong Docker Desktop sẽ xuất hiện một image như hình. Để chạy docker thì cần nhập vào lệnh:
Hình 21: Câu lệnh chạy Docker Container từ image
Lệnh "docker run -dp 82:80 my-calculator-app" được phân tích thành các thành phần quan trọng Cụ thể, "docker run" là lệnh dùng để tạo và khởi động một container từ một image đã được xây dựng.
Tùy chọn -d, viết tắt của detach, cho phép bạn chạy container trong chế độ tách biệt, nghĩa là container sẽ hoạt động ở nền mà không làm gián đoạn terminal Điều này giúp bạn theo dõi thông tin log, thông báo lỗi và đầu ra từ ứng dụng trên console, trong khi vẫn có thể sử dụng terminal cho các tác vụ khác.
-p là viết tắt của publish, cho phép bạn ánh xạ (map) một cổng trên máy host (máy bạn đang sử dụng) tới một cổng trong container.
Cú pháp host port:container port có nghĩa là cổng đầu tiên (82) là cổng trên máy host, và cổng thứ hai (80) là cổng trong container.
Khi bạn truy cập vào http://localhost:82 trên máy tính, yêu cầu sẽ được chuyển đến cổng 80 trong container nơi ứng dụng của bạn hoạt động Tên của image mà bạn đã tạo trước đó là my-calculator-app, và Docker sẽ sử dụng image này để tạo ra container.
Sau khi nhập dòng lệnh vào thì trong Docker Desktop sẽ xuất hiện một Containers như hình.
Để truy cập vào phần web qua localhost, bạn cần nhấp vào 82:80 trong mục Containers hoặc truy cập địa chỉ localhost:82, điều này sẽ dẫn bạn đến website đang chạy trong container.
Hình 23: Website sau khi triển khai
Chương II: Sử dụng Docker Trang 26
1.2 Triển khai ứng dụng web lên Docker Hub:
1.2.1 Chuẩn bị trước khi push lên Docker Hub: Đầu tiên ta cần đăng nhập vào Docker Hub từ trình duyệt web và tạo Repository cho image cần push lên Docker Hub:
Sau khi tạo xong Repository thì Docker Hub sẽ gợi ý cho chúng ta câu lệnh để push image lên Docker Hub:
Lưu ý: Để push được image lên Docker Hub thì tên của image phải có format:
/
Vì vậy trước khi push thì chúng ta cần kiểm tra tên của image bằng lệnh: docker image ls
Hình 24: Giao diện image trên Docker Hub
Hình 25: Public View của image
Kiểm tra kết quả của terminal trả về:
Để đổi tên một image trong Docker khi tên chưa đúng, bạn có thể sử dụng lệnh `docker tag` với cú pháp: `docker tag /:`.
: là IMAGE ID của image, trong ví dụ là 88987c97c459, bạn cũng có thể sử dụng image name và kết quả hoàn toàn giống nhau.
: đây là username trên Docker Hub.
: là tên Repository cần push image lên Docker Hub.
: nếu để trống, tag có giá trị mặc định là latest, tuy nhiên bạn cũng có thể thay đổi tag tuỳ theo ý muốn.
Ta thực hiện đổi tên image đúng theo yêu cầu:
Kiểm tra kết quả sau khi đổi tên image:
Ta đã có image name đúng format yêu cầu.
1.2.2 Push image lên Docker Hub: Ở bước này, để push được image Docker Hub chúng ta cần phải đăng nhập, thực hiện đăng nhập từ terminal bằng câu lệnh: docker login
Chương II: Sử dụng Docker Trang 28
Hình 27: Kết quả sau khi chạy lệnh docker image ls
Hình 28: Câu lệnh đổi format image name
Hình 29: Kết quả sau khi đổi tên
Hình 30: Login Docker Hub từ terminal
Sau khi terminal hiển thị thông báo đăng nhập thành công, chúng ta thực hiện việc đẩy hình ảnh lên Docker Hub theo hướng dẫn đã được trình bày trước đó.
Nếu không chỉ định giá trị cho tag, giá trị mặc định sẽ là "latest" Sau khi thực hiện lệnh, hãy kiểm tra trên Docker Hub để xác nhận việc push đã thành công.
Chúng ta thấy có đã có 1 image mới trong Repository tạo lúc đầu, vậy là chúng ta đã push thành công image lên Docker Hub.
1.2.3 Chạy Container ở máy khác: Để kiểm tra tính tiện lợi cũng như là phương châm build một lần và chạy ở bất kì đâu của Docker, chúng ta sẽ thử pull image này từ Docker Hub về một máy chạy hệ điều hành Ubuntu và chạy kiểm chứng.
Hình 31: Lệnh push image lên Docker Hub
Hình 32: Kiểm tra tại Docker Hub
Bước 1: Chúng ta chuẩn bị một máy chạy Ubuntu 24.04.01 LTS đã cài đặt Docker và không hề có các môi trường mà web yêu cầu như nginx.
Bước 2: Tiến hành pull image về từ Docker Hub:
Chúng ta có thể bấm vào nút Public View tại Repository để Docker Hub đề xuất câu lệnh pull image.
Chương II: Sử dụng Docker Trang 30
Hình 33: Kiểm tra cấu hình máy thử nghiệm
Hình 34: Tiến hành pull image từ Docker Hub
Hình 35: Lệnh mẫu để pull image