Dockerセットアップ 第7弾
CPU,メモリーの利用制限の設定
1.GoogleCloudのIaas環境の確認
- 現在、稼働中のIaas環境のスペックは以下の通り
MachineType:g1-small Cpu:1core Memory:1.7GB
2.現在のdockerのリソース状況を確認
- 以下のコマンドにて確認する。
- 実行後のキャンセルは
Ctrl + shift + c
を押下し停止する。
$ sudo docker stats
#実行結果は以下の通り CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS d25975f7bb09 growi_app_1 0.24% 75.91MiB / 1.654GiB 4.48% 215kB / 1 64kB 0B / 0B 39 bf48e2e6e690 growi_mongo_1 0.54% 48.38MiB / 1.654GiB 2.86% 160kB / 2 10kB 0B / 0B 31 80dd8db700d6 growi_elasticsearch_1 0.47% 487.9MiB / 1.654GiB 28.80% 698B / 42 B 0B / 0B 39 cab35b40eda7 yml_node_1 0.00% 6.27MiB / 1.654GiB 0.37% 1.13kB / 0B 0B / 0B 7 2d99643f9b9f docker-knowledge 0.15% 247MiB / 1.654GiB 14.58% 179kB / 1 87kB 0B / 0B 46 86e5b162d74f postgres 0.00% 6.906MiB / 1.654GiB 0.41% 129kB / 1 59kB 0B / 0B 9 c28a409a997e reverse-proxy 0.00% 1.48MiB / 1.654GiB 0.09% 75.7kB / 77.3kB 0B / 0B 2
実行停止は以下もコマンドで
Ctrl + shift + c
3.各コンテナへの割り振りの設定
- 各ミドルウェアのコンテナに対して、CpuとMemoryの割り振りを行う
MiddleWareName | Cpu | Memory |
---|---|---|
docker-knowlege | 1 | 500MB |
postgres | 0.50 | 100MB |
reverse-proxy | 1 | 500MB |
3-1.docker-compose.ymlファイルの設定を変更する。
- 以下の
docker-compose.yml
を元に準備する。
version: '3' #swarm-mode対応http://docs.docker.jp/engine/swarm/index.html services: app: image: koda/docker-knowledge:latest #コンテナ名を明示的に指定する container_name: docker-knowledge volumes: - /usr/local/etc/knowledge/webapps:/usr/local/tomcat/webapps ports: - 8080:8080 restart: always tty: true #dbが起動してからappが起動する. deploy: replicas: 1 # 起動するプロセスの数 resources: limits: cpus: '1' memory: 500M depends_on: - db proxy: image: nginx:latest #コンテナ名を明示的に指定する container_name: reverse-proxy volumes: - /usr/local/etc/knowledge/html:/usr/share/nginx/html - /usr/local/etc/knowledge/nginx/conf.d/:/etc/nginx/conf.d ports: - 80:80 restart: always tty: true deploy: replicas: 1 # 起動するプロセスの数 resources: limits: cpus: '0.50' memory: 100M db: image: postgres:latest #コンテナ名を明示的に指定する container_name: postgres #コンテナの環境変数を追加する。 #build オプションと合わせて指定すると、build中は enviroment で指定した #環境変数は見えないことに注意。 #build に変数を渡す場合は args オプションで指定する。 environment: - POSTGRES_USER=postgres - POSTGRES_PASSWORD=admin123 - POSTGRES_DB=docker_knowledge volumes: - /usr/local/etc/knowledge/postgres/data:/var/lib/postgresql/data restart: always tty: true deploy: replicas: 1 # 起動するプロセスの resources: limits: cpus: '1' memory: 500M
3-2.deployについて
- 以下の指定は
サービスの定義
を示します。 - サービスの定義とは、そのサービスを起動する各コンテナーに適用される設定を行うことです
deploy: replicas: 1 # 起動するプロセスの数 resources: limits: cpus: '1' memory: 500M
3-2.replicasについて
- サービスを replicated(デフォルト)に設定しているときに、起動させるコンテナー数を指定します。
replicas: 1
3-3.resourcesについて
- リソースの制約を設定します。
resources:
3-4.CpuとMemory制限の設定
- 以下の記載で利用可能なプロセス時間を設定可能
- 設定内容は以下の通り
項目 | ハードウェア名 | 設定値 | 備考 |
---|---|---|---|
利用可能なプロセス時間 | Cpu | 1 | シングルコアの100% |
メモリ利用 | Memory | 500M |
resources: limits: cpus: '1' memory: 500M
利用する領域の予約もできる。
- 以下のように設定を追記すると可能
- ホストのメモリに余裕がある時はは制限はかからず、他に使用している時に制限が掛かる。
- 利用予約の設定は以下の通り
項目 | ハードウェア名 | 設定値 | 備考 |
---|---|---|---|
最低利用可能なプロセス時間 | Cpu | 0.25 | 常時利用可能な領域 |
最低メモリ | Memory | 20M | 常時利用可能な領域 |
resources: limits: cpus: '1' memory: 500M #以下の設定が該当の箇所になります。 reservations: cpus: '0.25' memory: 20M
4.Swarm(スウォーム)モード利用でコンテを起動させる。
- 予めにSwarm クラスタを初期化させる
docker swarm init
4-1.Swarmモードにてコンテナを起動させる
deploy
を設定した場合は以下のコマンドにてSwarm(スウォーム)
モードを利用する必要がある
sudo docker stack deploy -c <ymlファイル名> <アプリケーション名(任意の名前 なんでも可)> #下記、起動例になります。 sudo docker stack deploy -c docker-compose-proxy-posgre.yml proxy-posgre
4-2.Swarmモードにてコンテナを更新し起動させる
docker-compose.yml
ファイルを更新した際は、起動時と同じく以下のコマンドを実行すれば、更新され起動される。
sudo docker stack deploy -c <ymlファイル名> <起動時に設定したアプリケーション名> #下記、更新後の起動例になります。 sudo docker stack deploy -c docker-compose-proxy-posgre.yml proxy-posgre
4-5.アプリケーションとSwarmの解体(停止)
アプリケーションを削除(remove)
しますが、1つの swarm ノードは起動および実行したまま
になりますので、注意してください。
sudo docker stack rm <起動時に設定したアプリケーション名> #下記、停止例になります。 sudo docker stack rm proxy-posgre
4-6.Swarmのクラスタ停止
- Swarm (クラスタ)を停止するには以下のコマンドを実行
docker swarm leave --force
4-6.アプリケーション名の調べ方
- アプリケーション名の一覧を確認する場合は以下のコマンドを実行
sudo docker stack ls
#実行結果は下記の通り NAME SERVICES ORCHESTRATOR proxy-posgre 4 Swarm
swarm起動ではない場合は
- docker-composeのversionを下げて
2
を指定し 以下のコマンドを利用すると行えます。
- 一例になります。
cpu_count: 2 cpu_percent: 50 cpus: 0.5 cpu_shares: 73 cpu_quota: 50000 cpu_period: 20ms cpuset: 0,1 user: postgresql working_dir: /code domainname: foo.com hostname: foo ipc: host mac_address: 02:42:ac:11:65:43 mem_limit: 1000000000 memswap_limit: 2000000000 mem_reservation: 512m \
5.起動後の確認
5-1.起動中のコンテナの確認
- 以下のコマンドにて起動しているコンテナを一覧表示
docker service ls
#実行結果は下記の通り ID NAME MODE REPLICAS IMAGE PORTS uw79m4zr9pgw proxy-posgre_app replicated 1/1 koda/docker-knowledge:latest *:8080->8080/tcp 332hcv6qzxvc proxy-posgre_backup replicated 0/1 backup-service:latest odhal10l3xpe proxy-posgre_db replicated 1/1 postgres:latest tidwvuer0wu1 proxy-posgre_proxy replicated 1/1 nginx:latest *:80->80/tcp
5-2.起動中のコンテナ数の確認
- 以下のコマンドにて起動しているコンテナを一覧表示
sudo docker stack ps <起動時に設定したアプリケーション名>
#実行結果は下記の通り PORTS w5crmrcb0bs0 proxy-posgre_backup.1 backup-service:latest project Ready Rejected less than a second ago "No such image: backup-service…" rge95ljgfnxn \_ proxy-posgre_backup.1 backup-service:latest project Shutdown Rejected 5 seconds ago "No such image: backup-service…" pv3g850wzznh \_ proxy-posgre_backup.1 backup-service:latest project Shutdown Rejected 10 seconds ago "No such image: backup-service…" lw0e4uieya7i \_ proxy-posgre_backup.1 backup-service:latest project Shutdown Rejected 15 seconds ago "No such image: backup-service…" bw1xxjw8iosd \_ proxy-posgre_backup.1 backup-service:latest project Shutdown Rejected 20 seconds ago "No such image: backup-service…" u1cgs6dn9voc proxy-posgre_db.1 postgres:latest project Running Running 31 hours ago pvf4wg7nyxzb \_ proxy-posgre_db.1 postgres:latest project Shutdown Failed 31 hours ago "starting container failed: fa…" 70b2olguiis3 proxy-posgre_app.1 koda/docker-knowledge:latest project Running Running 31 hours ago lw1wmcjoiwc9 proxy-posgre_proxy.1 nginx:latest project Running Running 31 hours ago w51pp66yorc7 proxy-posgre_db.1 postgres:latest project Shutdown Shutdown 31 hours ago i5zkppmksh7n proxy-posgre_proxy.1 nginx:latest project Shutdown Failed 31 hours ago "error while removing network:…" qw469yr4xp8o proxy-posgre_app.1 koda/docker-knowledge:latest project Shutdown Failed 31 hours ago "error while removing network:…"
参考サイト
【公式】Docker-Compose_ver.3 リファレンス
Docker (ファイル/CPU/メモリ/プロセス) のリソースを制限する方法まとめ