Cài đặt các phần mềm phổ biến bằng Docker Compose

Giới thiệu

Docker Compose là một công cụ của Docker giúp định nghĩa và quản lý các ứng dụng Docker đa container. Với việc sử dụng một tệp YAML duy nhất, bạn có thể xác định tất cả các dịch vụ cần thiết cho ứng dụng và khởi chạy chúng chỉ bằng một lệnh đơn giản. Docker Compose rất phù hợp cho kiến trúc vi dịch vụ hoặc bất kỳ ứng dụng nào yêu cầu chạy trên nhiều container.

Các lệnh cơ bản của Docker Compose:

# Khởi động dịch vụ
docker compose up
# Khởi động dịch vụ ở chế độ nền
docker compose up -d
# Dừng dịch vụ
docker compose stop
# Khởi động lại dịch vụ
docker compose restart
# Dừng và xóa tất cả dịch vụ, volume
docker compose down
# Xem nhật ký dịch vụ
docker compose logs
# Theo dõi nhật ký thời gian thực
docker compose logs -f
# Xem nhật ký của dịch vụ cụ thể
docker compose logs <tên_dịch_vụ>
# Mở rộng dịch vụ
docker compose scale <tên_dịch_vụ>=<số_lượng_thực_đệ>
# Chạy một dịch vụ đơn lẻ
docker compose run <tên_dịch_vụ> <lệnh>
# Liệt kê hình ảnh
docker compose images
# Kéo hình ảnh
docker compose pull
# Xóa dịch vụ đã dừng
docker compose rm

Cài đặt nerdctl:

wget https://github.com/containerd/nerdctl/releases/download/v1.7.7/nerdctl-1.7.7-linux-amd64.tar.gz
tar -zxf nerdctl-1.7.7-linux-amd64.tar.gz -C /usr/local/bin

Cơ sở dữ liệu

MySQL

MYSQL_USERMYSQL_PASSWORD là tùy chọn:

services:
  mysql:
    image: mysql:8.4.1
    container_name: mysql
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      MYSQL_DATABASE: demo_db
      MYSQL_USER: demo_user
      MYSQL_PASSWORD: 123456
    ports:
      - "3306:3306"
    volumes:
      - ./volumes/mysql_data:/var/lib/mysql

PostgreSQL

services:
  db:
    image: postgres
    restart: always
    shm_size: 128mb
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: 123456
      TZ: Asia/Shanghai
    ports:
      - "5432:5432"
    volumes:
      - ./volumes/pg_data:/var/lib/postgresql/data

Weaviate

Để cấu hình số lượng replica tối thiểu trong trường hợp không chỉ định khi tạo collection, bạn có thể sử dụng biến môi trường REPLICATION_MINIMUM_FACTOR. Ngoài ra, việc không chỉ định hostname sẽ gây ra vấn đề với giao thức Raft.

services:
  weaviate:
    hostname: weaviate-node
    command:
      - --host
      - 0.0.0.0
      - --port
      - '8080'
      - --scheme
      - http
    image: semitechnologies/weaviate:1.26.7
    ports:
      - 8080:8080
      - 50051:50051
    volumes:
      - ./volumes/weaviate_data:/var/lib/weaviate
      - ./volumes/weaviate_backup:/var/lib/weaviate_backup
    restart: on-failure:0
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'none'
      ENABLE_MODULES: backup-filesystem
      BACKUP_FILESYSTEM_PATH: /var/lib/weaviate_backup
      ENABLE_TOKENIZER_GSE: 'true'
      AUTHENTICATION_APIKEY_ENABLED: 'true'
      AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'WVF5YThaHlkYwhGUSmCRgsX3tD5ngdN8pkih'
      AUTHENTICATION_APIKEY_USERS: 'admin'
      AUTHORIZATION_ADMINLIST_ENABLED: 'true'
      AUTHORIZATION_ADMINLIST_USERS: 'admin'
      CLUSTER_HOSTNAME: 'node1'
      CLUSTER_IN_LOCALHOST: true
      CLUSTER_GOSSIP_BIND_PORT: 7100
      CLUSTER_DATA_BIND_PORT: 7101
      RAFT_BOOTSTRAP_EXPECT: 1
      RAFT_BOOTSTRAP_TIMEOUT: '1800'
      RAFT_ENABLE_ONE_NODE_RECOVERY: true
    deploy:
      resources:
        limits:
          cpus: '16'
          memory: 128gb
        reservations:
          cpus: '8'
          memory: 64gb
Cluster Mode

Weaviate sử dụng thuật toán Raft để đồng bộ hóa metadata giữa các nút trong cluster. Tất cả các thay đổi về metadata đều được gửi đến node leader, sau đó lan truyền đến các node follower.

Ví dụ cấu hình multi-node:

version: '3.1'
services:
  weaviate-master:
    hostname: weaviate-master
    network_mode: "host"
    command:
      - --host
      - 0.0.0.0
      - --port
      - '8080'
      - --scheme
      - http
    image: semitechnologies/weaviate:1.26.11
    restart: always
    volumes:
      - /data/weaviate:/var/lib/weaviate
    environment:
      QUERY_DEFAULTS_LIMIT: 25
      AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED: 'false'
      PERSISTENCE_DATA_PATH: '/var/lib/weaviate'
      DEFAULT_VECTORIZER_MODULE: 'none'
      AUTHENTICATION_APIKEY_ENABLED: 'true'
      AUTHENTICATION_APIKEY_ALLOWED_KEYS: 'your_api_key'
      AUTHENTICATION_APIKEY_USERS: 'api_user'
      AUTHORIZATION_ADMINLIST_ENABLED: 'true'
      AUTHORIZATION_ADMINLIST_USERS: 'api_user'
      ENABLE_TOKENIZER_GSE: 'true'
      CLUSTER_HOSTNAME: 'master'
      CLUSTER_GOSSIP_BIND_PORT: 7100
      CLUSTER_DATA_BIND_PORT: 7101
      RAFT_JOIN: 'master,follower1,follower2'
      RAFT_BOOTSTRAP_EXPECT: 3
      RAFT_BOOTSTRAP_TIMEOUT: 1800
    deploy:
      resources:
        limits:
          cpus: '16'
          memory: 256gb
        reservations:
          cpus: '8'
          memory: 64gb

Elasticsearch và Kibana

Tạo thư mục lưu trữ

mkdir -p /data/esdata01
mkdir -p /data/kibana-data01
chown 1000:1000 /data/esdata01
chown 1000:1000 /data/kibana-data01

Elasticsearch

services:
  es01:
    container_name: es-01
    image: harbor.qihoo.net/finloan-dev/elasticsearch:8.11.3
    volumes:
      - /data/esdata01:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
    environment:
      node.name: es01
      ELASTIC_PASSWORD: 123456
      bootstrap.memory_lock: false
      discovery.type: single-node
      xpack.security.enabled: true
      xpack.security.enrollment.enabled: true
      xpack.security.http.ssl.enabled: false
      xpack.security.transport.ssl.enabled: false
      cluster.routing.allocation.disk.watermark.low: 5gb
      cluster.routing.allocation.disk.watermark.high: 3gb
      cluster.routing.allocation.disk.watermark.flood_stage: 2gb
      TZ: Asia/Shanghai
    ulimits:
      memlock:
        soft: -1
        hard: -1
    healthcheck:
      test: ["CMD-SHELL", "curl http://localhost:9200"]
      interval: 10s
      timeout: 10s
      retries: 120
    restart: always
    deploy:
      resources:
        limits:
          cpus: '16'
          memory: 30gb
        reservations:
          cpus: '8'
          memory: 16gb

Kibana

services:
  kibana01:
    container_name: kibana-01
    image: harbor.qihoo.net/finloan-dev/kibana:8.11.3
    ports:
      - 80:5601
    environment:
      SERVER_NAME: kibana01
      ELASTICSEARCH_HOSTS: http://es01:9200
      ELASTICSEARCH_USERNAME: kibana_system
      ELASTICSEARCH_PASSWORD: 123456
      TZ: Asia/Shanghai
    volumes:
      - /data/kibana-data01:/usr/share/kibana/data
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "curl -s -I http://kibana:5601 | grep -q 'HTTP/1.1 302 Found'",
        ]
      interval: 10s
      timeout: 10s
      retries: 30
    ulimits:
      memlock:
        soft: -1
        hard: -1
    restart: always
    networks:
      - es_default
    deploy:
      resources:
        limits:
          cpus: '16'
          memory: 30gb
        reservations:
          cpus: '8'
          memory: 16gb

MinIO

MinIO là một giải pháp lưu trữ đối tượng nguồn mở cung cấp API tương thích với AWS S3.

services:
  minio:
    image: minio/minio:latest
    container_name: minio-1
    hostname: minio-1
    command: server /data --console-address ":9001"
    ports:
      - "9000:9000"
      - "9001:9001"
    environment:
      MINIO_ROOT_USER: root
      MINIO_ROOT_PASSWORD: 123456
    volumes:
      - ./volumes/data:/data

Thẻ: docker-compose weaviate MinIO

Đăng vào ngày 5 tháng 6 lúc 20:46