docker importコマンドの使い方(実例付)CE対応


 docker importコマンドの使い方を解説します。Docker CE ver17.12.1に対応してます。

 このコマンドは、tar形式のファイルシステムイメージからDockerイメージを作成することが可能です。

 import元のファイルは、http経由のリモートファイルもサポートされてます。

 それでは以下で詳細に解説いたします。

 

docker importコマンドのフォーマットとオプション

フォーマット

docker import [ファイル|URL|-] [リポジトリ[:タグ]]

 

主なオプション一覧

-c, --change=""
ファイルシステムイメージの読み込み時にDockerfileの命令を追加指定する

-m, --message=""
ファイルシステムイメージの読み込み時にコミットメッセージを設定する

■ 本記事の目次に戻る ■

docker importコマンドの主な使い方

 

tarファイルの内容を基にDockerイメージを作成する

 docker importコマンドは、コンテナのベースとなるファイルシステムイメージのtar形式のアーカイブファイルを、Dockerイメージとして取り込むことができます。

 tar形式の他に、.tar.gz、.tgz、.bzip、.tar.xz、.txzの各形式のimportが可能です。

 ファイルシステムイメージのアーカイブファイルは、docker exportコマンドを利用することで作成することが可能です。(docker exportコマンドについては、別記事「docker exportコマンドの使い方」をご参照ください)

 以下の例では、あるコンテナの内容を、docker exportコマンドで出力したアーカイブファイルtestvm.tarを使用します。

 アーカイブファイルtestvm.tarを基にDockerイメージを作成するには、以下のコマンドを実行します。作成するDockerイメージの名前は「testvm-new:v1.0」とします。

$ docker import testvm.tar testvm-new:v1.0

 Dockerイメージが作成されていることを確認します。

$ docker images
REPOSITORY    TAG   IMAGE ID      CREATED           SIZE
testvm-new    v1.0  bfaff8107aab  30 seconds ago    196.8 MB

■ 本記事の目次に戻る ■

Dockerイメージ作成時にコミットメッセージ(コメント)を設定する

 tarアーカイブファイルをDockerイメージとして取り込む際に、コミットメッセージ(コメント)を設定するには、「-m」オプションを使用して、docker importコマンドを実行します。

 以下の例では、コミットメッセージとして「This is testvm image.」を設定してます。

$ docker import -m "This is testvm image." testvm.tar testvm-new:v2.0

 Dockerイメージが作成されていることを確認します。

$ docker images
REPOSITORY    TAG   IMAGE ID      CREATED         SIZE
testvm-new    v2.0  709b97c7a3b3  34 minutes ago  196.8 MB

 docker inspectコマンドにて、Dockerイメージの設定情報を確認します。

$ docker inspect testvm-new:v2.0

 対象イメージの詳細情報が大量に出力されますが、目的の部分のみ抜粋して掲載します。

        (略)
      "Comment": "This is testvm image.",
        (略)

 docker importコマンドで設定したコミットメッセージを確認することができました。

■ 本記事の目次に戻る ■

Dockerイメージを作成する際にDockerfile用の命令を設定する

 通常、Dockerイメージには様々な設定情報が格納されてます。例えば、コンテナ起動時に実行するコマンド(CMD、ENTRYPOINT)、コンテナ外に公開するポート(EXPOSE)、コンテナ内に設定する環境変数(ENV)、など他にも多数あります。(カッコ内はDockerfile内で指定する命令です)

 Docker importコマンドは、「-c」オプションを使用して、指定したDockerfile用の命令を設定したDockerイメージを作成することができます。

 試しに、以下のコマンドで、Dockerイメージを作成する際に、VOLUME設定とEXPOSE設定の追加を行いたいと思います。

$ docker import -c "VOLUME /opt" -c "EXPOSE 8080" testvm.tar testvm-new:v3.0

 Dockerイメージが作成されていることを確認します。

$ docker images
REPOSITORY   TAG   IMAGE ID      CREATED         SIZE
testvm-new   v3.0  32cbf5b02d57  4 minutes ago   196.8 MB

 docker inspectコマンドにて、Dockerイメージの設定情報を確認します。

$ docker inspect testvm-new:v3.0

 対象イメージの詳細情報が大量に出力されますが、目的の部分のみ抜粋して掲載します。

      (略)
     "ExposedPorts": {
      "8080/tcp": {}
      },
      (略)
     "Volumes": {
      "/opt": {}
      },
     (略)

 先ほど指定したEXPOSEとVOLUMEの設定内容が反映されていることが確認できました。

 このDockerイメージを使用してコンテナを起動した場合、コンテナ内の8080番ポートが公開され、コンテナ内の/optがDockerホスト上のファイルシステムと接続されます。

■ 本記事の目次に戻る ■

リモートにあるアーカイブファイルをhttp経由で受け取りDockerイメージを作成する

 Webサーバmyweb.com上にあるtestvm.tarファイルを、URL指定でimportしてみます。

$ docker import http://myweb.com/testvm.tar testvm:v10.0

※myweb.comは私のローカルネットワーク上のWebサーバの1つです。外部からは接続できません。

 以下のように、webサーバからアーカイブファイルがダウンロードされて、Dockerイメージが作成されました。

Downloading from http://myweb.com/testvm.tar
sha256:3876b4203339a7e8669473e6a2a39ad97df4f76ddef53b3a737d8952329930f5

 docker imagesコマンドで確認してみます。

$ docker images
REPOSITORY    TAG    IMAGE ID      CREATED         SIZE
testvm        v10.0  3876b4203339  5 seconds ago   196.8 MB

 作成されていることが確認できました。

■ 本記事の目次に戻る ■

標準入力からアーカイブファイルの内容を受け取りDockerイメージを作成する

 docker importコマンドのimportファイルを指定する部分に「-」を指定した場合、アーカイブファイルの情報を標準入力から受け取ることができます。

 以下は、catコマンドで出力したtestvm.tarの内容を、docker importコマンドで受け取る場合の例になります。

$ cat testvm.tar | docker import - testvm:v11.0

 docker imagesコマンドで確認します。

$ docker images
REPOSITORY    TAG    IMAGE ID      CREATED         SIZE
testvm        v11.0  08f04e0e9e38  41 seconds ago  196.8 MB

 Dockerイメージが作成されていることが確認できました。

 以下の形式でも実行可能です。

$ docker import - testvm:v12.0 < testvm.tar

 

  以上でdocker importコマンドの紹介を終わります。

 ご指摘、ご要望などが御座いましたらコメントいただけるとうれしいです。

 他のDockerコマンドの実例付紹介記事は、本サイト内の別記事「Dockerのコマンドの一覧(ver1.12対応版)(オリジナルな実例付き)」をご参照ください。

 ご訪問ありがとうございました!


コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です