Docker イメージのプル方法

DockerBeginner
オンラインで実践に進む

はじめに

Docker は、アプリケーションの開発、デプロイ、管理の方法に革命をもたらしました。このエコシステムの中心にあるのは Docker イメージであり、コンテナ化されたアプリケーションを作成し実行するための構成要素として機能します。このチュートリアルでは、Docker イメージをレジストリからプルするプロセスを案内します。これは、プロジェクトで Docker の力を活用するための重要なステップです。

この実験(Lab)の終わりには、Docker イメージを検索し、Docker Hub からプルし、コンテナ化されたアプリケーションでそれらを使用する方法を理解できるようになります。

Docker イメージの理解

Docker イメージをプルする前に、Docker イメージとは何か、そしてどのように機能するのかを理解することが重要です。

Docker イメージとは?

Docker イメージは、アプリケーションを実行するために必要なすべてを含む、軽量でスタンドアロンのパッケージです。

  • アプリケーションコード
  • ランタイム環境
  • ライブラリと依存関係
  • 環境変数
  • 設定ファイル

イメージは、これらのイメージの実行インスタンスである Docker コンテナを作成するために使用されるテンプレートです。

Docker イメージリポジトリ

Docker イメージは、レジストリ内のリポジトリに保存されます。最も人気のあるパブリックレジストリは Docker Hub で、数千のすぐに使えるイメージをホストしています。Docker Hub に関するいくつかの重要なポイント:

  • ソフトウェアベンダーによってメンテナンスされている公式イメージが含まれています
  • ユーザーによって作成されたコミュニティ貢献イメージをホストしています
  • 組織が独自のイメージ用のプライベートリポジトリを持つことを許可しています

Docker イメージの命名

Docker イメージは、特定の命名規則に従います。

[registry/]username/repository:tag

ここで:

  • registry はレジストリのホスト名です (オプション、デフォルトは Docker Hub)
  • username は Docker Hub のユーザー名または組織名です
  • repository はイメージ名です
  • tag はイメージのバージョンです (オプション、デフォルトは "latest")

例:ubuntu:22.04 または nginx:latest

Docker インストールの確認

先に進む前に、Docker がシステムに正しくインストールされていることを確認しましょう。ターミナルを開き、以下を実行します。

docker --version

次のような出力が表示されるはずです。

Docker version 20.10.21, build baeda1f

これにより、Docker がインストールされ、使用できる状態であることが確認されます。

次のステップでは、最初の Docker イメージを検索してプルします。

最初の Docker イメージの検索とプル

Docker イメージが何かを理解したので、Docker Hub からそれらを見つけてプルする方法を学びましょう。

Docker イメージの検索

イメージをプルする前に、利用可能なオプションを検索したい場合があります。docker search コマンドを使用して、Docker Hub でイメージを検索します。

docker search ubuntu

これにより、Docker Hub で利用可能な Ubuntu 関連のイメージのリストが表示されます。次のような出力が表示されるはずです。

NAME                             DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
ubuntu                           Ubuntu is a Debian-based Linux operating s...   14938     [OK]
ubuntu-upstart                   Upstart is an event-based replacement for ...   111       [OK]
rastasheep/ubuntu-sshd           Dockerized SSH service, built on top of of...   256                  [OK]
...

OFFICIAL 列に [OK] とマークされているのは、Docker またはソフトウェアベンダーによってメンテナンスされているイメージを示しています。

Docker イメージのプル

Docker イメージをローカルマシンにダウンロードするには、docker pull コマンドの後にイメージ名を指定します。

docker pull ubuntu:22.04

このコマンドは、Ubuntu 22.04 イメージを Docker Hub からプルします。次のようなダウンロードの進行状況が表示されるはずです。

22.04: Pulling from library/ubuntu
2ab09b027e7f: Pull complete
Digest: sha256:2b7412e6465c3c7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f
Status: Downloaded newer image for ubuntu:22.04
docker.io/library/ubuntu:22.04

出力は、Docker がイメージの個々のレイヤーをダウンロードしていることを示しています。各レイヤーは、ファイルシステム変更のセットを表しています。

タグなしでのイメージのプル

タグを指定しない場合、Docker は latest タグが付いたイメージをプルします。

docker pull nginx

これにより、Nginx Web サーバーイメージの最新バージョンがプルされます。

Using default tag: latest
latest: Pulling from library/nginx
a603fa5e3b41: Pull complete
(...more layers...)
Digest: sha256:f9c305f882a7062db720e582ce619686cbe29742eea6e1db6dcf84b200eec560
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest

その他のレジストリからのプル

デフォルトでは、docker pull は Docker Hub からイメージをダウンロードします。他のレジストリからプルするには、レジストリのホスト名を含めます。

docker pull mcr.microsoft.com/dotnet/sdk:6.0

このコマンドは、.NET SDK 6.0 イメージを Microsoft Container Registry からプルします。

これでいくつかの Docker イメージをプルしたので、次のステップに進み、それらを管理する方法を学びましょう。

Docker イメージの管理

Docker イメージをプルした後、それらを効果的にリスト表示、検査、および管理する方法を知る必要があります。

Docker イメージのリスト表示

ローカルマシンにダウンロードしたすべての Docker イメージを表示するには、docker images コマンド (またはそのエイリアス docker image ls) を使用します。

docker images

次のような出力が表示されるはずです。

REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
ubuntu        22.04     58db3edaf2be   3 weeks ago    77.8MB
nginx         latest    605c77e624dd   4 weeks ago    142MB

この出力は以下を示しています。

  • REPOSITORY: イメージの名前
  • TAG: イメージのバージョン
  • IMAGE ID: イメージの一意の識別子
  • CREATED: イメージが作成された日時
  • SIZE: ディスク上のイメージのサイズ

Docker イメージの検査

特定のイメージに関する詳細情報を取得するには、docker inspect コマンドを使用します。

docker inspect ubuntu:22.04

このコマンドは、イメージに関するすべての詳細を含む JSON 配列を表示します。これには以下が含まれます。

  • レイヤー情報
  • 環境変数
  • アーキテクチャ
  • オペレーティングシステム
  • 設定

出力は非常に長く、詳細です。以下は、表示される可能性のあるスニペットです。

[
    {
        "Id": "sha256:58db3edaf2beXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
        "RepoTags": [
            "ubuntu:22.04"
        ],
        "RepoDigests": [
            "ubuntu@sha256:2b7412e6465c3fc7fc5bb21d3e6f1917c167358449fecac8176c6e496e5c1f05f"
        ],
        ...
    }
]

イメージ履歴

イメージのレイヤー履歴 (どのように構築されたか) を表示するには、docker history コマンドを使用します。

docker history ubuntu:22.04

出力は、イメージを構成する各レイヤーを示しています。

IMAGE          CREATED       CREATED BY                                      SIZE
58db3edaf2be   3 weeks ago   /bin/sh -c #(nop)  CMD ["bash"]                0B
<missing>      3 weeks ago   /bin/sh -c #(nop) ADD file:15efc167a417...     77.8MB

Docker イメージの削除

イメージが不要になった場合は、docker rmi コマンドを使用して削除し、ディスク容量を解放できます。

docker rmi nginx

成功した場合、Docker は削除されたイメージ ID を表示します。

Untagged: nginx:latest
Untagged: nginx@sha256:f9c305f882a7062db720e582ce619686cbe29742eea6e1db6dcf84b200eec560
Deleted: sha256:605c77e624ddb75e6110f997c58876bba43f0blindividualayeridshereXX
(...more layers deleted...)

イメージがコンテナで使用されている場合は、最初にコンテナを削除するか、-f (force) オプションを使用する必要があります。

docker rmi -f nginx

これで、Docker イメージを管理する方法がわかりました。実際にイメージを使用してコンテナを実行する最終ステップに進みましょう。

Docker イメージの使用

Docker イメージのプルは最初のステップにすぎません。次に、これらのイメージを使用してコンテナを実行する方法を学びましょう。

イメージからのコンテナの実行

イメージからコンテナを作成して起動するには、docker run コマンドを使用します。

docker run ubuntu:22.04 echo "Hello from Ubuntu container"

このコマンドは以下を行います。

  1. ubuntu:22.04 イメージから新しいコンテナを作成します。
  2. コンテナ内で echo "Hello from Ubuntu container" コマンドを実行します。
  3. 出力を表示します。
Hello from Ubuntu container

コマンドを実行した後、コンテナはタスクを完了したため停止します。

対話型コンテナの実行

コンテナ内で対話型シェルを起動するには、-i (interactive) および -t (terminal) オプションを使用します。

docker run -it ubuntu:22.04 bash

これにより、Ubuntu コンテナ内で bash シェルが提供され、そこでコマンドを実行できます。

root@a1b2c3d4e5f6:/## ls
bin   dev  home  lib32  libx32  mnt  proc  run   srv  tmp  var
boot  etc  lib   lib64  media   opt  root  sbin  sys  usr

コンテナを終了するには、exit と入力するか、Ctrl+D を押します。

root@a1b2c3d4e5f6:/## exit
exit

デタッチモードでのコンテナの実行

バックグラウンド (デタッチモード) でコンテナを実行するには、-d オプションを使用します。

docker run -d --name nginx-server -p 8080:80 nginx

このコマンドは以下を行います。

  1. nginx イメージから nginx-server という名前のコンテナを作成します。
  2. デタッチモード (-d) で実行します。
  3. ホストのポート 8080 をコンテナのポート 80 にマッピングします。
  4. コンテナ ID を返します。
e1d0ac1dcb21a93d9d878dcf40c054eb9f3c2b1bf5ecce7c29b6fa8ce6b219c1

実行中のコンテナへのアクセス

これで、ブラウザで http://localhost:8080 にある Nginx Web サーバーにアクセスしたり、curl を使用して動作を確認したりできます。

curl localhost:8080

これにより、Nginx のウェルカムページ HTML が表示されます。

<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...
</html>

実行中のコンテナのリスト表示

実行中のすべてのコンテナを表示するには、次を使用します。

docker ps

これにより、実行中のコンテナに関する情報が表示されます。

CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
e1d0ac1dcb21   nginx     "/docker-entrypoint.…"   30 seconds ago   Up 29 seconds   0.0.0.0:8080->80/tcp   nginx-server

コンテナの停止と削除

実行中のコンテナを停止するには、次を使用します。

docker stop nginx-server

停止したコンテナを削除するには、次を使用します。

docker rm nginx-server

これで、Docker イメージを使用してコンテナを正常に実行できました。これは、開発およびデプロイプロセスで Docker を使用するための基本的なワークフローです。

まとめ

この Docker イメージの実験を完了したことをおめでとうございます。Docker イメージを操作するための基本的なスキルを習得しました。

  1. Docker イメージとは何か、レジストリでの組織方法の理解
  2. Docker Hub からの Docker イメージの検索とプル
  3. ローカル Docker イメージの管理 (リスト表示、検査、削除など)
  4. さまざまなモードでのコンテナ実行への Docker イメージの使用

これらのスキルは、Docker を操作するための基盤を形成し、開発ワークフローでコンテナ化を活用できるようにします。これで、パブリックまたはプライベートレジストリから任意の Docker イメージをプルし、それらを使用してコンテナ化されたアプリケーションを実行できます。

さらなる学習のための次のステップ:

  • Dockerfile を使用した独自の Docker イメージの作成
  • マルチコンテナアプリケーションのための Docker Compose の使用
  • 永続ストレージのための Docker ボリュームの使用
  • コンテナネットワークの設定

Docker Hub で利用可能な Docker イメージの広大なエコシステムを引き続き探索して、開発プロセスを加速できるツールとアプリケーションを見つけてください。