複数のソースイメージから新しいイメージを作成する
このステップでは、複数のソースイメージのコンテンツを組み合わせて新しい Docker イメージを作成する方法を学びます。これは、異なるベースイメージや事前ビルドされたイメージからコンポーネントを含むイメージを構築する必要がある場合によくあるシナリオです。
まず、必要なソースイメージをプルします。例としてubuntu
とalpine
イメージを使用します。
docker pull ubuntu:latest
docker pull alpine:latest
イメージがプルされていることを示す出力が表示されます。
latest: Pulling from library/ubuntu
...
Status: Downloaded newer image for ubuntu:latest
latest: Pulling from library/alpine
...
Status: Downloaded newer image for alpine:latest
次に、Dockerfile
を使用して新しいイメージを作成します。Dockerfile
は、イメージを構築するためにコマンドラインで呼び出す可能性のあるすべてのコマンドを含むテキストドキュメントです。~/project
ディレクトリにDockerfile
という名前の新しいファイルを作成します。
nano ~/project/Dockerfile
Dockerfile
に以下の内容を追加します:
FROM ubuntu:latest AS base
FROM alpine:latest AS alpine_base
COPY --from=alpine_base /etc/alpine-release /app/alpine-release
COPY --from=base /etc/os-release /app/ubuntu-release
WORKDIR /app
CMD ["ls", "-l"]
このDockerfile
を分解してみましょう:
FROM ubuntu:latest AS base
: この行は、ビルドの最初のステージのベースイメージをubuntu:latest
に設定し、このステージにbase
という名前を付けます。
FROM alpine:latest AS alpine_base
: この行は、alpine:latest
をベースイメージとして新しいビルドステージを開始し、このステージにalpine_base
という名前を付けます。これはマルチステージビルドであり、ステージ間でファイルをコピーできます。
COPY --from=alpine_base /etc/alpine-release /app/alpine-release
: このコマンドは、alpine_base
ステージから/etc/alpine-release
ファイルを現在のステージの/app/alpine-release
ディレクトリにコピーします。
COPY --from=base /etc/os-release /app/ubuntu-release
: このコマンドは、base
ステージから/etc/os-release
ファイルを現在のステージの/app/ubuntu-release
ディレクトリにコピーします。
WORKDIR /app
: これにより、後続の命令の作業ディレクトリが/app
に設定されます。
CMD ["ls", "-l"]
: これは、このイメージからコンテナが起動されたときに実行されるデフォルトのコマンドを指定します。/app
ディレクトリの内容をリスト表示します。
Dockerfile
を保存するには、Ctrl + X
、次にY
、そしてEnter
を押します。
次に、docker build
コマンドを使用してイメージをビルドします。コマンドの最後の.
は、ビルドコンテキスト(現在のディレクトリ~/project
)を指定します。
docker build -t my-multi-stage-image:latest ~/project
ビルドプロセスを示す出力が表示され、実行されるさまざまなステージが含まれます。
[+] Building
...
Successfully built <image_id>
Successfully tagged my-multi-stage-image:latest
ビルドが完了したら、ローカルイメージをリスト表示してイメージが作成されたことを確認できます。
docker images my-multi-stage-image
新しく作成したイメージがリストに表示されます。
REPOSITORY TAG IMAGE ID CREATED SIZE
my-multi-stage-image latest <image_id> About a minute ago ...MB
最後に、このイメージからコンテナを実行してコピーされたファイルを確認しましょう。
docker run --rm my-multi-stage-image:latest
--rm
フラグは、コンテナが終了したときに自動的に削除します。出力には、ubuntu
とalpine
イメージからコピーされたファイルが表示されます。
total 8
-rw-r--r-- 1 root root 25 Aug 24 10:00 alpine-release
-rw-r--r-- 1 root root 281 Aug 24 10:00 ubuntu-release
これにより、マルチステージビルドを使用して複数のソースイメージからコンテンツを組み合わせてイメージを正常に作成できたことが確認されます。