このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Docker基礎】イメージのバージョンとイメージ名

イメージのバージョンとイメージ名

 ここでは、Dockerイメージのバージョン管理とイメージ名の指定方法について学びます。これまでの解説では、練習のしやすさを優先してイメージのバージョンを指定せずに「latest(最新版)」を使用してきました。しかし、システムの安定性や特定の機能の利用を目的として、特定のバージョンのイメージを使用したい場合も多々あります。ここでは、イメージ名とバージョン番号の指定方法を詳しく解説し、固定バージョンを使用する際のメリットと注意点について理解を深めましょう。

イメージのバージョン管理の重要性

最新版 vs 固定バージョン

  • 最新版(latest): 常に最新の機能やセキュリティアップデートが適用されていますが、予期せぬ変更や互換性の問題が発生する可能性があります。
  • 固定バージョン: 特定のバージョンを指定することで、システムの安定性を確保し、互換性の問題を避けることができます。

バージョン管理のメリット

  • 安定性の確保: 環境を一貫して維持できるため、開発や本番環境での動作が安定します。
  • 互換性の維持: 特定のバージョンに依存するアプリケーションや設定を使用する際に、互換性の問題を防ぎます。
  • セキュリティの管理: 必要に応じてセキュリティパッチを適用し、適切なタイミングでバージョンを更新できます。

イメージ名とバージョン番号の指定方法

 Dockerでは、イメージ名にバージョン番号を付けて特定のバージョンを指定することが可能です。バージョン番号を指定することで、特定のリリースや機能セットを持つイメージを利用できます。

バージョン番号の指定書式

イメージ名:バージョン番号

例えば、Apacheのバージョン「2.2」を指定してコンテナを作成する場合、以下のように記述します。

docker run --name ApacheServer -d -p 8080:80 httpd:2.2

バージョン指定の例

ソフトウェアバージョン番号イメージ名指定例
Apache2.2httpd:2.2
nginx1.18nginx:1.18
MySQL8.0mysql:8.0
Ubuntu20.04ubuntu:20.04
Python3.9python:3.9

注意点

  • バージョン番号を指定しない場合、デフォルトで「latest」が使用されます。
  • 特定のバージョンを使用することで、環境の一貫性と安定性を保つことができます。

イメージ名とバージョン番号の活用方法

Step1:「run」コマンドでバージョン指定のイメージを実行する

 特定のバージョンを指定してイメージを実行することで、希望するバージョンのソフトウェアをコンテナ内で利用できます。以下では、Apacheのバージョン「2.2」を指定してコンテナを作成・起動する手順を紹介します。

コマンドの実行

PowerShellまたはターミナルに以下のコマンドを入力します。

docker run --name ApacheServer -d -p 8080:80 httpd:2.2

コマンドの解説

オプション説明
docker run新しいコンテナを作成して起動します。
--name ApacheServerコンテナに「ApacheServer」という名前を付けます。
-dコンテナをバックグラウンド(デタッチドモード)で実行します。
-p 8080:80ホストのポート8080をコンテナのポート80にマッピングします。
httpd:2.2使用するイメージ名とバージョン番号を指定します(Apacheのバージョン2.2)。

実行結果

PS C:\Users\joeac> docker run --name ApacheServer -d -p 8080:80 httpd:2.2
Unable to find image 'httpd:2.2' locally
2.2: Pulling from library/httpd
f49cf87b52c1: Pull complete
24b1e09cbcb7: Pull complete
8a4e0d64e915: Pull complete
bcbe0eb4ca51: Pull complete
16e370c15d38: Pull complete
Digest: sha256:9784d70c8ea466fabd52b0bc8cde84980324f9612380d22fbad2151df9a430eb
Status: Downloaded newer image for httpd:2.2
e690e0bd5e9977dbd201db613415ed90ff2c9c7a44f03279f59a8f42eb1163d5

注意点

  • Unable to find image 'httpd:2.2' locally: 指定したバージョンのイメージがローカルに存在しないため、Docker Hubからダウンロードが開始されます。
  • コンテナID(例: a14fcfc45d85...)は環境によって異なります。

Step2:「ps」コマンドでコンテナの稼働を確認する

作成・起動した「ApacheServer」コンテナが正しく稼働しているか確認します。

コマンドの実行

docker ps

実行結果

PS C:\Users\joeac> docker ps
CONTAINER ID   IMAGE       COMMAND              CREATED         STATUS         PORTS                  NAMES
e690e0bd5e99   httpd:2.2   "httpd-foreground"   3 minutes ago   Up 3 minutes   0.0.0.0:8080->80/tcp   ApacheServer

確認ポイント

  • NAMES列に「ApacheServer」と表示されていること。
  • STATUSが「Up」であること。
  • PORTS0.0.0.0:8080->80/tcpと表示され、ホストのポート8080がコンテナのポート80にマッピングされていること。

Step3:ブラウザでApacheServerコンテナにアクセスする

 ブラウザを開き、以下のURLにアクセスして、指定したバージョンのApacheが正常に動作していることを確認します。

http://localhost:8080/

注意点

  • プロトコルはhttpを使用します(httpsではありません)。
  • 正常に動作していれば、Apacheのバージョン2.2のデフォルトページが表示されます。

図: Apache 2.2の初期画面

Step4:「stop」コマンドでコンテナを停止する

作成・起動した「ApacheServer」コンテナの動作を停止します。

コマンドの実行

docker stop ApacheServer

実行結果の例

PS C:\Users\joeac> docker stop ApacheServer
ApacheServer

解説

  • docker stopコマンドにより、指定したコンテナ名「ApacheServer」のコンテナが停止されます。
  • 実行結果として、停止されたコンテナ名が表示されます。

Step5:「rm」コマンドでコンテナを削除する

不要になった「ApacheServer」コンテナを削除します。

コマンドの実行

docker rm ApacheServer

実行結果の例

PS C:\Users\joeac> docker rm ApacheServer
ApacheServer

解説

  • docker rmコマンドにより、指定したコンテナ名「ApacheServer」のコンテナが削除されます。
  • 実行結果として、削除されたコンテナ名が表示されます。

注意点

  • コンテナを削除する前に、必ずコンテナが停止されていることを確認してください。稼働中のコンテナは削除できません。
  • コンテナを削除すると、そのコンテナ内のデータは失われます。必要なデータがある場合は、事前にバックアップを取ってください。

Step6:「ps -a」コマンドでコンテナの削除を確認する

コンテナが正しく削除されたか確認します。

コマンドの実行

docker ps -a

実行結果

PS C:\Users\joeac> docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES

確認ポイント

  • 「ApacheServer」が一覧に表示されていないこと。
  • 他のコンテナが、存在する場合でも、「ApacheServer」が削除されていることを確認します。

補足: イメージ削除時の依存関係

 イメージを削除する際、他のイメージやコンテナがそのイメージに依存している場合は削除できません。特に、親イメージや中間イメージが存在する場合は注意が必要です。依存関係を確認し、必要に応じて関連するコンテナやイメージを削除してから進めましょう。

未使用イメージの一括削除

 未使用のイメージを一括で削除するには、以下のコマンドを使用します。関連するコンテナが存在している場合は削除できないので注意してください。

docker image prune -a

コマンドの実行

PS C:\Users\joeac> docker image prune -a
WARNING! This will remove all images without at least one container associated to them.
Are you sure you want to continue? [y/N] y
Deleted Images:
untagged: httpd:2.2
untagged: httpd@sha256:9784d70c8ea466fabd52b0bc8cde84980324f9612380d22fbad2151df9a430eb
(省略)
untagged: httpd:latest
untagged: httpd@sha256:72f6e24600718dddef131de7cb5b31496b05c5af41e9db8707df371859a350bb
(省略)
untagged: mysql:latest
untagged: mysql@sha256:0255b469f0135a0236d672d60e3154ae2f4538b146744966d96440318cc822c6
(省略)
untagged: hello-world:latest
untagged: hello-world@sha256:5b3cc85e16e3058003c13b7821318369dad01dac3dbb877aac3c28182255c724
(省略)
untagged: nginx:latest
untagged: nginx@sha256:42e917aaa1b5bb40dd0f6f7f4f857490ac7747d7ef73b391c774a41a8b994f15
(省略)

Total reclaimed space: 1.039GB

注意点

  • docker image pruneコマンドは、未使用のイメージのみを削除します。必要なイメージが削除されないように注意してください。
  • 確認プロンプトが表示されるため、削除前に内容を確認できます。

まとめ

 ここでは、Dockerイメージのバージョン管理とイメージ名の指定方法について学びました。以下のポイントを押さえておきましょう。

  • イメージのバージョン指定: イメージ名にバージョン番号を付けて指定することで、特定のバージョンのソフトウェアをコンテナ内で利用できます。これにより、環境の一貫性とシステムの安定性を確保できます。
  • コマンドの理解: docker runコマンドにおけるイメージ名とバージョン番号の指定方法を理解し、必要に応じて固定バージョンを使用することが重要です。
  • イメージの管理: docker image lsdocker rmdocker image pruneなどのコマンドを活用して、不要なイメージを適切に管理し、システムのストレージを効率的に利用します。
  • 依存関係の確認: イメージを削除する前に、そのイメージから作成されたすべてのコンテナが削除されていることを確認し、依存関係に注意を払います。

 イメージのバージョン管理は、Docker環境を効率的かつ安全に運用するための基本的なスキルです。これらの手順を実践し、イメージ管理の習熟度を高めましょう。

 次のコンテンツでは、実際にイメージを削除する演習を行います。さまざまなイメージを作成・管理した後は、不要になったイメージを適切に削除することで、システムの健全性を維持しましょう。引き続き、Dockerの学習を進めていきましょう。