Khóa học docker

Storage trong Docker là gì?

0 phút đọc

Docker là một nền tảng mã nguồn mở giúp đơn giản hóa quá trình phát triển, triển khai và chạy các ứng dụng bằng cách sử dụng các container. Một trong những khía cạnh quan trọng của Docker là khả năng quản lý lưu trữ (storage) để đảm bảo rằng dữ liệu được lưu trữ một cách an toàn và hiệu quả. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về các tùy chọn lưu trữ trong Docker, cách sử dụng chúng, và cung cấp các ví dụ cụ thể để minh họa.

Tổng Quan Về Storage Trong Docker

Docker cung cấp nhiều tùy chọn lưu trữ để quản lý dữ liệu của các container. Các tùy chọn này bao gồm:

  1. Volumes: Là phương pháp lưu trữ được Docker khuyến nghị, volumes lưu trữ dữ liệu trên hệ thống file của host và có thể được chia sẻ giữa các container.
  2. Bind Mounts: Cho phép bạn gắn kết một thư mục hoặc file từ hệ thống file của host vào container.
  3. tmpfs Mounts: Lưu trữ dữ liệu trong bộ nhớ RAM của host, không được ghi vào hệ thống file của host.
  4. Storage Drivers: Quản lý cách các image và container được lưu trữ và quản lý trên host Docker.

Docker Volumes

Khái Niệm Về Docker Volumes

Docker volumes là các hệ thống file được gắn kết vào container để lưu trữ dữ liệu. Volumes được lưu trữ trên hệ thống file của host và có thể được chia sẻ giữa nhiều container. Volumes cung cấp nhiều lợi ích như tính di động, hiệu suất cao, và khả năng quản lý dễ dàng.

Tạo và Sử Dụng Docker Volumes

  1. Tạo Docker Volume

    Sử dụng lệnh docker volume create để tạo một Docker volume:

    docker volume create my-volume
  2. Gắn Kết Docker Volume Vào Container

    Sử dụng lệnh docker run với tùy chọn -v để gắn kết Docker volume vào container:

    docker run -d -v my-volume:/data --name my-container ubuntu

    Trong ví dụ trên:

    • my-volume là tên của Docker volume.
    • /data là thư mục trong container nơi volume được gắn kết.
  3. Kiểm Tra Docker Volumes

    Sử dụng lệnh docker volume ls để liệt kê tất cả các Docker volumes:

    docker volume ls
  4. Xóa Docker Volume

    Sử dụng lệnh docker volume rm để xóa một Docker volume:

    docker volume rm my-volume

Bind Mounts

Khái Niệm Về Bind Mounts

Bind mounts cho phép bạn gắn kết một thư mục hoặc file từ hệ thống file của host vào container. Bind mounts rất hữu ích khi bạn cần chia sẻ dữ liệu giữa host và container hoặc khi bạn cần truy cập các file hệ thống của host từ container.

Tạo và Sử Dụng Bind Mounts

  1. Gắn Kết Bind Mount Vào Container

    Sử dụng lệnh docker run với tùy chọn -v để gắn kết bind mount vào container:

    docker run -d -v /path/on/host:/path/in/container --name my-container ubuntu

    Trong ví dụ trên:

    • /path/on/host là đường dẫn trên hệ thống file của host.
    • /path/in/container là thư mục trong container nơi bind mount được gắn kết.
  2. Kiểm Tra Bind Mounts

    Sử dụng lệnh docker inspect để kiểm tra các bind mounts của container:

    docker inspect my-container

tmpfs Mounts

Khái Niệm Về tmpfs Mounts

tmpfs mounts lưu trữ dữ liệu trong bộ nhớ RAM của host và không được ghi vào hệ thống file của host. tmpfs mounts rất hữu ích khi bạn cần lưu trữ dữ liệu tạm thời hoặc khi bạn cần bảo vệ hiệu suất của container bằng cách tránh ghi dữ liệu vào đĩa.

Tạo và Sử Dụng tmpfs Mounts

  1. Gắn Kết tmpfs Mount Vào Container

    Sử dụng lệnh docker run với tùy chọn --tmpfs để gắn kết tmpfs mount vào container:

    docker run -d --tmpfs /path/in/container:size=64m --name my-container ubuntu

    Trong ví dụ trên:

    • /path/in/container là thư mục trong container nơi tmpfs mount được gắn kết.
    • size=64m chỉ định kích thước của tmpfs mount là 64MB.

Storage Drivers

Khái Niệm Về Storage Drivers

Storage drivers quản lý cách các image và container được lưu trữ và quản lý trên host Docker. Mỗi storage driver có các đặc điểm hiệu suất và tính năng riêng, phù hợp với các loại workload khác nhau.

Các Loại Storage Drivers

Docker hỗ trợ nhiều loại storage drivers, bao gồm:

  1. overlay2: Là storage driver mặc định cho hầu hết các bản phân phối Linux hiện tại, không cần cấu hình thêm.
  2. fuse-overlayfs: Được sử dụng cho Docker rootless trên các host không hỗ trợ rootless overlay2.
  3. btrfszfs: Hỗ trợ các tùy chọn nâng cao như tạo "snapshots", nhưng yêu cầu cấu hình và bảo trì nhiều hơn.
  4. vfs: Được sử dụng cho mục đích kiểm thử, không khuyến nghị sử dụng trong môi trường sản xuất do hiệu suất kém.

Kiểm Tra Storage Driver Hiện Tại

Sử dụng lệnh docker info để kiểm tra storage driver hiện tại:

docker info | grep "Storage Driver"

Ví Dụ: Tạo và Sử Dụng Docker Volumes

Trong ví dụ này, chúng ta sẽ tạo và sử dụng Docker volumes để lưu trữ dữ liệu của một ứng dụng web đơn giản.

  1. Tạo Dockerfile Cho Ứng Dụng Web

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

    # 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:

    {
      "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:

    const express = require("express");
    const app = express();
    const port = 8080;
    
    app.get("/", (req, res) => {
      res.send("Hello, Docker Volumes!");
    });
    
    app.listen(port, () => {
      console.log(`App running at http://localhost:${port}`);
    });
  4. Xây Dựng Docker Image Cho Ứng Dụng Web

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

    docker build -t docker-example .
  5. Tạo Docker Volume

    Sử dụng lệnh docker volume create để tạo Docker volume:

    docker volume create my-volume
  6. Chạy Docker Container Với Docker Volume

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

    docker run -d -p 8080:8080 -v my-volume:/data --name my-docker-app docker-example
  7. 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 Volumes!".

Các Thực Hành Tốt Nhất Khi Sử Dụng Docker Storage

Sử Dụng Các Image Chính Thức

Sử dụng các Docker image chính thức từ Docker Hub để đảm bảo tính bảo mật và hiệu suất.

FROM python:3.9-slim

Giảm Số Lớp (Layers)

Mỗi chỉ thị RUN, COPY, ADD tạo ra một lớp mới trong Docker image. Hãy kết hợp các lệnh lại để giảm số lớp.

RUN apt-get update && apt-get install -y \
    curl \
    vim \
    && rm -rf /var/lib/apt/lists/*

Sử Dụng .dockerignore

Sử dụng file .dockerignore để loại bỏ các file không cần thiết khỏi build context, giúp giảm kích thước Docker image.

node_modules
.git
Dockerfile
.dockerignore

Không Lưu Trữ Secrets Trong Dockerfile

Không lưu trữ các thông tin nhạy cảm như mật khẩu hoặc khóa API trong Dockerfile. Sử dụng Docker secrets hoặc biến môi trường để quản lý các thông tin này.

Chạy Container Với Quyền Hạn Thấp

Tránh chạy container với quyền root. Sử dụng chỉ thị USER để thiết lập người dùng không có quyền root.

RUN useradd -m myuser
USER myuser

Kết Luận

Storage trong Docker là một khía cạnh quan trọng giúp đảm bảo rằng dữ liệu của các container được lưu trữ một cách an toàn và hiệu quả. Bằng cách sử dụng các tùy chọn lưu trữ như Docker volumes, bind mounts, tmpfs mounts, và storage drivers, các nhà phát triển có thể quản lý dữ liệu của mình một cách linh hoạt và hiệu quả. Việc hiểu rõ các tùy chọn lưu trữ và cách sử dụng chúng sẽ giúp bạn tận dụng tối đa các lợi ích mà Docker mang lại. Bằng cách tuân theo các thực hành tốt nhất, bạn có thể đảm bảo rằng ứng dụng của mình sẽ hoạt động nhất quán và an toàn trên nhiều môi trường khác nhau.

Avatar
Được viết bởi

TechMely Team

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

entry

Các thành phần trong Docker bao gồm những thành phần nào?

entry

Giải thích về container trong Docker?

entry

Docker image là gì?

Bình luận

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

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