Cách chỉ định giới hạn Bộ nhớ & CPU trong trình soạn thảo docker phiên bản 3


110

Tôi không thể chỉ định CPU và bộ nhớ cho các dịch vụ được chỉ định trong phiên bản 3.

Với phiên bản 2, nó hoạt động tốt với các thông số "mem_limit" & "cpu_shares" trong các dịch vụ. Nhưng nó không thành công khi sử dụng phiên bản 3, đặt chúng dưới phần triển khai có vẻ không xứng đáng trừ khi tôi đang sử dụng chế độ bầy đàn.

Ai đó có thể giúp đỡ?

version: "3"
services:
  node:
    build:
     context: .
      dockerfile: ./docker-build/Dockerfile.node
    restart: always
    environment:
      - VIRTUAL_HOST=localhost
    volumes:
      - logs:/app/out/
    expose:
      - 8083
    command: ["npm","start"]
    cap_drop:
      - NET_ADMIN
      - SYS_ADMIN

3
Cung cấp liên kết đến vấn đề có liên quan được tạo ra trong dự án Docker-soạn: github.com/docker/compose/issues/4513
Guillaume Husta

Câu trả lời:


90

Tôi biết chủ đề này hơi cũ và có vẻ đã cũ, nhưng dù sao thì tôi vẫn có thể sử dụng các tùy chọn sau:

    deploy:
      resources:
        limits:
          cpus: '0.001'
          memory: 50M

khi sử dụng phiên bản 3.7 của docker-comp

Điều gì đã giúp ích trong trường hợp của tôi, là sử dụng lệnh này:

docker-compose --compatibility up

--compatibility cờ là viết tắt của (lấy từ tài liệu):

Nếu được đặt, Soạn sẽ cố gắng chuyển đổi các khóa triển khai trong tệp v3 thành khóa tương đương không phải Swarm của chúng

Hãy nghĩ rằng điều đó thật tuyệt khi tôi không phải hoàn nguyên tệp soạn nhạc-docker của mình trở lại v2.


4
Thật thú vị khi tùy chọn này có một lưu ý : "Việc chuyển đổi là một nỗ lực" cố gắng hết sức "và không nên dựa vào để triển khai sản xuất."
bartolo-otrit,

3
Đây là một bản sửa lỗi tuyệt vời cho một chương trình được thiết kế kém, do docker-soạn. Docker-soạn đang cố gắng quá khó để có những gì nó không phải là một sản xuất lớp Orchestrator: github.com/docker/compose/issues/4513
four43

1
Các ràng buộc tài nguyên của bạn sẽ không có hiệu lực nếu vùng chứa RAM / CPU> Docker cho Windows / Mac có sẵn. Để thay đổi điều này, hãy chuyển đến tùy chọn Docker cho Mac / Windows-> tài nguyên và điều chỉnh cho phù hợp.
8bitme

58
deploy:
  resources:
    limits:
      cpus: '0.001'
      memory: 50M
    reservations:
      cpus: '0.0001'
      memory: 20M

Thêm: https://docs.docker.com/compose/compose-file/#resources

Trong trường hợp cụ thể của bạn:

version: "3"
services:
  node:
    image: USER/Your-Pre-Built-Image
    environment:
      - VIRTUAL_HOST=localhost
    volumes:
      - logs:/app/out/
    command: ["npm","start"]
    cap_drop:
      - NET_ADMIN
      - SYS_ADMIN
    deploy:
      resources:
        limits:
          cpus: '0.001'
          memory: 50M
        reservations:
          cpus: '0.0001'
          memory: 20M

volumes:
  - logs

networks:
  default:
    driver: overlay

Ghi chú:

  • Phơi sáng là không cần thiết, nó sẽ được hiển thị theo mặc định trên mạng ngăn xếp của bạn.
  • Hình ảnh phải được xây dựng trước. Không thể xây dựng trong phiên bản v3
  • "Khởi động lại" cũng không được dùng nữa. Bạn có thể sử dụng khởi động lại khi triển khai với hành động khi thất bại
  • Bạn có thể sử dụng một "bầy đàn" một nút độc lập, hầu hết các cải tiến v3 (nếu không phải tất cả) đều dành cho bầy đàn

Cũng Lưu ý: Các mạng ở chế độ Swarm không kết nối. Nếu bạn chỉ muốn kết nối nội bộ, bạn phải kết nối với mạng. Bạn có thể 1) chỉ định mạng bên ngoài trong một tệp soạn thảo khác hoặc phải tạo mạng với tham số --attachable (mạng docker tạo -d lớp phủ My-Network - có thể kết nối) Nếu không, bạn phải xuất bản cổng như sau:

ports:
  - 80:80

6
1. Tôi có thể tạo hình ảnh bằng phiên bản 3. <br/> 2. Có vẻ như cách tiếp cận cho v3 hoàn toàn khác với v2, không giống như một bản nâng cấp. <br/> 3. Triển khai dường như chỉ hoạt động ở chế độ bầy đàn. Tôi nhận được cảnh báo - <br/> "CẢNH BÁO:. Một số dịch vụ (node) sử dụng phím 'triển khai', mà sẽ bị bỏ qua Soạn không hỗ trợ triển khai cấu hình - sử dụng docker stack deploy. Để triển khai đến một đám"
vivekyad4v

23
@ viveky4d4v Do trạng thái doc của định dạng Soạn v3, deploysẽ bị bỏ qua nếu bạn không sử dụng Swarm. Thực sự không có lý do gì để sử dụng định dạng v3 trừ khi bạn đang sử dụng Swarm.
Dan Lowe

2
Nếu bắt đầu một triển khai mới, tôi sẽ bắt đầu với v3. Ngay cả khi tôi chỉ có một máy chủ. Vì vậy, bạn có khả năng mở rộng quy mô sau này và đó là khoảng thời gian bạn sẽ cần, một khi bạn hiểu khái niệm.
Berndinox

1
Xin chào @Connor, khi tôi chỉnh sửa câu trả lời, tất cả những gì tôi đã làm là sửa một liên kết bị hỏng. Giống như bạn, tôi không thể giải mã "chỉ nội bộ" ở đây nghĩa là gì.
Jay Taylor

3
@Berndinox Bạn có tình cờ biết cách đặt memory-swaptùy chọn được đề cập tại docs.docker.com/v17.12/config/containers/resource_constraints/… không? Tôi không thấy ví dụ về cách đặt nó trong docker-compose.yml( docs.docker.com/v17.12/compose/compose-file/#resources ). Cám ơn rất nhiều.
Ryan

49

Docker Soạn không hỗ trợ các deploytrọng điểm. Nó chỉ được tôn trọng khi bạn sử dụng tệp YAML phiên bản 3 của mình trong Docker Stack.

Thông báo này được in khi bạn thêm deploykhóa vào docker-compose.ymltệp của mình và sau đó chạydocker-compose up -d

CẢNH BÁO: Một số dịch vụ (cơ sở dữ liệu) sử dụng khóa 'triển khai', khóa này sẽ bị bỏ qua. Soạn không hỗ trợ cấu hình 'triển khai' - sử dụng docker stack deployđể triển khai cho một nhóm.

Tài liệu ( https://docs.docker.com/compose/compose-file/#deploy ) cho biết:

Chỉ định cấu hình liên quan đến việc triển khai và chạy các dịch vụ. Điều này chỉ có hiệu lực khi triển khai cho một nhóm với triển khai ngăn xếp docker và bị bỏ qua bởi docker-soạn lên và chạy docker-soạn.


2
Cụ thể, tài liệu cho biết nếu bạn muốn làm điều này, hãy sử dụng v2 hoặc triển khai để swarm.
ic_fl2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.