runCをインストールして,Dockerコンテナのスナップショットを取る

スポンサード リンク

CRIUを使ってコンテナのチェックポイントを作成したい。 ここでは,docker engineではなくruncに統合されているcheckpointサブコマンドを使って コンテナのチェックポイントを作成する方法を示す。

環境

Ubuntu 16.04@virtualbox

runCのコンパイルとインストール

apt-get install golang golang-github-seccomp-libseccomp-golang-dev
git clone https://github.com/opencontainers/runc.git
cd runc
make
make install

dockerのインストール

runCの動作確認に使うdockerをインストールする。

apt-get install docker.io
usermod -aG docker ubuntu

runCの動作確認

runCのコンテナを作成して動作させる。 以下の例では, ubuntu:14.04sh が動作する。 なお, <CONTAINERID> は適当な数字でよい。

mkdir -p ~/ubuntu/rootfs
cd ~/ubuntu
docker export $(docker create ubuntu:14.04) | tar -C rootfs -xvf -
runc spec
sudo runc run <CONTAINERID>

CRIUでcheckpointを取る

CRIUをインストールする。 ここではaptでCRIU Ver2.0をインストールした。

apt-get install criu

次にチェックポイントの動作確認のため,config.jsonを書き換える。 CRIUでチェックポイントを取るには以下の設定が必須である。

"root": { "readonly": false }
"process":{ "terminal": false }

チェックポイントの動作確認用にカウントアップを指定する。

"args": [
               "/bin/bash",
               "-c",
               " for i in `seq 1 10000` ; do echo $i ; sleep 1s ; done"
       ]

実際にチェックポイント・リストアを確認する。

sudo runc run <CONTAINERID>

# 別のシェルで
sudo runc checkpoint <CONTAINERID>
sudo runc restore <CONTAINERID>

カウントアップが再開されれば,めでたく終了である。

Comments !

social