Khóa học docker

Quản Lý Port Trong Docker

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ý các port để đảm bảo rằng các ứng dụng container hóa có thể giao tiếp với nhau và với thế giới bên ngoài. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về cách quản lý port trong Docker, bao gồm các khái niệm cơ bản, các lệnh và công cụ liên quan, và cung cấp các ví dụ cụ thể để minh họa.

Tổng Quan Về Quản Lý Port Trong Docker

Quản lý port trong Docker bao gồm việc thiết lập và cấu hình các port để các container có thể giao tiếp với nhau và với mạng bên ngoài. Các khái niệm chính bao gồm:

  1. Exposing Ports: Sử dụng chỉ thị EXPOSE trong Dockerfile để chỉ định các port mà container sẽ lắng nghe.
  2. Publishing Ports: Sử dụng các tùy chọn -p hoặc -P trong lệnh docker run để ánh xạ các port của container với các port của host.
  3. Port Forwarding: Chuyển tiếp các yêu cầu từ một port trên host đến một port trên container.

Exposing Ports

Chỉ thị EXPOSE trong Dockerfile được sử dụng để chỉ định các port mà container sẽ lắng nghe trong quá trình runtime. Tuy nhiên, chỉ thị này không tự động xuất bản các port để có thể truy cập từ bên ngoài; nó chỉ cung cấp thông tin về các port mà container sẽ sử dụng.

Ví Dụ Về Exposing Ports

Tạo một Dockerfile với chỉ thị EXPOSE:

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"]

Trong ví dụ trên, chỉ thị EXPOSE 8080 chỉ định rằng container sẽ lắng nghe trên port 8080.

Publishing Ports

Để các port của container có thể truy cập từ bên ngoài, bạn cần xuất bản chúng bằng cách sử dụng các tùy chọn -p hoặc -P trong lệnh docker run.

Sử Dụng Tùy Chọn -p

Tùy chọn -p cho phép bạn ánh xạ một port cụ thể trên host với một port cụ thể trên container.

bash Copy
docker run -d -p 8080:80 nginx

Trong ví dụ trên:

  • 8080 là port trên host.
  • 80 là port trên container.

Lệnh này ánh xạ port 8080 trên host với port 80 trên container, cho phép bạn truy cập ứng dụng Nginx chạy trong container thông qua http://localhost:8080.

Sử Dụng Tùy Chọn -P

Tùy chọn -P (viết tắt của --publish-all) tự động xuất bản tất cả các port được chỉ định bởi chỉ thị EXPOSE trong Dockerfile đến các port ngẫu nhiên trên host.

bash Copy
docker run -d -P nginx

Lệnh này sẽ ánh xạ tất cả các port được chỉ định bởi chỉ thị EXPOSE trong Dockerfile của image Nginx đến các port ngẫu nhiên trên host.

Port Forwarding

Port forwarding là quá trình chuyển tiếp các yêu cầu từ một port trên host đến một port trên container. Điều này cho phép các ứng dụng chạy trong container có thể truy cập từ bên ngoài.

Các Bước Thực Hiện Port Forwarding

  1. Xác Định Port Của Container

    Sử dụng lệnh docker inspect để xác định các port mà container đang lắng nghe.

    bash Copy
    docker inspect <container_name_or_id>

    Kiểm tra phần ExposedPorts trong kết quả trả về.

  2. Chọn Port Trên Host

    Chọn một port trên host để ánh xạ với port của container. Ví dụ, chọn port 8080 trên host.

  3. Ánh Xạ Port

    Sử dụng lệnh docker run với tùy chọn -p để ánh xạ port của container với port của host.

    bash Copy
    docker run -p 8080:80 nginx
  4. Kiểm Tra Kết Nối

    Mở trình duyệt web và truy cập http://localhost:8080 để kiểm tra kết nối.

Ví Dụ: Tạo và Chạy Ứ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 -d -p 8080:8080 --name my-docker-app 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!".

Các Thực Hành Tốt Nhất Khi Quản Lý Port Trong Docker

Để đảm bảo rằng các Docker containers của bạn an toàn và hiệu quả, hãy tuân theo các thực hành tốt nhất sau:

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.

Dockerfile Copy
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.

Dockerfile Copy
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.

plaintext Copy
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.

Dockerfile Copy
RUN useradd -m myuser
USER myuser

Kết Luận

Quản lý port trong Docker là một khía cạnh quan trọng giúp đảm bảo rằng các ứng dụng container hóa có thể giao tiếp với nhau và với thế giới bên ngoài. Bằng cách sử dụng các công cụ và phương pháp như chỉ thị EXPOSE, tùy chọn -p-P, và port forwarding, các nhà phát triển có thể dễ dàng quản lý và tối ưu hóa các container Docker của mình.

Việc hiểu rõ cách quản lý port trong Docker và các thành phần của nó là rất quan trọng để tận dụng tối đa các lợi ích mà Docker mang lại. Bằng cách sử dụng Docker, các nhà phát triển có thể nâng cao hiệu quả và tính nhất quán trong 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