Dockerタグは信用しない:再現性を壊す落とし穴
- POSTS
1. はじめに システム開発をする中で、Docker でコンテナイメージのビルドされている方は多いのではないでしょうか。
コンテナイメージは、可搬性に優れており、どの環境(開発環境、検証環境、本番環境)でもアプリケーションを動作させることができるメリットがあり、開発者には大きな安心感を与えます。
しかしながら、イメージタグの理解が乏しいと、同じイメージを利用しているはずなのに、開発環境と本番環境で異なるイメージが利用されることがありえます。
この記事では、イメージタグの誤解から生じる問題と対策について記述します。
2. イメージタグに対する誤解 イメージタグは、ミュータブル(変更不可能)ではなく、ミュータブル(変更可能)です。
以下は検証結果です。
2.1. Dockerfile 作成 FROM alpine CMD ["echo", "This is Version 1.0 of the image!"] 2.2. ビルドする ~/Desktop/docker-test$ docker build -t test-image:1.0 . [+] Building 0.1s (5/5) FINISHED docker:default => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 98B 0.0s => [internal] load metadata for docker.io/library/alpine:latest 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [1/1] FROM docker.io/library/alpine:latest 0.0s => exporting to image 0.0s => => exporting layers 0.0s => => writing image sha256:d7cbeb7e099abb6ef223dbef9a5b39f11ba31c4ab8433 0.0s => => naming to docker.io/library/test-image:1.0 2.3. イメージを確認する タグとイメージID を確認する。