Docker compose sürüm 3'te Bellek ve CPU sınırı nasıl belirlenir


114

Sürüm 3'te belirtilen hizmetler için CPU ve bellek belirleyemiyorum.

Versiyon 2 ile servisler altında "mem_limit" & "cpu_shares" parametreleri ile sorunsuz çalışır. Ancak sürüm 3'ü kullanırken başarısız oluyor, onları konuşlandırma bölümünün altına koymak, sürü modunu kullanmıyorsam değerli görünmüyor.

Biri yardım edebilir mi?

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

Yanıtlar:


98

Konunun biraz eski olduğunu ve eski göründüğünü biliyorum, ancak yine de şu seçenekleri kullanabildim:

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

docker-compose 3.7 sürümünü kullanırken

Benim durumumda yardımcı olan şey şu komutu kullanmaktı:

docker-compose --compatibility up

--compatibility bayrak (belgelerden alınmıştır):

Ayarlanırsa, Compose, v3 dosyalarındaki dağıtım anahtarlarını Swarm dışındaki eşdeğerlerine dönüştürmeye çalışır.

Docker-compose dosyamı v2'ye geri döndürmek zorunda olmamamın harika olduğunu düşünüyorum.


4
Bu seçeneğin bir not alması ilginçtir : "Dönüştürme" en iyi çaba "girişimidir ve üretim dağıtımları için buna güvenilmemelidir."
bartolo-otrit

3
Bu, kötü tasarlanmış bir program olan docker-compose için harika bir düzeltmedir. docker-compose, olmadığı gibi olmak için çok uğraşıyor, bir üretim sınıfı orkestratörü: github.com/docker/compose/issues/4513
four43

1
Kapsayıcı RAM / CPU> Windows / Mac için Docker mevcutsa kaynak kısıtlamalarınız etkili olmayacaktır. Bunu değiştirmek için Docker for Mac / Windows tercihleri-> kaynaklarına gidin ve buna göre ayarlayın.
8bitme

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

Daha fazla: https://docs.docker.com/compose/compose-file/#resources

Size özel durumda:

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

Not:

  • Expose gerekli değildir, yığın ağınızda varsayılan olarak gösterilecektir.
  • Görüntüler önceden oluşturulmuş olmalıdır. V3 içinde derlemek mümkün değildir
  • "Yeniden başlatma" da kullanımdan kaldırılmıştır. Başarısızlık durumunda eylemle dağıtım altında yeniden başlatmayı kullanabilirsiniz
  • Bağımsız bir tek düğümlü "sürü" kullanabilirsiniz, v3 çoğu iyileştirme (tümü değilse) sürü içindir

Ayrıca Not: Swarm modundaki ağlar köprü oluşturmaz. Yalnızca dahili olarak bağlanmak istiyorsanız, ağa bağlamanız gerekir. 1) başka bir oluşturma dosyası içinde harici bir ağ belirtebilir veya ağı --attachable parametresiyle oluşturmanız gerekebilir (docker network create -d overlay My-Network --attachable) Aksi takdirde portu şu şekilde yayınlamanız gerekir:

ports:
  - 80:80

6
1. 3. sürümü kullanarak görüntü oluşturabiliyorum. <br/> 2. Görünüşe göre v3 için yaklaşım v2'den tamamen farklı, bir yükseltme gibi değil. <br/> 3. Dağıtma yalnızca sürü modunda çalışıyor gibi görünüyor. Uyarılar alıyorum - <br/> "UYARI: Bazı hizmetler (düğüm) yok sayılacak olan 'dağıtma' anahtarını kullanıyor. Compose, dağıtma yapılandırmasını desteklemiyor - docker stack deploysürüye dağıtmak için kullanın ."
vivekyad4v

23
@ viveky4d4v Compose formatı v3 doc'ta belirtildiği gibi, deploySwarm kullanmıyorsanız göz ardı edilir. Swarm kullanmadığınız sürece v3 formatını kullanmanız için gerçekten bir neden yok.
Dan Lowe

2
Yeni bir dağıtım başlatırsanız, v3 ile başlardım. Tek bir ev sahibim olsa bile. Böylece, daha sonra ölçekleme olanağına sahipsiniz ve kavramı anladıktan sonra ihtiyacınız olacak zamanla aynı miktarda olacak.
Berndinox

1
Merhaba @Connor, cevabı düzenlediğimde yaptığım tek şey bozuk bir bağlantıyı düzeltmekti. Sizin gibi ben de burada "yalnızca dahili" nin ne anlama geldiğini çözemiyorum.
Jay Taylor

3
@Berndinox docs.docker.com/v17.12/config/containers/resource_constraints/… memory-swapadresinde belirtilen seçeneği nasıl ayarlayacağınızı biliyor musunuz ? Nasıl ayarlanacağına dair bir örnek göremiyorum docker-compose.yml( docs.docker.com/v17.12/compose/compose-file/#resources ). Çok teşekkürler.
Ryan

50

Docker Compose , anahtarı desteklemiyordeploy . Yalnızca sürüm 3 YAML dosyanızı bir Docker Stack'te kullandığınızda dikkate alınır.

Bu mesaj, deployanahtarı docker-compose.ymldosyanıza eklediğinizde ve ardından çalıştırdığınızda yazdırılır.docker-compose up -d

UYARI: Bazı hizmetler (veritabanı), yok sayılacak olan 'dağıtma' anahtarını kullanır. Compose, 'dağıtma' yapılandırmasını desteklemez - docker stack deploybir sürüye dağıtmak için kullanın .

Belgeler ( https://docs.docker.com/compose/compose-file/#deploy ) şunları söylüyor:

Hizmetlerin dağıtımı ve çalıştırılmasıyla ilgili yapılandırmayı belirtin. Bu, yalnızca docker stack deploy ile bir sürüye konuşlandırılırken etkili olur ve docker-compose up ve docker-compose çalıştırması tarafından yok sayılır.


2
Özellikle dokümanlar, bunu yapmak istiyorsanız v2 kullanın veya sürü için konuşlandırın.
ic_fl2

Docker-compose 3.7 ile --compatibility bayrağını ekleyebilir ve 3.x dosyanızdaki dağıtım sınırlarını sürü dışı yürütmenize çevirebilirsiniz. ör. docker-compose - uyumluluk
David Thomas
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.