Docker là gì? Tổng quan kiến thức cơ bản về Docker

Theo khảo sát của Stack Overflow 2019, Docker là cái tên đứng thứ nhất trong bảng xếp hạng những platform được các lập trình viên muốn sử dụng khi phát triển một ứng dụng bất kỳ, đồng thời xếp thứ hai về độ yêu thích. Vậy thì Docker là gì? Nếu bạn đang có nhu cầu muốn tìm hiểu chi tiết hơn về nền tảng này thì hãy cùng chúng tôi tìm hiểu chi tiết trong nội dung bên dưới nhé.


Docker là gì? Tổng quan kiến thức cơ bản về Docker
 

Docker là gì?

Docker là một nền tảng có vai trò cung cấp cho lập trình viên và quản trị viên hệ thống các công cụ để tạo, triển khai và chạy ứng dụng thông qua việc sử dụng containers - một công nghệ ảo hóa tiên tiến. Cụ thể, các containers này sẽ hỗ trợ bạn đóng gói tất cả các thành phần quan trọng và phụ thuộc của ứng dụng vào trong một đơn vị độc lập giống như thư viện, sau đó tiến hành gửi chúng dưới dạng một package.

Ban đầu, nền tảng Docker được phát triển bằng ngôn ngữ lập trình Python nhưng sau đó đã được chuyển sang viết bằng ngôn ngữ Go (Golang) để gia tăng hiệu suất và trở nên đáng tin cậy hơn.

Các khái niệm liên quan đến Docker 

Khi tìm hiểu về Docker là gì, bạn không chỉ nên dừng lại ở phần định nghĩa bởi bấy nhiêu thôi vẫn chưa đủ. Thay vào đó, việc tìm hiểu thêm một số khái niệm liên quan đến Docker sẽ góp phần giúp bạn sử dụng nền tảng này thành thạo hơn, cụ thể:

- Docker Container: Container là một công nghệ giúp cho các developer có thể đóng gói ứng dụng cùng với các phụ thuộc của nó vào trong một đơn vị nhỏ. Đơn vị này có thể dễ dàng triển khai và chạy trên nhiều máy tính khác nhau mà không bị ảnh hưởng bởi sự khác biệt trong cài đặt của mỗi thiết bị.

- Dockerfile: Dockerfile là một tập lệnh có chứa các hướng dẫn chi tiết về cách xây dựng hình ảnh Docker. Nó sẽ xác định những hình ảnh cơ sở, mã nguồn ứng dụng, các phụ thuộc, cấu hình hệ thống và một số yêu cầu khác cần thiết để chạy ứng dụng trong một container.

- Docker Client: Là cách mà lập trình viên sử dụng để tương tác với Docker thông qua các lệnh có sẵn trong terminal. Docker Client gửi các lệnh này đến Docker Daemon bằng cách sử dụng Docker API.

- Docker Daemon: Thuật ngữ dùng để chỉ cách mà server Docker nhận và xử lý các yêu cầu từ Docker API. Ngoài ra, Docker Daemon quản lý các container, hình ảnh (images), mạng (networks) và ổ đĩa (volumes).

- Docker Volumes: Là phương pháp được sử dụng để lưu trữ dữ liệu liên tục và chia sẻ bởi các ứng dụng chạy trong các container Docker.

- Docker Registry: Kho lưu trữ đặc biệt được sử dụng để lưu trữ các Docker Images. Ảnh Docker được đẩy (push) vào Docker Registry và sau đó được các Docker Client khác nhau kéo (pull) ra. Lập trình viên có thể sử dụng Docker Registry công cộng hoặc triển khai một Docker Registry riêng (ví dụ: trên Google Cloud, AWS, Microsoft Azure,...).

- Docker Hub: Là dịch vụ Registry lớn nhất của Docker Images. Người dùng có thể lưu trữ và tìm kiếm các hình ảnh Docker của họ trên Docker Hub mà không cần trả phí.

- Docker Repository: Là một tập hợp của các Docker Images có cùng tên nhưng khác nhau về các tags.


Docker là gì?
 

Lợi ích của việc sử dụng Docker

Sau khi đã khám phá về những khái niệm của Docker cơ bản, bước tiếp theo mà chúng tôi muốn chia sẻ với bạn về những lợi ích mà nền tảng này mang lại, bao gồm:

- Khởi động và dừng container nhanh chóng: Docker cho phép bắt đầu và kết thúc container trong thời gian rất ngắn, chỉ mất vài giây so với máy ảo.

- Linh hoạt trong việc chọn hệ thống: Container Docker có thể được di chuyển dễ dàng giữa các máy chủ và môi trường khác nhau mà không cần thay đổi mã ứng dụng. Điều này giúp bạn dễ dàng triển khai ứng dụng của mình trên nhiều hệ thống khác nhau, bao gồm cả hệ thống đám mây.

- Tốc độ làm việc nhanh chóng: Các hoạt động như xây dựng và loại bỏ sẽ được thực hiện bởi container và thao tác này cũng nhanh hơn rất nhiều so với máy ảo.

- Thiết lập môi trường làm việc đơn giản: Lập trình viên chỉ cần cấu hình môi trường một lần và sẽ không cần phải cài đặt lại các phụ thuộc. Trong trường hợp có sự thay đổi về thành viên hoặc thiết bị thì họ chỉ cần chia sẻ cấu hình và mọi người là đã có thể tiếp tục làm việc.

- Hỗ trợ cho việc xóa: Docker giúp làm sạch không gian làm việc, nhất là khi lập trình viên đang cần xóa bỏ một số môi trường không còn cần thiết hoặc gây ảnh hưởng tới các phần khác.

Cách thức hoạt động của Docker

Về cơ bản, Docker hoạt động bằng cách cung cấp cho lập trình viên một phương thức tiêu chuẩn để chạy mã, hệt như cách các máy ảo ảo hóa phần cứng của server để loại bỏ nhu cầu quản lý trực tiếp. Trong trường hợp này, các container sẽ ảo hóa môi trường chạy của ứng dụng. Khi được cài đặt trên từng máy chủ, nền tảng này sẽ cung cấp các lệnh cơ bản để tạo, khởi chạy và dừng các container.

Cơ chế hoạt động của công cụ này bao gồm hai phần chính: Docker Engine và Docker Client. Docker Engine là một chương trình chạy trên máy chủ, nơi mà tất cả các quá trình tạo, khởi chạy và quản lý các container diễn ra. Docker Client là một ứng dụng chạy trên máy tính cá nhân của người dùng, cho phép họ tương tác với Docker Engine thông qua giao diện dòng lệnh hoặc giao diện người dùng đồ họa.

Engine và Client kết nối với nhau thông qua REST API, một bộ giao thức tiêu chuẩn cho phép các ứng dụng giao tiếp với nhau một cách dễ dàng và linh hoạt.

Ngoài ra, Docker cung cấp một số dịch vụ giúp bạn dễ dàng chạy các container ở quy mô lớn trên nền tảng đám mây của Amazon Web Services (AWS):

- Amazon ECS: Là một dịch vụ quản lý cho phép bạn tạo và quản lý các cụm container trên AWS một cách dễ dàng.

- AWS Fargate: Là dịch vụ cho phép bạn chạy các container mà không cần phải quản lý cơ sở hạ tầng nền tảng, giúp giảm bớt gánh nặng quản lý hạ tầng.

- Amazon EKS: Là dịch vụ quản lý Kubernetes cho phép bạn chạy các ứng dụng Kubernetes trên AWS, giúp quản lý và mở rộng hạ tầng Kubernetes một cách dễ dàng.

- AWS Batch: Là một dịch vụ quản lý hàng loạt, cho phép bạn chạy các tác vụ trên AWS được hiệu quả, linh hoạt hơn.

Docker

Nên sử dụng Docker trong những trường hợp nào?

Nên sử dụng Docker trong những trường hợp nào? Nếu bạn đang quan tâm đến vấn đề này thì dưới đây là một số trường hợp điển hình mà công cụ này sẽ phát huy tối đa hiệu quả của nó:

1. Triển khai kiến trúc Microservice

Kiến trúc Microservice là cách tiếp cận phát triển và triển khai ứng dụng bằng cách chia nhỏ ứng dụng thành các dịch vụ nhỏ. Mỗi dịch vụ này có thể hoạt động độc lập và có thể được triển khai, quản lý và mở rộng mà không ảnh hưởng đến các phần khác của ứng dụng.

Docker là một công cụ phù hợp để triển khai kiến trúc Microservice vì nó cho phép đóng gói mỗi dịch vụ vào các "container" nhỏ gọn. Như vậy, việc triển khai, quản lý các dịch vụ sẽ trở nên đơn giản và việc phát triển ứng dụng cũng thêm dễ dàng hơn.

2. Tăng tốc độ triển khai ứng dụng

Docker package sẽ giúp đơn giản và tự động hóa các bước xây dựng, đưa ứng dụng lên máy chủ và tiến hành thực thi nó. Điều này sẽ giúp cho các doanh nghiệp có thể đẩy mạnh tốc độ triển khai ứng dụng và cải thiện hiệu suất làm việc. Chẳng hạn, bạn có thể sử dụng nền tảng này để tự động xây dựng ứng dụng từ mã nguồn, sau đó đưa nó lên máy chủ và khởi chạy chỉ với một lệnh đơn giản duy nhất.


Docker cơ bản
 

3. Scale ứng dụng linh hoạt

Công cụ này giúp bạn mở rộng ứng dụng một cách linh hoạt, tức là bạn có thể dễ dàng thêm hoặc loại bỏ các container theo nhu cầu. Ví dụ, nếu bạn đang có một ứng dụng web sở hữu lượng truy cập cao thì bạn có thể mở rộng khả năng xử lý của ứng dụng bằng việc thêm các container mới một cách dễ dàng.

4. Tạo môi trường local giống với môi trường sản xuất

Với việc sử dụng Docker package, bạn có thể nhanh chóng tạo ra một môi trường làm việc tại máy tính cá nhân giống với môi trường mà ứng dụng sẽ chạy trong quy trình triển khai (sản xuất). Điều này giúp các nhà phát triển xây dựng, thử nghiệm ứng dụng một cách dễ dàng và hiệu quả hơn.


Docker container
 

Các lệnh cơ bản trong docker

Để có thể giúp cho quá trình sử dụng Docker cơ bản thêm hiệu quả, bạn cũng cần lưu ý đến một số lệnh sau:

- List image / container: $ docker image/container ls

- Delete image / container: $ docker image/container rm < tên image/container >

- Delete all image hiện có: $ docker image rm $(docker images –a –q)

- List all container hiện có: $ docker ps –a

- Show log a container: $ docker logs < tên container >

- Run container từ image và đổi tên: $ docker run –name < tên container > < tên image >

- Tạo một container chạy ngầm: $ docker run -d < tên image >

- Stop all container: docker stop $(docker ps –a –q)

- Delete all container hiện có: docker image rm $(docker images –a –q)

- Tải image trên docker hub: $ docker pull < tên image >

- Stop a container cụ thể: $ docker stop < tên container >

- Build một image từ container: $ docker build -t < tên container >

- Start một container: $ docker start < tên container >

Hướng dẫn chạy thử một container đơn giản

Để có thể tiến hành chạy thử một container đơn giản, các bạn hãy thực hiện theo hướng dẫn sau:

1. Cài đặt Docker

Để bắt đầu sử dụng Docker thì trước tiên, bạn cần cài đặt Docker trên máy tính của mình. Để biết cách cài đặt Docker, bạn có thể tham khảo tại đường link sau: https://docs.docker.com/engine/install. Hãy chắc chắn rằng bạn chọn đúng hệ điều hành của máy tính bạn.

Sau khi cài đặt xong, để kiểm tra xem Docker đã được cài đặt và sẵn sàng sử dụng hay chưa, bạn mở cửa sổ console hoặc terminal và thử gõ lệnh sau: docker -v

Nếu Docker đã được cài đặt thành công, bạn sẽ nhận được một kết quả tương tự như phiên bản hiện tại của Docker. Nếu bạn nhận được thông báo "command not found", đó có thể là do Docker chưa được cài đặt hoặc đường dẫn tới Docker chưa được thêm vào biến môi trường.

2. Chạy một web service với Docker

Sau khi đã cài đặt Docker thành công trên máy tính, bạn có thể chạy lệnh sau để khởi chạy một container: docker run -it -p 80:80 yeasy/simple-web

Trong đó:

docker run: Là lệnh để chạy một container. Bản chất là bạn đang sử dụng Docker CLI để giao tiếp với Docker Daemon.

-it: Đây là một cờ (flag) hoặc tham số cho lệnh docker run. Cờ -it cho phép bạn tương tác trực tiếp với terminal bên trong container. Điều này có nghĩa là bạn có thể thao tác trực tiếp với môi trường bên trong container từ terminal của bạn. Tuy nhiên, bạn nên cẩn thận khi sử dụng cờ -it với các container có quyền root vì điều này có thể vô tình thực hiện các lệnh có thể gây hại cho hệ thống.

-p: Tham số để ánh xạ cổng (port mapping). Phần bên trái của ":" là cổng trên máy tính của bạn, phần bên phải là cổng của container. Ví dụ: nếu bạn chọn "-p 3000:80", thì cổng ngoài là 3000, trong khi cổng của container phải là 80.

yeasy/simple-web: đây là tên của một image Docker đã được xây dựng sẵn và lưu trữ trên Docker Hub. Thông thường, bạn cũng có thể chỉ định phiên bản (ví dụ: yeasy/simple-web:v1.0) tuy nhiên thì mặc định phiên bản vẫn là "latest".

Kết quả:


Docker package
 

Vì đây là lần đầu tiên bạn sử dụng image yeasy/simple-web và image này lại không tồn tại trên máy tính của bạn. Thay vào đó, Docker sẽ tự động "kéo" image về từ Docker Hub. Điều này tương đương với việc chạy lệnh docker pull yeasy/simple-web.

Sau khi quá trình kéo (pull), giải nén và khởi chạy container thành công, bạn sẽ thấy một dòng thông báo gần giống như sau: Serving HTTP on 0.0.0.0 port 80 …

Bây giờ, bạn có thể mở trình duyệt và truy cập vào địa chỉ sau để kiểm tra ứng dụng web: http://localhost (mặc định cổng là 80).


Docker nghĩa là gì?

3. Chạy container như một service ngầm (daemon)

Vấn đề ở đây là khi chúng ta nhập CTRL + C để thoát, màn hình console sẽ bị "kẹt" trong container. Nếu chúng ta thoát như vậy, container sẽ bị dừng ngay lập tức (exited). Để kiểm tra tình trạng này, bạn có thể thử "CTRL + C" và sau đó sử dụng lệnh docker ps -a để kiểm tra.


Khái niệm docker
 

Nếu bạn thấy một container có trạng thái là "exited", bạn có thể gỡ container đó bằng lệnh docker rm a27fc8f3a840. Trong đó, a27fc8f3a840 chính là Docker container ID của bạn.

Sau khi gỡ bỏ container, bạn có thể chạy lại container nhưng lần này sẽ thêm một tham số là "-d" để chạy container ở chế độ detached (tách biệt): docker run -it -d -p 80:80 yeasy/simple-web.

Lần này, bạn sẽ thấy rằng console sẽ được giải phóng và không bị "kẹt" trong container nữa. Để kiểm tra xem container có đang chạy hay không, bạn có thể sử dụng tiếp câu lệnh: docker ps -a.


Docker package là gì?
 

Một số câu hỏi thường gặp về Docker

Bên cạnh những thông tin vừa được chia sẻ thì dưới đây còn là một số câu hỏi thường gặp mà chúng tôi sẽ giải đáp để bạn có thể hiểu rõ hơn về Docker cơ bản:

1. Ảnh Docker là gì?

Image là một tệp tin không thể thay đổi và nó chứa tất cả các thành phần cần thiết để chạy một container. Mỗi image sẽ bao gồm một hệ điều hành cơ bản cùng với các phần mềm, thư viện và tất cả các tài nguyên khác mà container cần để hoạt động.

Bạn có thể tạo image bằng cách sử dụng các lệnh có sẵn trong Docker, chẳng hạn như docker build, từ một Dockerfile (một tập tin chứa các chỉ thị để xây dựng image). Sau khi image được tạo, bạn có thể sử dụng nó để tạo một container mới bằng lệnh docker run. Điều này cho phép bạn tái sử dụng cùng một image để tạo nhiều container khác nhau, mỗi container có thể chạy một ứng dụng hoặc dịch vụ riêng biệt.

2. Sự khác biệt giữa VMware (máy ảo) và Docker là gì?

Máy ảo (Virtual Machine - VM) là một đối tượng được tạo ra để mô phỏng một hệ thống máy tính hoàn chỉnh bên trong một môi trường ảo. Nó cho phép người dùng tạo ra và chạy nhiều "máy tính logic" hoặc hệ điều hành độc lập trên một "máy tính vật lý" duy nhất, giúp dễ dàng quản lý và tăng cường vấn đề bảo mật.

Vì đều là công nghệ ảo hóa nên giữa Docker và máy ảo (VM) sẽ có những điểm tương đồng nhất định. Tuy nhiên thì trên thực tế, cả hai vẫn hoàn toàn khác biệt và điều này được thể hiện thông qua bảng so sánh dưới đây:
 

VMware (máy ảo)

Docker container

Kích thước (dung lượng) lớn

Kích thước (dung lượng) nhỏ

Mỗi máy ảo sẽ sở hữu một hệ điều hành riêng

Container sẽ trực tiếp sử dụng hệ điều hành của host

Ảo hóa mặt phần cứng

Ảo hóa mặt hệ điều hành

Thời gian khởi động sẽ được tính theo phút

Thời gian khởi động sẽ được tính theo mili giây

Hỗ trợ phân bổ bộ nhớ dựa trên nhu cầu cần thiết

Yêu cầu ít dung lượng bộ nhớ hơn

Hoàn toàn độc lập và đảm bảo an toàn hơn

Độc lập chỉ ở mức tiến trình, có thể kém an toàn hơn

 

3. Làm thế nào để sử dụng Docker triển khai ứng dụng web?

 

Để bắt đầu phát triển web bằng Docker thì bạn cần cài đặt Docker trên máy tính của mình. Hiện nay, Docker đang được hỗ trợ trên các hệ điều hành macOS, Windows và Linux. Cụ thể, các bước để cài đặt Docker sẽ được thực hiện như sau:

Bước 1: Truy cập vào trang tải chính thức của Docker và tải xuống Docker Desktop cho hệ điều hành máy tính của bạn.

Bước 2: Tiến hành cài đặt Docker Desktop bằng cách làm theo hướng dẫn cụ thể cho từng hệ điều hành của bạn.

Bước 3: Sau khi hoàn thành cài đặt, bạn hãy tiến hành xác minh rằng Docker đã được cài đặt bằng cách chạy lệnh sau trong terminal hoặc command prompt: docker --version.

Nếu việc cài đặt đã thành công, lệnh trên sẽ hiển thị phiên bản Docker đã cài đặt. Lúc này thì bạn đã có thể bắt đầu sử dụng nó cho các dự án phát triển web của mình.


Docker container là gì?
 

Trên đây là những thông tin tổng quan về Docker mà Phương Nam Vina muốn chia sẻ. Hi vọng với những kiến thức vừa được chia sẻ, bạn sẽ có thể hiểu rõ vai trò của Docker cơ bản trong việc build, deploy hay running ứng dụng, đồng thời sử dụng hiệu quả hơn cho công việc của mình.

Tham khảo thêm:

icon thiết kế website Name server là gì? Đặc điểm và cách thay đổi name server

icon thiết kế website Bảo mật website là gì? Những cách bảo mật website hiệu quả

icon thiết kế website Web server là gì? Các loại web server thông dụng nhất hiện nay

Bài viết mới nhất

Decode là gi? Những điều cần biết về giải mã trong kỷ nguyên số

Decode là gi? Những điều cần biết về giải mã trong kỷ nguyên số

Decode (giải mã) là quá trình chuyển đổi dữ liệu đã được mã hóa về dạng ban đầu nhằm đảm bảo thông tin được truy cập và sử dụng hiệu quả.

SEOquake là gì? Hướng dẫn cài đặt và sử dụng SEOquake

SEOquake là gì? Hướng dẫn cài đặt và sử dụng SEOquake

SEOquake là một công cụ hỗ trợ tối ưu hóa SEO hiệu quả mà bất kỳ SEOer nào hiện nay cũng nên cài đặt về trình duyệt của mình.

Cache là gì? Hướng dẫn xóa bộ nhớ cache nhanh chóng

Cache là gì? Hướng dẫn xóa bộ nhớ cache nhanh chóng

Cache là một thuật ngữ quen thuộc trong lĩnh vực công nghệ thông tin khi giúp tối ưu hoá hiệu suất hoạt động trên các thiết bị điện tử.

UTM là gì? Cách tạo và sử dụng UTM tracking code hiệu quả

UTM là gì? Cách tạo và sử dụng UTM tracking code hiệu quả

UTM (Urchin Tracking Module) là công nghệ được sử dụng để theo dõi, phân tích lưu lượng truy cập trên các kênh, liên kết đổ về website của bạn.

Mã hóa là gì? Các phương pháp mã hóa dữ liệu phổ biến

Mã hóa là gì? Các phương pháp mã hóa dữ liệu phổ biến

Mã hóa là một phương pháp chuyển đổi thông tin sao cho những người có quyền truy cập mới hiểu được nội dung, từ đó gia tăng hiệu quả bảo mật.

reCAPTCHA là gì? Kiến thức quan trọng Google reCAPTCHA

reCAPTCHA là gì? Kiến thức quan trọng Google reCAPTCHA

reCAPTCHA là một công cụ hỗ trợ xác thực website để giúp ngăn chặn các tình trạng spam hay hành vi gian lận, tấn công từ bên ngoài.

zalo