Docker-Compose を使用して新しいイメージからコンテナーを再作成する
アプリケーションを開発するときは、通常、アプリケーションを操作するさまざまなユーザーにとってアプリケーションをより効果的にするために、変更を加えたり機能を追加したりします。
Docker を使用する場合、イメージを再構築し、このイメージから新しいコンテナーを実行することにより、加えられた変更または機能がメイン アプリケーションに確実に更新されるようにする必要があります。 このチュートリアルでは、Docker Compose を使用して新しいイメージからコンテナーを再作成する方法を説明します。
新しいプロジェクトを作成する
WebStorm IDEA
で、File
> New
> Project
を選択して新しいプロジェクトを作成します。 次に、空のプロジェクト
を選択し、プロジェクト名を無題
からdocker-compose-no-cache
に変更するか、任意の名前を使用します。
Create
というラベルの付いたボタンを押して、プロジェクトを生成します。 現在のフォルダーの下に index.html
という名前のファイルを作成し、次のコードをコピーして貼り付けます。
<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Bootstrap demo</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/css/bootstrap.min.css"
rel="stylesheet"
integrity="sha384-Zenh87qX5JnK2Jl0vWa8Ck2rdkQ2Bzep5IDxbcnCeuOxjzrPF/et3URy9Bv1WTRi"
crossorigin="anonymous">
</head>
<body>
<div class="card">
<div class="card-header">
Featured
</div>
<div class="card-body">
<h5 class="card-title">Special title treatment</h5>
<p class="card-text">With supporting text below as a natural lead-in to additional content.</p>
<a href="#" class="btn btn-primary">Go somewhere</a>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.2/dist/js/bootstrap.bundle.min.js"
integrity="sha384-OERcA2EqjJCMA+/3y+gxIOqMEjwtxJY7qPCqsdltbNJuaOe923+mo//f6V8Qbsw3"
crossorigin="anonymous"></script>
</body>
</html>
このファイルは Bootstrap を使用して、アプリケーションのイメージからコンテナーを実行するときにカードを表示する Web ページを作成します。 このページを使用して、コンテナが実行されているかどうかを確認します。
イメージを定義する
現在のフォルダーの下にDockerfile
という名前のファイルを作成し、次の手順をコピーしてファイルに貼り付けます。
FROM nginx:1.22.0-alpine
COPY . /usr/share/nginx/html
FROM
- 後続の命令を使用してカスタム イメージを作成するベース イメージを設定します。 この場合、ベース イメージを Nginx
として設定し、alpine
を使用して Nginx
の軽量バージョンをプルしました。
COPY
- 現在のディレクトリ内のファイルとフォルダを、イメージ内のファイル システムの場所にコピーします。 この場合、現在のディレクトリ内のすべてのファイルを /src/share/nginx/html
にコピーしました。
Compose ファイルを使用してコンテナーを定義する
現在のフォルダーの下に compose.yaml
という名前のファイルを作成し、次の手順をコピーしてファイルに貼り付けます。
services:
web-app:
restart: on-failure
build: ./
hostname: web-app-service
ports:
- '80:80'
このファイルは、ホストのポート 80
を公開してコンテナのポート 80
でリッスンする web-app
という名前のサービスを定義します。 このファイルは、ターミナル上のコンテナーよりも簡単にコンテナーを管理する方法を提供します。
イメージをビルドしてコンテナーを実行する
イメージを作成するのはこれが初めてなので、基本イメージがプルされ、Dockerfile
で定義された手順を使用してカスタム イメージを作成するために使用されます。 compose.yaml
ファイルで定義されたコンテナーも作成され、ネットワークに追加されます。
コンピューターでキーボード ショートカット ALT+F12 を使用して新しいターミナル ウィンドウを開き、以下のコマンドを実行してイメージをビルドし、そこからコンテナーを実行します。
~/WebstormProjects/docker-compose-no-cache$ docker compose up -d
このコマンドは、compose.yaml
ファイルを実行して docker-compose-no-cache_web-app
という名前のイメージを構築し、docker-compose-no-cache-web-app-1
という名前のコンテナーも実行します。 以下に示すように。
=> CACHED [1/2] FROM docker.io/library/nginx:1.22.0-alpine@sha256:addd3bf05ec3c69ef3e8f0021ce1ca98e0eb21117b97ab8b64127e 0.0s
=> [2/2] COPY . /usr/share/nginx/html 0.6s
=> exporting to image 0.8s
=> => exporting layers 0.6s
=> => writing image sha256:d72675b7a3e3a52dd27fe46f298dc30757382d837a5fbf36d8e36d646b5902d6 0.1s
=> => naming to docker.io/library/docker-compose-no-cache_web-app 0.1s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
[+] Running 2/2
⠿ Network docker-compose-no-cache_default Created 0.3s
⠿ Container docker-compose-no-cache-web-app-1 Started
コンテナーが実行されているかどうかを確認するには、ブラウザーを開き、localhost:80
(http://localhost/#) にリクエストを発行します。 index.html
ページで定義したカードがブラウザに表示されます。
同じターミナル ウィンドウを使用して、以下のコマンドを実行して、カスタム イメージが作成されたことを確認します。
~/WebstormProjects/docker-compose-no-cache$ docker image ls
出力:
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-compose-no-cache_web-app latest d72675b7a3e3 8 minutes ago 23.5MB
キャッシュを使用してイメージを再構築する
キャッシュを使用して既存のイメージを再構築し、コンテナーを実行するには、まずコマンド docker compose down
を使用して既存のコンテナーを停止および削除する必要があります。
キャッシュを使用して docker イメージを再構築すると、現在のコンテナーが再利用されて新しいコンテナーが作成されます。 同じターミナル ウィンドウを使用して、次のコマンドを実行し、キャッシュを使用して既存のイメージを再構築します。
~/WebstormProjects/docker-compose-no-cache$ docker compose build
このコマンドは、既存のイメージを使用して新しいイメージを再構築し、docker compose up -d
を使用してそこからコンテナーを実行できます。
既存のイメージが再利用されて新しいコンテナーが作成されていることを確認するには、次のコマンドを実行します。前のセクションで作成したイメージ以外にイメージがないことに注意してください。
~/WebstormProjects/docker-compose-no-cache$ docker image ls
出力:
REPOSITORY TAG IMAGE ID CREATED SIZE
docker-compose-no-cache_web-app latest d72675b7a3e3 8 minutes ago 23.5MB
キャッシュなしでイメージを再構築する
キャッシュなしでイメージを再構築するということは、以前のイメージを再利用せずに新しいイメージを作成することを意味します。 これは、docker build
コマンドを使用してイメージをビルドするときに --no-cache
コマンドを追加することで実現できます。
同じターミナル ウィンドウを使用して、次のコマンドを実行し、キャッシュなしでイメージを再構築します。 docker compose down
コマンドを使用して、実行中のコンテナーが削除されていることを確認します。
~/WebstormProjects/docker-compose-no-cache$ docker compose build --no-cache
このコマンドは、キャッシュなしで新しいイメージを再構築します。つまり、以前のイメージは再利用されません。 以前のイメージが現在のイメージを作成するために再利用されていないことを確認するには、次のコマンドを実行します。以前のイメージには <none>
で示されている名前がないことに注意してください。
新しいイメージは、前のイメージの名前を使用します。
~/WebstormProjects/docker-compose-no-cache$ docker image ls
出力:
docker-compose-no-cache_web-app latest f111dde0e704 3 seconds ago 23.5MB
<none> <none> 1c05a46fe049 13 minutes ago 23.5MB
前の画像と新しい画像に同じ名前を付けることはできないため、現在の画像は前の画像の名前を使用し、前の画像には名前がないことを示すために none
を取得します。
まとめ
Docker Compose を使用して新しいイメージからコンテナーを再作成する方法を学びました。 これを実装するために、キャッシュを使用してイメージを再構築する方法と、キャッシュを使用せずにイメージを再構築する方法を学習しました。
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub