LoginSignup
27
24

More than 5 years have passed since last update.

インターネット環境がないところでもdockerを使いたい

Posted at

インターネット接続が出来ない環境でdockerを使いたい

docker pullがno routeな環境でもdockerイメージを実行してコンテナを動作させたいぞ。

想定環境

  1. プロキシすらなくインターネットに繋がっていない = docker pullできない
  2. root権限はある
  3. ファイルの持ち込みは問題はない

このような環境でdockerを動かすのが目的です。

必要な環境

  • docker pull可能な環境

docker imageを取得して持ち込むファイルを作成するために必要

解決策

docker saveでdockerイメージをファイル化できる
docker loadでファイルからdockerイメージを読み込むことができる。
docker pullが出来ない環境でもdockerにdockerイメージとして読みこませたことで、該当イメージを自由に起動することができる。

コマンドで言うと、

docker save -o ファイル名 [imageId]
docker load -i ファイル名

の2コマンドを駆使して、dockerイメージを持ち込めば後は自由に使えたということです。

具体的にやったこと大まかな流れ

  1. dockerイメージをファイルに出力する
  2. ファイルを転送して持ち込む
  3. dockerイメージを読み込む
  4. repository/tagを修正する。
  5. 動作確認をする

やってみる

今回はjettyとpostgresqlの2つのイメージを対象としてやります。
また、インターネット環境のないサーバにもdockerはインストール済でサービスも起動しているものとします。

docker imageをファイルに出力する

事前にdocker pullして取得しておいたdockerイメージをdocker saveでtarファイルに出力します。

[root@localhost docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
jetty               9.3.10              4d05fbe5a8b7        4 days ago          321.5 MB
postgres            9.5.3               7ee9d2061970        4 weeks ago         275.2 MB

[root@localhost docker]# docker save -o jetty9.3.10.tar 4d05fbe5a8b7
[root@localhost docker]# docker save -o postgres953.tar 7ee9d2061970

jetty9.3.10.tarとpostgres953.tarを作成しました。

ファイルを転送して持ち込む

scpでファイルを持ち込みます。WinSCPなどのクライアントを利用してもいいです。

[root@localhost ~]# scp jetty9.3.10.tar seiketkm@192.0.2.1:~/
seiketkm@192.0.2.1's password:
jetty9.3.10.tar                                                                  100%  314MB  11.6MB/s   00:27
[root@localhost ~]# scp postgres953.tar seiketkm@192.0.2.1:~/
seiketkm@192.0.2.1's password:
postgres953.tar                                                                  100%  273MB  10.5MB/s   00:26

dockerイメージを読み込む

docker load でイメージをdockerにロードします。

[root@server ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
[root@server ~]# docker load -i /home/seiketkm/jetty9.3.10.tar
[root@server ~]# docker load -i /home/seiketkm/postgres953.tar
[root@server ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
<none>              <none>              4d05fbe5a8b7        4 days ago          321.5 MB
<none>              <none>              7ee9d2061970        4 weeks ago         275.2 MB

リポジトリとタグが<none>になってしまいましたが何かは読み込んだようです。

repository/tagを修正する

docker loadで読み込んだdockerイメージはREPOSITORYとTAGがないので管理が難しいです。
そこで読み込んだdockerイメージにdocker tag コマンドでリポジトリとタグを設定します。

[root@server ~]# docker tag 4d05fbe5a8b7 jetty:9.3.10
[root@server ~]# docker tag 7ee9d2061970 postgres:9.5.3
[root@server ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
jetty               9.3.10              4d05fbe5a8b7        4 days ago          321.5 MB
postgres            9.5.3               7ee9d2061970        4 weeks ago         275.2 MB

動作確認

jettyのコンテナを実行して動作を確認します。

[root@server ~]# docker run -d -p 10001:8080 --name hoge jetty:9.3.10
17101ed65991552a5754ff734dd9184ac7279b3287509e6865c75ff66d8e2e20
[root@server ~]# docker run -d -p 10002:8080 --name piyo jetty:9.3.10
643001d8e900117d39122c7efae8bf674cbf2250120d0337483a1f555eb6154d

jettyのコンテナを実行させました。
curlで動作確認します。

[root@server ~]# curl http://localhost:10001
<HTML>
<HEAD>
<TITLE>Error 404 - Not Found</TITLE>
<BODY>
<H2>Error 404 - Not Found.</H2>
No context on this server matched or handled this request.<BR>Contexts known to this server are: <ul></ul><hr><a href="http://eclipse.org/jetty"><img border=0 src="/favicon.ico"/></a>&nbsp;<a href="http://eclipse.org/jetty">Powered by Jetty:// 9.3.10.v20160621</a><hr/>

</BODY>
</HTML>
[root@server ~]# curl http://localhost:10002
<HTML>
<HEAD>
<TITLE>Error 404 - Not Found</TITLE>
<BODY>
<H2>Error 404 - Not Found.</H2>
No context on this server matched or handled this request.<BR>Contexts known to this server are: <ul></ul><hr><a href="http://eclipse.org/jetty"><img border=0 src="/favicon.ico"/></a>&nbsp;<a href="http://eclipse.org/jetty">Powered by Jetty:// 9.3.10.v20160621</a><hr/>

</BODY>
</HTML>

jetty動作してました。
次にpostgresqlが動作しているか確認。

[root@server ~]# docker run -d -p 65432:5432 --name hoge postgres:9.5.3
fa2c5570c6f81a0c1df510df15f5c340364b13a49093b543d7cbabf3a0e16933

[root@server ~]# psql -U postgres -h localhost -p 65432
psql (9.5.3)
"help" でヘルプを表示します.

postgres=#

うごいた。

まとめ

dockerイメージを頑張って持ち込めば、インターネットに接続してなくてもdockerの動作ができるぞ!

27
24
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
27
24