Khóa học docker

Container Linking trong Docker là gì?

0 phút đọc

Container linking trong Docker là một phương pháp cho phép các container giao tiếp với nhau một cách an toàn và hiệu quả. Mặc dù tính năng này đã trở thành một phần của hệ thống mạng Docker hiện đại và được thay thế bởi các phương pháp khác như mạng người dùng định nghĩa (user-defined networks), container linking vẫn là một khái niệm quan trọng cần hiểu khi làm việc với Docker. Trong bài viết này, chúng ta sẽ tìm hiểu chi tiết về container linking, cách thiết lập và sử dụng nó, và cung cấp các ví dụ cụ thể để minh họa.

Tổng Quan Về Container Linking

Container linking cho phép các container liên kết với nhau và truyền thông tin kết nối từ container này sang container khác. Khi các container được liên kết, thông tin về container nguồn có thể được gửi đến container nhận, cho phép container nhận truy cập các dữ liệu được chọn mô tả các khía cạnh của container nguồn.

Lợi Ích Của Container Linking

  1. Bảo Mật: Container linking cung cấp một kênh an toàn để các container giao tiếp với nhau mà không cần phải mở các cổng ra bên ngoài.
  2. Đơn Giản Hóa Kết Nối: Container linking giúp đơn giản hóa việc thiết lập kết nối giữa các container, đặc biệt là trong các môi trường phát triển và kiểm thử.
  3. Tự Động Cập Nhật: Khi container nguồn được khởi động lại, các tệp /etc/hosts trên các container liên kết sẽ tự động được cập nhật với địa chỉ IP mới của container nguồn, cho phép liên lạc liên kết tiếp tục.

Cách Thiết Lập Container Linking

Bước 1: Tạo Container Nguồn

Trước tiên, chúng ta cần tạo một container nguồn. Ví dụ, chúng ta sẽ tạo một container PostgreSQL:

docker run -d --name db training/postgres

Lệnh này sẽ tạo một container mới có tên là db từ image training/postgres, chứa một cơ sở dữ liệu PostgreSQL.

Bước 2: Tạo Container Nhận và Liên Kết

Tiếp theo, chúng ta sẽ tạo một container nhận và liên kết nó với container nguồn. Ví dụ, chúng ta sẽ tạo một container web và liên kết nó với container db:

docker run -d -P --name web --link db:db training/webapp python app.py

Lệnh này sẽ tạo một container mới có tên là web từ image training/webapp và liên kết nó với container db. Cờ --link có dạng:

--link <name or id>:alias

Trong đó name là tên của container mà chúng ta muốn liên kết và alias là một bí danh cho tên liên kết.

Bước 3: Kiểm Tra Liên Kết

Sử dụng lệnh docker inspect để kiểm tra các container đã được liên kết:

docker inspect -f "{{ .HostConfig.Links }}" web

Kết quả sẽ hiển thị rằng container web đã được liên kết với container db.

Ví Dụ: Tạo và Chạy Ứng Dụng Web Đơn Giản Với Container Linking

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 container linking.

  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!");
    });
    
    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 Container PostgreSQL

    Sử dụng lệnh docker run để tạo container PostgreSQL:

    docker run -d --name db postgres
  6. Tạo và Liên Kết Container Ứng Dụng Web

    Sử dụng lệnh docker run để tạo và liên kết container ứng dụng web với container PostgreSQL:

    docker run -d -p 8080:8080 --name web --link db:db 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!".

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

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

Container linking trong Docker là một công cụ mạnh mẽ giúp đơn giản hóa quá trình kết nối và giao tiếp giữa các container. Mặc dù tính năng này đã trở thành một phần của hệ thống mạng Docker hiện đại và được thay thế bởi các phương pháp khác như mạng người dùng định nghĩa, container linking vẫn là một khái niệm quan trọng cần hiểu khi làm việc với Docker. Bằng cách sử dụng container linking, 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 và an toàn trên nhiều môi trường khác nhau. Việc hiểu rõ cách thiết lập và sử dụng container linking sẽ giúp bạn tận dụng tối đa các lợi ích mà Docker mang lại.

Avatar
Được viết bởi

TechMely Team

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

entry

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

entry

Cách hiển thị trạng thái của tất cả docker container bằng dòng lệnh nào?

entry

Dữ liệu được lưu trữ trong container sẽ bị mất trong những trường hợp nào?

Bình luận

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

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