Docker là gì?



Docker là một công cụ để xây dựng, phát triển và chạy các ứng dụng trong môi trường đóng gói được gọi là "container". Container là một cách để chạy một ứng dụng trong môi trường đóng gói có sẵn, đồng thời cũng đảm bảo rằng các tài nguyên cần thiết cho ứng dụng đó được cung cấp một cách đồng nhất và không bị tác động bởi các ứng dụng khác trên hệ thống.


Điều này có nghĩa là bạn có thể chạy một ứng dụng trong môi trường container và đảm bảo rằng nó sẽ chạy tương tự như trên máy tính của bạn, ngay cả khi máy tính của bạn sử dụng hệ điều hành hoặc phiên bản của một thư viện khác nhau. Điều này rất hữu ích khi bạn muốn phát triển và triển khai các ứng dụng trên nhiều hệ thống khác nhau mà không phải lo lắng về việc các yêu cầu cấu hình khác nhau có thể gây ra sự khác biệt trong việc chạy các ứng dụng.


Docker cũng cung cấp các công cụ để quản lý và triển khai các container trên nhiều máy tính, giúp cho việc triển khai các ứng dụng trên nhiều hệ thống dễ dàng hơn. Bạn có thể sử dụng Docker để tạo ra các container chứa các ứng dụng của mình, sau đó triển khai chúng trên bất kỳ hệ thống nào có Docker cài đặt. Điều này giúp bạn tiết kiệm thời gian và nỗ lực khi phải triển khai các ứng dụng trên nhiều hệ thống khác nhau.


Hình: docker.com

Docker cũng có một hệ thống tự động hóa việc xây dựng các container, giúp cho việc phát triển và triển khai các ứng dụng trở nên nhanh chóng hơn. Bạn có thể sử dụng các tập lệnh để tạo ra các container từ mã nguồn của ứng dụng của mình, sau đó sử dụng các công cụ của Docker để triển khai chúng trên nhiều hệ thống khác nhau.


Ngày nay hệ sinh thái của docker phát triển rực rõ và cực kì phong phú.


Các khái niêm có trong Docker

1. Docker Engine là một phần mềm để xây dựng, phát triển và chạy các container trong hệ thống Docker. Nó bao gồm các công cụ để tạo ra các container từ các image, chạy các container và quản lý chúng. Docker Engine cũng cung cấp các tính năng khác nhau để hỗ trợ việc xây dựng và triển khai các ứng dụng trong container, như khả năng tích hợp với các dịch vụ đám mây, tự động hóa việc xây dựng các container và tích hợp với các công cụ quản lý dự án phát triển phần mềm. Docker Engine được sử dụng rộng rãi trong các môi trường phát triển và triển khai phần mềm vì nó cung cấp một cách để chạy các ứng dụng trong môi trường đóng gói và không bị tác động bởi các yêu cầu cấu hình khác nhau của các hệ thống.


2. Docker image là một tệp định nghĩa một container trong hệ thống Docker. Nó bao gồm tất cả các tài nguyên cần thiết để chạy một ứng dụng, bao gồm các tệp tin hệ thống, các thư viện và các câu lệnh khởi chạy. Khi bạn tạo ra một container từ một image, Docker sẽ tải tất cả các tài nguyên cần thiết vào container đó và sẵn sàng để chạy ứng dụng. Docker image có thể được tạo ra bằng cách sử dụng các tập lệnh Docker hoặc bằng cách sử dụng các công cụ tự động hóa.


3. Docker container là một cách để đóng gói một ứng dụng và tất cả các tài nguyên cần thiết để chạy nó trên một hệ thống. Container đóng gói tất cả các tài nguyên cần thiết trong một không gian độc lập, giúp cho việc chạy ứng dụng trên nhiều hệ thống khác nhau trở nên dễ dàng hơn. Để tạo ra một container, bạn sử dụng một Docker image làm cơ sở. Docker sẽ tải tất cả các tài nguyên cần thiết từ image đó vào container và sẵn sàng để chạy ứng dụng. Container có thể được chạy trên bất kỳ hệ thống nào có Docker cài đặt, giúp cho việc triển khai các ứng dụng trên nhiều hệ thống khác nhau trở nên dễ dàng hơn.


4. Docker Compose là một công cụ để quản lý và triển khai các container trên nhiều máy tính trong hệ thống Docker. Nó cho phép bạn tạo ra một tập lệnh để tự động hóa việc triển khai các container trên nhiều hệ thống khác nhau.

Ví dụ, nếu bạn có một ứng dụng phần mềm được đóng gói trong các container và muốn triển khai nó trên nhiều máy chủ, bạn có thể sử dụng Docker Compose để tạo ra một tập lệnh để tự động hóa việc triển khai các container trên các máy chủ đó. Docker Compose còn có thể giúp bạn quản lý các container trên các máy tính khác nhau và cập nhật các container khi có các bản cập nhật mới.


5. Kubernetes (viết tắt là K8s) là một hệ thống quản lý container để triển khai và quản lý các ứng dụng phân tán trên nhiều máy chủ. Nó được sử dụng rộng rãi trong các môi trường đám mây và cho phép bạn triển khai và quản lý các ứng dụng dễ dàng hơn bằng cách tự động hóa quá trình triển khai, giám sát và cập nhật các container.

Kubernetes cung cấp các tính năng như tự động hóa việc triển khai các container, tự động hóa việc tìm kiếm và khắc phục sự cố trên các container, và tích hợp với các dịch vụ đám mây khác nhau. Nó còn có thể giúp bạn quản lý các container trên nhiều máy chủ khác nhau và tự động cập nhật các container khi có bản cập nhật mới


Dockerfile


Dockerfile là một tập tin chứa các câu lệnh để xây dựng một Docker image. Nó bao gồm các câu lệnh để cài đặt các phần mềm cần thiết, cấu hình các tệp tin hệ thống và các câu lệnh khởi chạy ứng dụng.

Để tạo ra một Docker image từ một Dockerfile, bạn sử dụng câu lệnh docker build. Docker sẽ đọc Dockerfile và thực hiện các câu lệnh trong đó để tạo ra một image mới. Sau khi tạo ra một image, bạn có thể sử dụng nó để tạo ra các container và chạy các ứng dụng trong container đó.

Dockerfile cung cấp một cách tiện dụng để xây dựng và quản lý các Docker image, giúp cho việc triển khai và quản lý các ứng dụng trên nhiều hệ thống khác nhau trở nên dễ dàng hơn.

Ví dụ:

FROM node:14

# Set the working directory
WORKDIR /app

# Copy package.json and package-lock.json
COPY package*.json ./

# Install dependencies
RUN npm install

# Copy the rest of the application code
COPY . .

# Expose the app's port
EXPOSE 3000

# Start the app
CMD ["npm", "start"]


Trong đó:

  • FROM node:14 lấy các tập tin cần thiết từ một image nodejs có sẵn để tạo ra một image mới.
  • WORKDIR /app đặt thư mục làm việc của bạn tại /app.
  • COPY package*.json ./ sao chép các tập tin package.json và package-lock.json từ thư mục hiện tại của bạn vào thư mục /app trong image.
  • RUN npm install cài đặt các phụ thuộc cần thiết cho dự án của bạn bằng npm.
  • COPY . . sao chép toàn bộ các tập tin còn lại từ thư mục hiện tại của bạn vào thư mục /app trong image.
  • EXPOSE 3000 cho phép các giao thức mạng truy cập vào cổng 3000 trong image
  • CMD ["npm", "start"] chạy lệnh npm start để khởi động dự án của bạn khi image được khởi chạy.

Lưu ý rằng đây chỉ là một ví dụ và bạn có thể tùy biến Dockerfile này theo nhu cầu của dự án của bạn.


Build docker image

Để tạo một Docker image từ một Dockerfile, bạn có thể sử dụng lệnh docker build. Ví dụ, để tạo một image tên là my-app từ một Dockerfile được lưu trữ trong thư mục hiện tại, bạn có thể sử dụng lệnh sau:

docker build -t my-app .


Trong đó, -t là tùy chọn để đặt tên cho image, và dấu chấm (.) là đường dẫn đến thư mục chứa Dockerfile.

Để xem các tùy chọn khác có thể sử dụng với lệnh docker build, bạn có thể sử dụng lệnh docker build --help để xem hướng dẫn sử dụng.


Hình: jfrog.com

Run Docker container

Để chạy một image Docker, bạn có thể sử dụng lệnh docker run. Ví dụ, để chạy `my-app`, bạn có thể sử dụng lệnh sau:

docker run my-app


Ngoài ra, bạn cũng có thể thêm các tùy chọn cho lệnh docker run để điều chỉnh cách container được khởi chạy. Ví dụ, để chạy container với cổng 3000 được định cấu hình được gắn kết với cổng 80 trên máy chủ, bạn có thể sử dụng lệnh sau:

docker run -p 80:3000 my-app


Để xem các tùy chọn khác có thể sử dụng với lệnh docker run, bạn có thể sử dụng lệnh docker run --help để xem hướng dẫn sử dụng.