(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【Docker】コンテナイメージをアイランド環境に持ち込み起動する

スポンサーリンク

はじめに

インターネットに接続していない環境、いわゆるアイランド環境にてコンテナイメージを展開する方法を説明します。

流れとしてはインターネットに接続している環境にてイメージをpullし、そのイメージをtarに固めて持ち込んで利用します。

環境情報

  • Debian 9 (コンテナイメージをpullする環境)
  • Windows 10(アイランド環境を想定した環境)

コンテナイメージを取得する(Debian側)

redisのイメージをアイランド環境に持ち込むとします。

例えばdocker-compose用のファイルに以下のように記載されていれば

    redis:
        image: redis:5.0.7

初期起動時に以下のようにダウンロードが始まります。

Pulling redis (redis:5.0.7)...
5.0.7: Pulling from library/redis
68ced04f60ab: Pull complete
7ecc253967df: Pull complete
765957bf98d4: Pull complete
52f16772e1ca: Pull complete
2e43ba99c3f3: Pull complete
d95576c71392: Pull complete
Digest: sha256:938ee5bfba605cc85f9f52ff95024e9a24cf5511ba6f1cbc68ec9d91a0432125
Status: Downloaded newer image for redis:5.0.7

確かにイメージがローカルに保存されました。

# docker image ls
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
....
redis                          5.0.7               7eed8df88d3b        2 months ago        98.2MB
...

ここでdocker saveによってイメージをtarにします。

# docker save redis > redis.tar

ちなみに、イメージはdocker serach redisと打てば複数のリポジトリのイメージが見つかることも覚えておきたいです。

コンテナイメージを読み込む(Windows側)

上記ファイルをアイランド環境に配置します。確かに外部と通信できません。

$ ping 8.8.8.8
8.8.8.8 に ping を送信しています 32 バイトのデータ:
ping: 転送に失敗しました。一般エラーです。

その環境にてdocker loadにて読み込めば

 docker load -i .\redis.tar
f2cb0ecef392: Loading layer [==================================================>]  72.48MB/72.48MB                                                                          56f1f103e9b9: Loading layer [==================================================>]  338.4kB/338.4kB                                                                          aaa520a04939: Loading layer [==================================================>]  4.082MB/4.082MB                                                                          094202232094: Loading layer [==================================================>]  24.67MB/24.67MB                                                                          1904c3c5301e: Loading layer [==================================================>]  1.536kB/1.536kB                                                                          97dd072b7669: Loading layer [==================================================>]  3.584kB/3.584kB                                                                          Loaded image: redis:5.0.7

ローカルに保存できました。イメージIDも同じです。

> docker image ls redis
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
redis               5.0.7               7eed8df88d3b        2 months ago        98.2MB

タグ名まで含めて指定すれば以下のように起動が完了します。

> docker run redis:5.0.7
 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
 # Redis version=5.0.7, bits=64, commit=00000000, modified=0, pid=1, just started
 # Warning: no config file specified, using the default config. In order to specify a config file use redis-server /path/to/redis.conf
 * Running mode=standalone, port=6379.
 # WARNING: The TCP backlog setting of 511 cannot be enforced because /proc/sys/net/core/somaxconn is set to the lower value of 128.
 # Server initialized
 # WARNING you have Transparent Huge Pages (THP) support enabled in your kernel. This will create latency and memory usage issues with Redis. To fix this issue run the command 'echo never > /sys/kernel/mm/transparent_hugepage/enabled' as root, and add it to your /etc/rc.local in order to retain the setting after a reboot. Redis must be restarted after THP is disabled.
 * Ready to accept connections

ちなみにタグ名を指定しないと外部に取得しにいくためエラーとなります。

> docker run redis
Unable to find image 'redis:latest' locally
C:\Program Files\Docker\Docker\resources\bin\docker.exe: Error response from daemon: Get https://registry-1.docker.io/v2/: dial tcp: lookup registry-1.docker.io on ...: no such host.

終わりに

社内システムのようにインターネットに接続していない環境でもDockerイメージを利用してアプリケーションを利用したい際には必須のテクニックなので、覚えておくと役立つと思います。

以上、ご参考になれば幸いです。