はじめに シェル芸オンラインジャッジというウェブサイトを開発しています。 今回はユーザが入力したコマンドを実行するDockerコンテナにメモリやCPUなどのリソースの制限を設定しました。
シェル芸オンラインジャッジ
設定内容 設定前 Pythonスクリプトからコンテナを実行しています。 元々はネットワークの制限だけ設定していました。
container = self.client.containers.run( self.image_id, detach=True, command="sleep 60", ipc_mode="none", network_mode="none", ) 設定後 メモリ、CPU、プロセス数、権限、データサイズの制限を設定しました。
container = self.client.containers.run( self.image_id, detach=True, command="sleep 60", ipc_mode="none", network_mode="none", mem_limit="512m", # メモリ制限 memswap_limit="512m", # スワップ制限 nano_cpus=500000000, # CPU使用率制限 (0.5 CPU) pids_limit=50, # 最大プロセス数制限 cap_drop=["ALL"], # 権限制限 tmpfs={"/media": "size=100M"}, ulimits=[ # fsize (file size): 1プロセスが作成できる最大ファイルサイズ(バイト単位) docker.types.Ulimit(name="fsize", soft=50000000, hard=50000000) ], ) 設定の動作確認 設定が正しく行われているか確認してみます。
...