Arista cEOSのDockerコンテナを他のDocker環境で使用する事を想定し、コンテナの保存方法を確認した。
今回は、Arista cEOSのDockerコンテナをDocker Desktopを動作させているPCのローカルディスクに一旦保存し、その後他のPCのDocker Desktopにて動作させる...といった事を想定。
コンテナをローカルのディスクに保存する方法は2つあるのだが、それぞれの方法で保存されたファイルの内容は異なっている。
当方の環境
ホストOS:Windows10 64bit版 / RAM: 8GB / CPU: Intel Core i5 M460 2.53GHz
作業用ディレクトリ:ホスト機のC:\Workspace
コンテナ:Arista Networks cEOS 4.24.2.1F 64bit版
Docker Desktop for Windows:2.4.0.0
Windows PowerShell 7.0.3
今回の前提条件
前回の記事にて導入されたArista cEOSが対象。
コンテナ移動先のDocker Desktop for WindowsとWindows PowerShellのバージョンは、自分の環境と同じ。
https://debslink.hatenadiary.jp/entry/20200906/1599399643 Docker Desktop for WindowsでArista cEOS
Export/Importによる保存と読み込み
Dockerコンテナをファイルシステムとして保存。アーカイブとして保存され、メタ情報は含まれない。
docker psコマンドを打ち、exportするDockerコンテナの情報を確認。
> docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a11e1dade1ac ceosimage:4.24.2.1F_1 "/sbin/init systemd.…" 3 minutes ago Up 2 minutes cEOS-lab-4.24.2.1F_1 > > docker images REPOSITORY TAG IMAGE ID CREATED SIZE ceosimage 4.24.2.1F_1 411e80d356a3 4 minutes ago 1.77GB >
docker exportコマンドを打ち、Arista cEOSコンテナをtar形式でアーカイブとして保存。
> docker export --output="C:\Users\User\Docker\vm-data\DockerDesktop\ceos-lab-4.24.2.1f-20201012-2355.tar" cEOS-lab-4.24.2.1F
上記で作成したアーカイブを他の端末(勿論、自分の端末でもOK)に持ち込み。
持ち込み先のDocker Desktopにて、上記で作成したアーカイブをimportコマンドで読み込み。
> docker import C:\Users\User\Docker\vm-data\DockerDesktop\ceos-lab-4.24.2.1f-20201012-2355.tar ceosimage:cEOS-lab-4.24.2.1F-20201012-2355
Dockerイメージの一覧を確認。上記にて読み込まれたArista cEOSのイメージが出力されている。
> docker images REPOSITORY TAG IMAGE ID CREATED SIZE ceosimage cEOS-lab-4.24.2.1F_1 2844af232da3 10 seconds ago 1.77GB >
docker createコマンドを打ち、上記にて読み込ませたイメージをコンテナ化する。
この後は前回と同じ流れで、docker network createでネットワーク作成、docker network connectでコンテナをネットワークに接続し、docker startでコンテナを立ち上げる。
> docker create --name=cEOS-lab-4.24.2.1F_1 --privileged -e INTFTYPE=eth -e ETBA=1 -e SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 -e CEOS=1 -e EOS_PLATFORM=ceoslab -e container=docker -i -t ceosimage:cEOS-lab-4.24.2.1F_1 /sbin/init systemd.setenv=INTFTYPE=eth systemd.setenv=ETBA=1 systemd.setenv=SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 systemd.setenv=CEOS=1 systemd.setenv=EOS_PLATFORM=ceoslab systemd.setenv=container=docker cf92a89ba7c0f3f8755c4abbe93ea6ced6e5044c6bf70897ca6e542c6c69d15b >
save/loadによる保存と読み込み
Googleで検索すると、docker loadまでは多くのサイト・ブログにて記載されている。
しかしそこから先の流れに関する記載はなかなか見つからず。試しに前回の初期構築時の長々としたコマンドを、runに置き換えたもので打ったら成功した。
まずはdocker commitコマンドでイメージの作成。
55266e136d62はイメージID、ceos-lab-4.24.2.1f-20201016-2340はイメージ名。
> docker commit 55266e136d62 ceos-lab-4.24.2.1f-20201011-2140
docker saveコマンドを打ち、作成したイメージをtar形式で保存。
> docker save ceos-lab-4.24.2.1f-20201011-2140 --output=C:\Users\User\Docker\vm-data\DockerDesktop\ceos-lab-4.24.2.1f-20201011-2140.tar
他の端末のDocker Desktopにて、上記で保存したイメージを解凍し読み込ませる。
> docker load --input="C:\Users\User\Docker\vm-data\DockerDesktop\ceos-lab-4.24.2.1f-20201011-2140.tar" c721a7ac8eae: Loading layer [==================================================>] 1.836GB/1.836GB c27e2b925526: Loading layer [==================================================>] 2.111MB/2.111MB Loaded image: ceos-lab-4.24.2.1f-20201011-2140:latest
Dockerイメージの一覧を確認。上記にて読み込まれたArista cEOSのイメージが出力されている。
> docker images REPOSITORY TAG IMAGE ID CREATED SIZE ceos-lab-4.24.2.1f-20201011-2140 latest b3c2204bbfd3 About an hour ago 1.77GB >
docker runコマンドを打ち、上記にて読み込まれたコンテナを起動させる。
どこかで見た、長々としたオプション。初回導入時(docker create)の際に投入したオプションとほぼ同じ。
- dオプションを付けると、PowerShellのウインドウをもう1枚立ち上げる必要は無くなる。
>docker run -d --name b3c2204bbfd3 --privileged -e INTFTYPE=eth -e ETBA=1 -e SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 -e CEOS=1 -e EOS_PLATFORM=ceoslab -e container=docker -i -t ceos-lab-4.24.2.1f-20201011-2140 /sbin/init systemd.setenv=INTFTYPE=eth systemd.setenv=ETBA=1 systemd.setenv=SKIP_ZEROTOUCH_BARRIER_IN_SYSDBINIT=1 systemd.setenv=CEOS=1 systemd.setenv=EOS_PLATFORM=ceoslab systemd.setenv=container=docker
今回の振り返り。
saveはDockerコンテナとして保存、レイヤの構造やメタ情報が含まれる。
exportはアーカイブとして保存。ファイルシステムが保存される。
単に自分の環境で立てたDockerコンテナを手を加えずそのまま他の環境に持ち出すだけなら、save/loadとexport/importのどちらでも良さそう。
一部のdockerコマンドにてGoogleで検索し引っかかった内容をそのまま実行する事が出来ない事も分かった。ファイルの保存先を指定するオプションの書き方。
上記の一連の流れでは他は無かったと思うが、Linux環境とWindowsのPowerShell環境との差異に要注意。
参照サイト
https://hodalog.com/how-to-save-and-load-docker-container/ dockerコンテナをバックアップ・保存・ロードしたりする方法 (HODALOG)
https://qiita.com/leomaro7/items/e5474e67a8e41536f0ff Docker save→load export→import どっち?(leomaro7さん)
https://debslink.hatenadiary.jp/entry/20200906/1599399643 前回の記事 (Docker Desktop for WindowsでArista cEOS)
https://www.arista.com/en/ Arista Networks
https://www.arista.com/jp/support/software-download cEOSのダウンロードサイト有り