Blog Chia SẻBlog Chia Sẻ

Mẫu docker-compose.yml

0
Nội dung và ý nghĩa các dòng viết trong file này được giải thích trong các comment, bạn có thể chỉnh lại cho phù hợp với mục đích của mình:


# VIẾT THEO CÚ PHÁP YAML, CHÚ Ý CHÍNH XÁC KHOẢNG TRẮNG ĐẦU CÁC DÒNG

version: "3"                      # chọn viết theo bản 3 docs.docker.com/compose/compose-file/

services:                         # CÁC DỊCH VỤ (CONTAINER) NĂM TRONG services
  pro-memcached:                  # (((1))) BẮT ĐẦU TẠO DỊCH VỤ THỨ NHẤT
    image: "memcached:latest"     # Image tạo ra dịch vụ
    container_name: c-memcached01 # Tên container khi chạy
    restart: always
    hostname: memcached
    networks:
      - my-network                # nối vào mạng my-network (tạo mạng này ở dưới)
    command:
      - "--conn-limit=2048"       # Giới hạn kết nối là 2048
      - "--memory-limit=2048"     # Giới hạn cho phép dùng tới 4096 MB bộ nhớ làm cache
  xtlab-apache:                   # (((2))) TẠO DỊCH VỤ HTTPD
    image: "httpd:version2"       # sử dụng image custome lại ở trên để tạo container
    container_name: c-httpd01     # tên khi chạy container HTTPD
    restart: always
    hostname: httpd01
    networks:
      - my-network
    ports:
      - "8080:80"                 # Mở cổng 8080 public, ánh xạ vào 80
      - "443:443"

    volumes:                      # Ánh xạ thự mục vào container
      - dir-site:/home/sites/     # Bind ổ đĩa - dir-site
  xtlab-mysql:                      # (((3))) TẠO DỊCH VỤ MYSQL
    image: "mysql:latest"
    container_name: mysql-product
    restart: always
    hostname: mysql01
    networks:
      - my-network
    environment:
      MYSQL_ROOT_PASSWORD: abc123   #Thiết lập password
    volumes:
      - /mycode/db:/var/lib/mysql  # thư mục lưu DB
      - /mycode/db/my.cnf:/etc/mysql/my.cnf  # ánh xạ file cấu hình
  xtlab-php:                         # (((4))) TẠO DỊCH VỤ PHP
    image: "php:version2"
    container_name: php-product      # tên container
    hostname: php01
    restart: always
    networks:
      - my-network
    volumes:
      - dir-site:/home/sites/        # Bind ổ đĩa - dir-site

networks:                             # TẠO NETWORK
  my-network:
    driver: bridge
volumes:                              # TẠO Ổ ĐĨA
  dir-site:                           # ổ đĩa này lưu dữ liệu ở /mycode/
    driver_opts:
      device: /mycode/                # Hãy đảm bảo có thư mục /mycode/default
      o: bind

Mẫu docker-compose và giải thích


version: "3.7"

# KHAI BÁO CÁC DỊCH VỤ
services:
  # TÊN DỊCH VỤ
  web:                     
    # TÊN IMAGE TẠO TẠO CONTAINER                       
    image: busybox                                
    ## DÙNG IMAGE BUILD TỪ DOCKERFILE
    # build: 
    #   dockerfile: Dockerfile
    #   context: ./web

    # ÁNH XẠ CỔNG MÁY HOST VÀO CỔNG CONTAINER
    ports:                                       
      - 8099:80

    # MỞ CỔNG, KHÔNG ÁNH XẠ HOST, DÙNG NỘI BỘ MẠNG  
    # expose:
    #   - "3000"

    ## CHÍNH SÁCH KHỞI ĐỘNG
    restart: always

    # Nối vào mạng network1
    networks:
      - network1

  

    ## Thêm hoặc bỏ các quyền (Capability) trong container
    ## http://man7.org/linux/man-pages/man7/capabilities.7.html  
    # cap_add:
    #   - ALL
    # cap_drop:
    #   - NET_ADMIN
    #   - SYS_ADMIN
    
    # cap quyen root
    # privileged: true
    
    
    ## Ghi đè  entrypoint
    # entrypoint: /code/entrypoint.sh

    ## Ghi đè CMD mặc định nếu cần
    # command: ["bash", "ls"]

    ## ĐẶT TÊN CONTAINER 
    container_name: my-container

    ## THÊM BIẾN MÔI TRƯỜNG
    # environment:
    #   - TEN_BIEN1=giatri1
    #   - TEN_BIEN2=giatri2

    ## THÊM DỮ LIỆU HOST, TƯƠNG ĐƯƠNG KHAI BÁO TRONG /etc/hosts
    # extra_hosts:
    #    - "example.com:192.168.1.55"
 

    ## GẮN Ổ ĐĨA, THƯ MỤC VÀO CONTAINER
    # volumes:
    #   - /opt/data:/var/lib/mysql      
    #   - data3:/var/lib/mysql

    ## THIẾT LẬP LOG
    logging:
        options:
          max-size: "1m"
          max-file: "2"
    
    ## CẤU HÌNH DNS
    dns: 8.8.8.8      

    # CẤU HÌNH NẾU TRÊN SWARM
    deploy:
      replicas: 6                       # Số lượng container cho dịch vụ
      # placement:
      #   constraints:
      #       - node.role == manager    # Chỉ chạy ở node manager
      resources:                        # Thiết lập tài nguyên
        limits:                         # Giới hạn tài nguyên
          cpus: '0.50'                  # 50% của 1 Core
          memory: 50M 
        reservations:                   # Tài nguyên tối thiểu
          cpus: '0.25'
          memory: 20M
          
      restart_policy:
        condition: on-failure

#  ---------------------------------------------------------------------------------------
# KHAI BÁO VOLUME
volumes:
  # volume không tạo mới, sử dụng volume đã có data1
  data1:
    external: true
  # volume không tạo mới, sử dụng volume đã có data-abc
  data2:
    external:
      name: data-abc
  # tạo volume local
  data3:
  # tạo volume có ánh xạ đường dẫn
  data4:
    driver: local
    driver_opts:
      type: none
      device: "/path/to/dir"
      o: bind
  # tạo volume mount từ NFS    
  data5:
    driver: local
    driver_opts:
      type: nfs
      o: addr=192.168.1.1,rw
      device: ":/path/to/dir"
#  ---------------------------------------------------------------------------------------
# KHAI BÁO MẠNG
networks:
  # Tạo mạng cầu
  network1:
    driver: bridge

  # Mạng lấy bên ngoài, network2 là networkxyz đã có
  network2:
      external:
        name: networkxyz  
  # Tạo mạng overlay trên swam
  network3:
    driver: overlay
    name: my-overlay

Câu hỏi/câu trả lời này có giải quyết được sự cố của bạn không?

Đánh giá

Ý kiến ​​(không bắt buộc)

0Nó rất hữu ích cho mọi người.

Tìm kiếm

Xem các câu hỏi liên quan