LinuCレベル2 コンテナ 問13
コンテナ/Dockerコンテナとコンテナイメージの管理稼働中のコンテナwebの負荷を一時的に止めたいが、プロセスを終了させずメモリ上の状態も保ったまま、後から同じ状態で再開したい。適切な操作はどれか。
当サイトのオリジナル問題(LinuCレベル2の出題範囲「コンテナ」に対応。実際の試験問題ではありません)
- Adocker stop webで停止し、docker restart webで再開する
- Bdocker pause webで停止し、docker unpause webで再開する
- Cdocker commit webでイメージ化し、docker runで再開する
- Ddocker rm webで削除し、docker create webで作り直す
正解:B
解説
docker pauseは、cgroupsのfreezerの仕組みを使ってコンテナ内の全プロセスを凍結します。プロセスは終了せず、シグナルも送られないため、docker unpauseで凍結を解くとメモリ上の状態を保ったまま処理を再開します。docker stopはプロセスへSIGTERM(猶予後にSIGKILL)を送って終了させるため、再開時にはプロセスが最初から起動し直します。凍結中の状態はdocker psでPausedと表示されます。
選択肢ごとの解説
- A誤り。docker stopはプロセスを終了させるため、restartしてもメモリ上の状態は失われ、プロセスは起動し直します。
- B正しい。pauseはプロセスを終了させずに凍結し、unpauseで同じ状態から再開します。
- C誤り。commitはファイルシステムの変更をイメージにするもので、プロセスやメモリの状態は保存されません。
- D誤り。rmはコンテナを削除するため、プロセスの状態も書き込み層の変更も失われます。