LoginSignup
3
0

More than 3 years have passed since last update.

Dockerホスト間でのイメージ受け渡し

Last updated at Posted at 2020-12-10

はじめに

会社内の小さな組織内でdockerイメージを共有したい場合、セキュリティ的な理由によりDockerHUBにアップロードできなく、わざわざ組織用のDockerレジストリを構築するか、USB経由などで受け渡しをする必要がある。
そもそもDockerホスト間でのイメージの受け渡しをした事がなかったので、今回それを試してみた。

実行環境

・VMインスタンス3台(GCP上)

【VM#1】
 ・Ubuntu 20.04 LTS
 ・docker 19.03

【VM#2】
 ・Ubuntu 18.04 LTS
 ・docker 19.03

【VM#3】
 ・Ubuntu 18.04 LTS
 ・docker 18.09

手順

VM#1~3にFileZillaを使って接続できる様に構築し、VM#1の中で作成したイメージをVM#2、3のdockerホストに送り、そのイメージからコンテナ構築が問題なくできるのか試してみる。。

1.VM環境の構築
2.VM#3に適当dockerイメージの作成
3.dockerファイルの受け渡し

1.VM環境の構築

VM#1~3にFileZillaから接続できる様にしておく

 【GCPのVMインスタンスにローカルPCからSSH接続】を参考に。
 ※手順4のとこでFileZillaを使って接続しようとすると、秘密鍵の変換(.ppk)が求められるが、変換して.ppkファイルを作成したら、それを秘密鍵に設定して接続できる。
また、鍵生成の時のユーザーは、Googleアカウントと同一にしておく。(イメージファイルをアップロードするタイミングでPermission Errorを防ぐため)

VM#1~3にdockerのインストール
 【Dockerコンテナ内のUbuntuではsystemctlは使えない】の手順1を参考に。

今回はインストールコマンドで、以下のコマンドによりバージョンを指定。

# VM#1へのdockerインストール
$ sudo apt install docker-ce=5:19.03.14~3-0~ubuntu-focal

# VM#2へのdockerインストール
$ sudo apt install docker-ce=5:19.03.14~3-0~ubuntu-bionic

# VM#3へのdockerインストール
$ sudo apt install docker-ce=5:18.09.9~3-0~ubuntu-bionic

※Ubuntu 20.04LTSではapt-cache madison docker-ceコマンドで18.09のバージョンが出てこない。

2.VM#3に適当なdockerイメージを作成

ベースイメージとしてUbuntuを取得

VM#3で実施
$ docker container run -it -d --name con1 ubuntu:18.04

コンテナに入り適当なソフトをインストール (今回はApache2をインストール)

コンテナに入る
$ docker attach con1
コンテナ内のコマンド
apt update
apt -y upgrade 
apt install -y apache2
コンテナ内のコマンド(コンテナから出る)
exit

変更を加えたコンテナをイメージ化する

$ docker commit con1 org-img:ver1

※コンテナが起動したままだとdocker commitコマンドができないため、動いているなら止める。

イメージの確認

$ docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED          SIZE
org-img      ver1      fec2182ec31c   59 seconds ago   198MB
ubuntu       18.04     2c047404e52d   2 weeks ago      63.3MB

一応イメージが動くか確認

$ docker container run -it -d -p 8080:80 --name temp org-img:ver1 apachectl -D FOREGROUND

3.dockerファイルの受け渡し

VM#3で作成したコンテナイメージをローカルPCに一旦保存

イメージファイルから.tarファイルを生成

$ docker save org-img:ver1 > ./org-img.tar

FileZilla でローカルPCに持ってくる。
 ※圧縮していないため、かなり容量が大きい...

VM#1、VM#2に上記.tarファイルを持っていきイメージ取得

今度は FileZilla でローカルPCの.tarファイルをVMにアップロード。

.tarファイルを入れたディレクトリに移動して下のコマンドを実行。

$ docker load < ./org-img.tar

ホストのイメージ一覧を確認すると、ちゃんとイメージが生成されている。

$ sudo docker image ls
REPOSITORY   TAG       IMAGE ID       CREATED       SIZE
org-img      ver1      fec2182ec31c   2 hours ago   198MB

VM#1、VM#2でそのイメージからコンテナを作成&起動させて使えるか確認

$ docker container run -it -d -p 8080:80 --name temp org-img:ver1 apachectl -D FOREGROUND

ホスト側の8080ポートを開放して、外部IP:8080にちゃんと接続できたため、問題なく受け渡しが完了した。

また、今回VM毎にUbuntuやDockerのバージョンは意図的に少し変えたが、これくらいなら何も問題なく起動できた。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0