2014-06-24 18 views
34

Ho una macchina host fisica con Ubuntu 14.04 in esecuzione su di esso. Ha una larghezza di banda di 100G su disco e 100M. Ho installato Docker e lanciato 10 contenitori. Vorrei limitare ogni contenitore a un massimo di 10G di larghezza di banda e 10M di larghezza di banda.Limitare la dimensione del disco e la larghezza di banda di un contenitore Docker

Dopo aver esaminato i documenti ufficiali e la ricerca su Internet, non riesco ancora a trovare un modo per allocare il disco di dimensione specificato e la larghezza di banda di rete in un contenitore.

Penso che questo potrebbe non essere possibile nel Docker direttamente, forse dobbiamo bypassare Docker. Questo significa che dovremmo usare qualcosa di "sottostante", come LXC o Cgroup? Qualcuno può dare qualche suggerimento?


Edit:

@Mbarthelemy, il suo suggerimento sembra funzionare, ma ho ancora alcune domande su disco:

1) E 'possibile allocare altro formato (come 20G, 30G ecc) a ciascun contenitore? Hai detto che è hardcoded in Docker quindi sembra impossibile.

2) uso il comando per iniziare il demone Docker e contenitore:

docker -d -s devicemapper 
docker run -i -t training/webapp /bin/bash 

poi uso df -h per visualizzare l'utilizzo del disco, dà il seguente risultato:

Filesystem     Size Used Avail Use% Mounted on 
/dev/mapper/docker-longid 9.8G 276M 9.0G 3%/
/dev/mapper/Chris--vg-root 27G 5.5G 20G 22% /etc/hosts 

da quanto sopra penso che il disco massimo che un contenitore può utilizzare sia ancora più grande di 10G, cosa ne pensi ?

risposta

24

Non credo sia possibile ora utilizzando le impostazioni predefinite di Docker. Ecco cosa proverò.

  • Informazioni sull'utilizzo del disco: è possibile indicare a Docker di utilizzare il backend di archiviazione DeviceMapper anziché AuFS. In questo modo ogni contenitore verrebbe eseguito su un dispositivo a blocchi (Devicemapper dm-thin target) limitato a 10 GB (questo è un default Docker, fortunatamente corrisponde alle tue esigenze!).

    Secondo this link, sembra che le ultime versioni di Docker ora accedano alle opzioni avanzate di back-end di archiviazione. Utilizzando il backend devicemapper, , ora è possibile modificare l'opzione di dimensioni rootfs del contenitore predefinito utilizzando --storage-opt dm.basesize=20G (applicabile a qualsiasi contenitore appena creato).

    Per modificare il back-end di archiviazione: utilizzare l'opzione Docker --storage-driver=devicemapper. Tieni presente che i tuoi contenitori precedenti non verranno più visualizzati da Docker dopo la modifica.

  • Informazioni sulla larghezza di banda della rete: è possibile indicare a Docker di utilizzare LXC sotto i cofani: utilizzare l'opzione -e lxc.

    Quindi, creare i contenitori con una direttiva LXC personalizzato di metterli in una classe traffico:

    docker run --lxc-conf="lxc.cgroup.net_cls.classid = 0x00100001" your/image /bin/stuff

    Controllare il official documentation su come applicare i limiti di larghezza di banda a questa classe. Non l'ho mai provato da solo (il mio setup utilizza un bridge OpenVswitch personalizzato e VLAN per il networking, quindi la limitazione della larghezza di banda è diversa e un po 'più semplice), ma penso che dovrai creare e configurare una classe diversa.

Nota: le opzioni --storage-driver=devicemapper e -e lxc sono per il Docker daemon, non per il cliente Docker si sta utilizzando durante l'esecuzione docker run ........

+0

mbarthelemy, io integro la mia domanda sul disco, puoi aiutare a esaminare? –

+0

Il volume di root di FS è il primo ('| 9.8G | 276M | 9.0G | 3% | /'). La dimensione è, come previsto, 10 GB. L'altra linea è un bind-mount. – mbarthelemy

+0

il tuo suggerimento è un buon modo per limitare le dimensioni del disco. Ma penso che ci sia un altro approccio per implementarlo. Decido di aggiungere un altro utente al gruppo specificato nel contenitore, quindi limito la dimensione del disco di quel gruppo usando "Quota" in Linux. Riguardo la larghezza di banda, è troppo complesso per me, sto ancora provando, forse ti chiederò qualcosa dopo. –

3

Nuova rilascia la versione ha --device-read-bps e --device-write-bps.

È possibile utilizzare finestra mobile run --device-read-bps =/dev/sda: 10MB

Maggiori informazioni qui: https://blog.docker.com/2016/02/docker-1-10/

+1

Si noti che questo è solo per i dispositivi a blocchi. Il traffico dell'interfaccia non è stato aggiunto. [4763] (https://github.com/docker/docker/issues/4763) è ancora aperto – Matt

1

Se si ha accesso ai contenitori che è possibile utilizzare per tc controllo della larghezza di banda al loro interno.

esempio: nello script punto di ingresso è possibile aggiungere: tc qdisc add dev eth0 root tbf rate 240kbit burst 300kbit latency 50ms

di avere una larghezza di banda di 240kbps, 300kbps scoppio e ms di latenza 50. È inoltre necessario passare il comando --cap-add = NET_ADMIN al comando docker run se non si eseguono i contenitori come root.

Problemi correlati