Khóa học docker

Docker là gì?

0 phút đọc

Docker là một nền tảng mã nguồn mở giúp các nhà phát triển xây dựng, triển khai, chạy, cập nhật và quản lý các ứng dụng container hóa. Docker cho phép đóng gói ứng dụng và tất cả các phụ thuộc của nó vào một đơn vị tiêu chuẩn gọi là container, giúp ứng dụng có thể chạy một cách nhất quán trên nhiều môi trường khác nhau.

Lịch sử và sự phát triển của Docker

Docker được ra mắt vào năm 2013 bởi công ty Docker, Inc. Ban đầu, Docker được phát triển để giải quyết vấn đề "chạy trên máy của tôi" mà nhiều nhà phát triển gặp phải khi ứng dụng hoạt động trên máy phát triển nhưng không hoạt động trên máy chủ sản xuất. Docker đã nhanh chóng trở thành một công cụ phổ biến trong cộng đồng phát triển phần mềm và DevOps nhờ khả năng đơn giản hóa quá trình phát triển, kiểm thử và triển khai ứng dụng.

Kiến trúc của Docker

Docker sử dụng mô hình kiến trúc client-server, bao gồm các thành phần chính sau:

  1. Docker Client: Docker client là giao diện dòng lệnh (CLI) cho phép người dùng tương tác với Docker daemon. Người dùng có thể sử dụng Docker client để gửi các lệnh như docker build, docker pull, docker run đến Docker daemon.

  2. Docker Daemon: Docker daemon chạy trên hệ điều hành máy chủ và chịu trách nhiệm quản lý các container Docker. Docker daemon nhận các lệnh từ Docker client và thực hiện các tác vụ như xây dựng, chạy và phân phối các container.

  3. Docker Registry: Docker registry là nơi lưu trữ các Docker image. Docker Hub là một registry công cộng phổ biến, nhưng người dùng cũng có thể thiết lập registry riêng của mình. Docker client có thể kéo (pull) các image từ registry và đẩy (push) các image lên registry.

  4. Docker Objects: Các đối tượng Docker bao gồm Docker images, containers, networks và volumes. Docker images là các mẫu chỉ đọc dùng để tạo container. Docker containers là các instance đang chạy của Docker images. Docker networks cho phép các container giao tiếp với nhau. Docker volumes cung cấp khả năng lưu trữ dữ liệu bền vững cho các container.

Docker Images và Docker Containers

  • Docker Images: Docker image là một mẫu chỉ đọc chứa tất cả các thành phần cần thiết để chạy một ứng dụng, bao gồm mã nguồn, runtime, thư viện, và các công cụ hệ thống. Docker image được xây dựng từ một file cấu hình gọi là Dockerfile. Dockerfile chứa các lệnh để xây dựng image, chẳng hạn như cài đặt các gói phần mềm và sao chép mã nguồn vào image.
  • Docker Containers: Docker container là một instance đang chạy của Docker image. Container cung cấp một môi trường cách ly để chạy ứng dụng, giúp đảm bảo rằng ứng dụng sẽ hoạt động nhất quán trên nhiều môi trường khác nhau. Container chia sẻ kernel của hệ điều hành chủ, nhưng có hệ thống file, mạng và không gian tiến trình riêng.

Các lệnh Docker cơ bản

Dưới đây là một số lệnh Docker cơ bản mà bạn sẽ sử dụng thường xuyên khi làm việc với Docker:

  1. docker --version: Hiển thị phiên bản Docker hiện tại.

    bash Copy
    docker --version
  2. docker pull: Kéo một Docker image từ Docker Hub.

    bash Copy
    docker pull <image_name>
  3. docker run: Tạo và chạy một container từ một Docker image.

    bash Copy
    docker run <image_name>
  4. docker ps: Liệt kê các container đang chạy.

    bash Copy
    docker ps
  5. docker ps -a: Liệt kê tất cả các container, bao gồm cả các container đã dừng.

    bash Copy
    docker ps -a
  6. docker stop: Dừng một container đang chạy.

    bash Copy
    docker stop <container_id>
  7. docker start: Khởi động lại một container đã dừng.

    bash Copy
    docker start <container_id>
  8. docker rm: Xóa một container đã dừng.

    bash Copy
    docker rm <container_id>
  9. docker rmi: Xóa một Docker image.

    bash Copy
    docker rmi <image_name>

Ví dụ: Tạo và chạy một ứng dụng web đơn giản với Docker

Trong ví dụ này, chúng ta sẽ tạo và chạy một ứng dụng web đơn giản sử dụng Docker.

  1. Tạo Dockerfile

    Tạo một file có tên là Dockerfile với nội dung sau:

    Dockerfile Copy
    # Sử dụng image chính thức của Node.js làm base image
    FROM node:14
    
    # Tạo thư mục làm việc trong container
    WORKDIR /app
    
    # Sao chép package.json và package-lock.json vào thư mục làm việc
    COPY package*.json ./
    
    # Cài đặt các phụ thuộc của ứng dụng
    RUN npm install
    
    # Sao chép mã nguồn ứng dụng vào thư mục làm việc
    COPY . .
    
    # Mở cổng 8080 để truy cập ứng dụng
    EXPOSE 8080
    
    # Chạy ứng dụng khi container khởi động
    CMD ["node", "app.js"]
  2. Tạo file package.json

    Tạo một file có tên là package.json với nội dung sau:

    json Copy
    {
      "name": "docker-example",
      "version": "1.0.0",
      "description": "A simple web application",
      "main": "app.js",
      "scripts": {
        "start": "node app.js"
      },
      "dependencies": {
        "express": "^4.17.1"
      }
    }
  3. Tạo file app.js

    Tạo một file có tên là app.js với nội dung sau:

    javascript Copy
    const express = require('express');
    const app = express();
    const port = 8080;
    
    app.get('/', (req, res) => {
      res.send('Hello, Docker!');
    });
    
    app.listen(port, () => {
      console.log(`App running at http://localhost:${port}`);
    });
  4. Xây dựng Docker image

    Sử dụng lệnh docker build để xây dựng Docker image từ Dockerfile:

    bash Copy
    docker build -t docker-example .
  5. Chạy Docker container

    Sử dụng lệnh docker run để tạo và chạy một container từ Docker image vừa xây dựng:

    bash Copy
    docker run -p 8080:8080 docker-example
  6. Truy cập ứng dụng

    Mở trình duyệt web và truy cập http://localhost:8080. Bạn sẽ thấy thông báo "Hello, Docker!".

Lợi ích của Docker

Docker mang lại nhiều lợi ích cho quá trình phát triển và triển khai ứng dụng:

  1. Tính nhất quán: Docker đảm bảo rằng ứng dụng sẽ hoạt động nhất quán trên nhiều môi trường khác nhau, từ máy phát triển đến máy chủ sản xuất.
  2. Tính di động: Docker container có thể chạy trên nhiều nền tảng khác nhau, bao gồm máy tính cá nhân, máy chủ vật lý, máy ảo, và các dịch vụ đám mây.
  3. Hiệu quả tài nguyên: Docker container nhẹ hơn so với máy ảo vì chúng chia sẻ kernel của hệ điều hành chủ và chỉ bao gồm các thành phần cần thiết để chạy ứng dụng.
  4. Tính linh hoạt: Docker cho phép dễ dàng mở rộng và thu nhỏ ứng dụng bằng cách thêm hoặc xóa các container.
  5. Tích hợp CI/CD: Docker tích hợp tốt với các công cụ CI/CD, giúp tự động hóa quá trình xây dựng, kiểm thử và triển khai ứng dụng.

Kết luận

Docker là một công cụ mạnh mẽ giúp đơn giản hóa quá trình phát triển, kiểm thử và triển khai ứng dụng. Bằng cách sử dụng Docker, các nhà phát triển có thể đảm bảo rằng ứng dụng của họ sẽ hoạt động nhất quán trên nhiều môi trường khác nhau, từ máy phát triển đến máy chủ sản xuất. Docker cũng mang lại nhiều lợi ích về tính di động, hiệu quả tài nguyên, và tính linh hoạt, giúp tối ưu hóa quá trình phát triển và triển khai ứng dụng.

Avatar
Được viết bởi

Admin Team

Gợi ý câu hỏi phỏng vấn

Không có dữ liệu

Không có dữ liệu

Gợi ý bài viết
Không có dữ liệu

Không có dữ liệu

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào