Cara menentukan batas Memori & CPU di docker compose versi 3

112

Saya tidak dapat menentukan CPU & memori untuk layanan yang ditentukan dalam versi 3.

Dengan versi 2 ini bekerja dengan baik dengan parameter "mem_limit" & "cpu_shares" di bawah layanan. Tetapi gagal saat menggunakan versi 3, menempatkan mereka di bawah bagian penerapan sepertinya tidak layak kecuali saya menggunakan mode swarm.

Adakah yang bisa membantu?

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
vivekyad4v
sumber
4
Berikan tautan ke masalah terkait yang dibuat dalam proyek tulis-buruh pelabuhan: github.com/docker/compose/issues/4513
Guillaume Husta

Jawaban:

91

Saya tahu topiknya agak lama dan tampak basi, tetapi saya tetap dapat menggunakan opsi ini:

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

saat menggunakan versi 3.7 dari docker-compose

Apa yang membantu dalam kasus saya, adalah menggunakan perintah ini:

docker-compose --compatibility up

--compatibility flag singkatan (diambil dari dokumentasi):

Jika disetel, Tulis akan mencoba mengonversi kunci penerapan dalam file v3 ke padanan non-Swarm

Anggap saja hebat, bahwa saya tidak perlu mengembalikan file docker-compose saya kembali ke v2.

Rigi
sumber
4
Menarik bahwa opsi ini memiliki catatan : "Konversi adalah upaya" upaya terbaik "dan tidak boleh diandalkan untuk penerapan produksi".
bartolo-otrit
3
Ini adalah perbaikan yang bagus untuk program yang dirancang dengan buruk, docker-compose. buruh pelabuhan berusaha terlalu keras untuk menjadi apa yang bukan, seorang orkestra tingkat produksi: github.com/docker/compose/issues/4513
four43
1
Batasan sumber daya Anda tidak akan berpengaruh jika penampung RAM / CPU> Docker untuk Windows / Mac telah tersedia. Untuk mengubahnya, pergi ke Docker untuk preferensi Mac / Windows-> sumber daya dan sesuaikan.
8bitme
59
deploy:
  resources:
    limits:
      cpus: '0.001'
      memory: 50M
    reservations:
      cpus: '0.0001'
      memory: 20M

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

Dalam kasus khusus Anda:

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

catatan:

  • Eksposur tidak diperlukan, ini akan diekspos secara default di jaringan tumpukan Anda.
  • Gambar harus dibuat sebelumnya. Membangun dalam v3 tidak dimungkinkan
  • "Mulai ulang" juga tidak digunakan lagi. Anda dapat menggunakan mulai ulang di bawah penerapan dengan tindakan saat gagal
  • Anda dapat menggunakan satu node "swarm" yang berdiri sendiri, v3 sebagian besar peningkatan (jika tidak semua) adalah untuk swarm

Juga Catatan: Jaringan dalam mode Swarm tidak menjembatani. Jika Anda hanya ingin menghubungkan secara internal, Anda harus terhubung ke jaringan. Anda dapat 1) menentukan jaringan eksternal dalam file tulis lainnya, atau harus membuat jaringan dengan parameter --attachable (jaringan buruh pelabuhan buat -d overlay Jaringan-Saya --attachable) Jika tidak, Anda harus menerbitkan porta seperti ini:

ports:
  - 80:80
Berndinox
sumber
6
1. Saya dapat membuat gambar menggunakan versi 3. <br/> 2. Sepertinya pendekatan untuk v3 sama sekali berbeda dari v2, tidak seperti peningkatan versi. <br/> 3. Deploy tampaknya hanya berfungsi dalam mode swarm. Saya mendapatkan peringatan - <br/> "PERINGATAN: Beberapa layanan (node) menggunakan kunci 'terapkan', yang akan diabaikan. Tulis tidak mendukung konfigurasi docker stack deploy
penerapan
23
@ viveky4d4v Seperti yang dinyatakan dalam format Tulis v3 doc, deploydiabaikan jika Anda tidak menggunakan Swarm. Sebenarnya tidak ada alasan untuk menggunakan format v3 kecuali Anda menggunakan Swarm.
Dan Lowe
2
Jika memulai penerapan baru, saya akan mulai dengan v3. Bahkan jika saya hanya memiliki satu host. Jadi, Anda mendapatkan kemungkinan untuk mengukur nanti dan itu jumlah waktu yang sama yang Anda perlukan, setelah Anda memahami konsepnya.
Berndinox
1
Hai @Connor, ketika saya mengedit jawaban yang saya lakukan hanyalah memperbaiki tautan yang rusak. Seperti Anda, saya tidak dapat menguraikan apa yang dimaksud "hanya secara internal" di sini.
Jay Taylor
3
@Berndinox Apakah Anda kebetulan mengetahui cara menyetel memory-swapopsi yang disebutkan di docs.docker.com/v17.12/config/containers/resource_constraints/… ? Saya tidak melihat contoh cara menyetelnya di docker-compose.yml( docs.docker.com/v17.12/compose/compose-file/#resources ). Terima kasih banyak.
Ryan
49

Docker Compose tidak mendukung itu deploykunci. Ini hanya diterapkan ketika Anda menggunakan file YAML versi 3 Anda di Docker Stack.

Pesan ini dicetak saat Anda menambahkan deploykunci ke docker-compose.ymlfile Anda dan kemudian jalankandocker-compose up -d

PERINGATAN: Beberapa layanan (database) menggunakan kunci 'deploy', yang akan diabaikan. Compose tidak mendukung konfigurasi 'deploy' - gunakan docker stack deployuntuk menyebarkan ke swarm.

Dokumentasi ( https://docs.docker.com/compose/compose-file/#deploy ) mengatakan:

Tentukan konfigurasi yang terkait dengan penerapan dan menjalankan layanan. Ini hanya berlaku saat menerapkan ke swarm dengan penerapan tumpukan buruh pelabuhan, dan diabaikan oleh operasi penulisan galangan dan penulisan galat.

gergaji303
sumber
2
Secara khusus dokumen mengatakan jika Anda ingin melakukan ini, gunakan v2 atau terapkan ke swarm.
ic_fl2