画像はDockerの基本的なコンポーネントです。このガイドでは、Dockerイメージとは何か、それらを構築する方法、それらを管理する方法、およびそれらを使用する方法について説明します。
始めましょう。
- dockerイメージの使用を開始する前に、システムにdockerをインストールする必要があります。
- このガイドではUbuntuを使用していますが、手順は他のディストリビューションでも同様である必要があります。
- root権限を持つユーザーアカウント。
何を知っておくべきですか?
Dockerイメージの操作を開始する前に、それらが何であるかを知っておくことが重要です。
Dockerイメージは、Dockerの基本的なコンポーネントです。 Dockerはイメージを使用してコンテナーを作成します。イメージは基本的に、コード、ライブラリ、ランタイムなど、コンテナの作成に必要なすべての情報を含むテンプレートです。
Dockerコンテナーは、イメージのランタイムインスタンスです。これには、イメージに含まれるすべてのものに加えて、コンテナーの実行中に行った変更または追加が含まれます。たとえば、システムに新しいアプリケーションをインストールすると、新しいアプリケーションがコンテナにインストールされます。
CLIを使用した画像の管理
Docker CLIを使用したイメージの管理は、Docker管理者にとって必須です。 Docker CLIは、イメージとコンテナーを完全に制御できる強力なツールです。このセクションでは、DockerCLIを使用してイメージを管理する方法を学習します。
1.以下のコマンドを実行して、Dockerが実行されていることを確認します。
sudo systemctl status docker
2. Dockerが実行されていない場合は、以下のコマンドで起動します。
sudo systemctl start docker
3.ユーザーアカウントをdockerグループに追加します。ログアウトしてから再度ログインすると、変更が有効になります。
sudo usermod -aG docker $(whoami)
4. docker imageコマンドを実行すると、dockerimageコマンドで使用できるすべてのオプションのリストが表示されます。
docker image
以下に示すように、docker imageコマンドには多くのオプションがありますが、最も一般的に使用されるもののいくつかは次のとおりです。
- ls :システム上の画像を一覧表示します。
- プル :レジストリからイメージをプルします。
- プッシュ :画像をレジストリにプッシュします。
- 作成 :Dockerfileから新しいイメージを作成します。
- rm :システムからイメージを削除します。
- タグ: 画像に名前を付けます。
開始するには、システム上の画像を一覧表示する方法を見てみましょう。
5. docker image lsコマンドを実行して、ホスト上のイメージを一覧表示します。 docker image lsコマンドは、プル元のリポジトリを含む、ホスト上のすべてのイメージを一覧表示します。 ID、リポジトリ、タグ、画像のサイズ。
docker image ls
ホストからイメージを削除したいとします。 rmコマンドを使用できます。画像名または画像IDを使用して画像を削除できます。
docker image rm <image-name>
docker image rm <image-id>
IDを使用する場合は、IDの最初の数文字がリスト内の画像に固有であることを確認してください。つまり、IDの最初の数文字を他の画像で使用しないでください。
6.たとえば、ubuntu:12.04イメージを削除するには、次のコマンドのいずれかを使用できます。 ID(5b1)の最初の数文字だけを使用して画像を削除できることに注意してください。これは、最初の数文字の画像が他にないためです。
docker image rm ubuntu:12.04
docker image rm 5b1
以下に示すように、ubuntu:12.04イメージは、イメージの作成に使用されるすべてのレイヤーとともにホストから削除されます。
7.システムにイメージを再度リストして、ubuntu:12.04イメージがリストされていないことを確認します。
docker image ls
dockerimagelsコマンドとdockerimagesコマンドはまったく同じことを行うことに注意してください。ただし、Dockerは開発者が正しいサブコマンドでdockerコマンドを使用することを好むため、2番目は非推奨になりました。 dockerrmiコマンドでも同じことが言えます。このコマンドは、dockerimagermとまったく同じようにイメージとそのすべてのレイヤーを削除するために使用されます。 Dockerは、正しいサブコマンドでdockerrmを使用することをお勧めします。
docker image ls
docker images
同じ出力があります。
これまでに、一度に1つの未使用の画像を削除しました。 2つ以上の未使用の画像を同時に削除したい場合はどうなりますか?
ここで、プルーンコマンドが役立ちます。 pruneコマンドを使用すると、未使用のすべてのイメージをホストから一度に削除できます。 pruneコマンドを使用して、すべてのぶら下がっている画像、すべての未使用の画像、または両方の組み合わせを削除できます。ぶら下がっている画像とは、少なくとも1つのコンテナが関連付けられていない画像です。
8. docker image pruneコマンドを実行して、システムから未使用/ぶら下がっているすべてのイメージを削除します。
docker image prune
ご覧のとおり、pruneコマンドは、ホストからすべての未使用のイメージとそのレイヤーを削除し、その過程で多くのディスクスペースを節約しました。
9.ホストに画像を再度リストして、画像が実際になくなっていることを確認します。これで、ホストから画像を一覧表示、削除、および整理する方法がわかりました。これらの基本的なコマンドは、システムをクリーンで整理された状態に保つのに役立ちます。
docker image ls
Dockerイメージの検査
Dockerイメージとコンテナを神秘的なブラックボックスと考えるかもしれません。あなたは彼らの中でどんな魔法が起こっているのか疑問に思っています。このセクションでは、Dockerイメージに含まれるものと、その情報をどのように活用できるかを見て、神秘主義の一部を払拭します。
1. Dockerは、イメージのコンテンツを検査する方法を提供します。次の例に示すように、docker inspectコマンドは画像へのパスを取得し、画像に関する豊富な情報を出力します。
docker inspect ubuntu
以下に示すように、上記のコマンドからの出力には多くの情報が含まれています。ここには、JSON配列と呼ばれる形式ですべての情報が表示されています。
出力の情報は、Key-Valueストアのように表示されます。パイプ(|)などのLinuxツールを使用して、特定のキーワードの出力をgrepすることができます。次に、パイプ出力を任意の目的に使用できます。次の例は、これを行う方法を示しています。
2.以下のコマンドを実行して、dockerinspectコマンドの出力をimage-inspect.txtというファイルに保存します。
docker image inspect ubuntu > image-inspect.txt
3.次に、選択したエディターを使用してファイルを開き、その内容を調べます。
sudo nano image-inspect.txt
以下に示すように、docker inspectコマンドの出力には、イメージに関する豊富な情報が含まれています。エディター内では、エディターを上下にスクロールするように簡単にナビゲートして、さまざまな情報を調べることができます。必要に応じて情報を編集できます。
--format引数を使用して、特定の方法で出力をフォーマットすることもできます。
4.たとえば、ubuntuイメージのIDを印刷するには、次のコマンドを使用できます。
docker image inspect ubuntu --format='{{.ID}}'
5.画像を一覧表示して、画像IDを確認します。
docker image ls
6.以下のコマンドを実行して、dockerinspectコマンドの出力をmoreコマンドにパイプします。これにより、出力をページ分割できるため、出力に含まれるすべての情報を確認できます。
docker image inspect ubuntu | more
今回は、ホスト名が表示されます ( b32714f341a6 ) ContainerConfig 以下に示すように、セクション。
7.ホスト名の値( b32714f341a6 )が必要な場合はどうなりますか ) それだけ?これは、以下のコマンドを実行することで実現できます。
docker image inspect ubuntu --format='{{.ContainerConfig.Hostname}}'
ご覧のとおり、Linuxツールでdocker inspectコマンドを使用して、さらにフィルタリングを行うことができます。範囲のように。たとえば、192.168.0.0/16の範囲のすべてのIPアドレスを一覧表示します。また、他のスクリプトツールと組み合わせて、さらにクールなことを行うこともできます。
Dockerタグの使用
Dockerイメージの操作を続けるときは、タグの使用を開始する必要があります。タグを使用すると、画像を簡単に識別して管理できます。たとえば、イメージが使用される環境ごと、またはイメージが使用される顧客またはクライアントごとにタグを作成できます。これにより、必要な特定の画像を簡単に見つけて、どの画像がどの目的で使用されたかを追跡できます。
画像にタグを追加するための構文は次のとおりです。
docker tag SOURCE_IMAGE[:TAG] TARGET_IMAGE[:TAG]
タグには任意の有効なASCII文字列を使用でき、小文字と大文字、数字、アンダースコア、ピリオド、ダッシュを含めることができます。ピリオドまたはダッシュで始めることはできず、長さが128文字を超えてはなりません。例を見てみましょう。
1.画像にタグを追加するには、まず、タグを付ける画像の名前またはIDを知る必要があります。次のコマンドを実行すると、システムで使用可能なすべての画像を一覧表示できます。
docker image ls
2.次に、以下のコマンドを実行して、「myubuntu」タグを画像に追加します。
docker tag ubuntu:latest ubuntu:myubuntu
3.これで、docker image lsコマンドを再実行すると、画像が「myubuntu」でタグ付けされていることがわかります。
タグは単なるエイリアスであることに注意してください。つまり、画像には複数のタグを付けることができますが、それらはすべて同じソース画像を参照しています。したがって、意味がある限り、任意のタグを使用できます。また、画像を作成するときにタグを追加して、後で簡単に追跡できるようにすることをお勧めします。
4.もう1つの例を見てみましょう。タグ「original」を使用してUbuntuのイメージを作成するとします。これを行うには、次のコマンドを実行します。
docker tag myubuntu:latest myubuntu:original
上記のコマンドは、「latest」でタグ付けされた画像に基づいて、「original」でタグ付けされた画像を作成します。これで、2つのmyubuntu画像ができました。1つは最新でタグ付けされています オリジナルでタグ付けされたもの 、ただし、同じソースイメージID( 2b4cba85892a )を指します 。
Dockerレジストリの操作
Dockerイメージとは何かについての基本的な理解ができたので、レジストリの操作を見てみましょう。 Docker Hubは最も人気のあるパブリックレジストリですが、他にも利用可能なオプションがあります。
Docker Hubは、個人的な目的と商用目的の両方で自由に使用できるパブリックレジストリです。さまざまな画像を利用できます。また、独自の画像を作成して他の人と共有することもできます。 Docker Hubを使用するには、アカウントを作成してからDockerクライアントをインストールするだけです。次に、docker searchコマンドを使用して画像を検索し、dockerpullコマンドを使用して画像をダウンロードできます。
これまで、DockerパブリックレジストリであるDockerHubで利用できるubuntuイメージを使用してきました。ただし、画像を保存するためのプライベートレジストリを作成することもできます。
プライベートレジストリを使用する理由はいくつかあります。
- 内部使用のみの画像を保存するため。機密情報を含む画像があり、それらを公開したくない場合があります。または、環境で使用されている画像を追跡し、他の人が許可なく画像をダウンロードできないようにしたい場合もあります。
- 画像をローカルにキャッシュすることにより、配信パイプラインCI/CDでの画像のダウンロードを高速化します。独自のレジストリを実行して独自に保存することは、レジストリをCI/CDシステムとリンクして改善するための優れた方法です。
1.Dockerホストがローカルレジストリを作成する準備ができているかどうかを確認します。
docker version
2.以下のdockerrunコマンドを実行して、ローカルレジストリとプライベートレジストリを稼働させます。場所:
- -p 5000:5000=Dockerホストのポート5000をコンテナのポート5000にマップします
- -restart =always =失敗した場合、コンテナが常に再起動されるようにします
- -nameRegistry=プライベートレジストリの名前
- repository:2=レジストリコンテナの作成に使用されるイメージ
docker run -d -p 5000:5000 --restart=always --name registry registry:2
3.以下のコマンドを実行して、Dockerホストで実行中のすべてのコンテナーを一覧表示します。
docker ps
次の出力が表示されます。この出力は、レジストリコンテナがDockerホストで稼働していることを示しています。 :::5000-> 5000 / tcp表記は、Dockerホストのポートをレジストリコンテナのポートにマップするショートカットです。
プライベートレジストリが稼働しているので、それに画像を追加する方法を見てみましょう。次の例は、ubuntuイメージをレジストリに追加する方法を示しています。まず、Docker Hubからローカルホストにイメージをプルして、特定のタグを付ける必要があります。次に、新しくタグ付けされたイメージをプライベートレジストリにプッシュします。最後に、ローカルホストからubuntuイメージを削除し、プライベートレジストリからイメージをプルしてテストします。
4.以下のコマンドを実行して、タグ20.04のubuntuイメージをDockerHubからローカルホストにダウンロードします。
docker image pull ubuntu:20.04
5.次に、以下のコマンドを実行して、ダウンロードしたUbuntuイメージに「my-ubuntu」のタグを付けます。任意のタグを使用できますが、組織にとって意味のあるものを使用することをお勧めします。
docker tag ubuntu:20.04 localhost:5000/my-ubuntu
6.以下のコマンドを実行して、新しくタグ付けされたイメージをポートlocalhost:5000で実行されているプライベートレジストリにプッシュします。
docker push localhost:5000/my-ubuntu
7.以下のコマンドを実行して、ローカルにキャッシュされたubuntuイメージをローカルホストから削除し、プライベートレジストリをテストします。
docker image remove ubuntu:20.04 && docker image remove localhost:5000/my-ubuntu
8.ローカルにキャッシュされたubuntuイメージが削除されたら、以下のコマンドを実行して、プライベートレジストリからイメージをプルできます。
docker pull localhost:5000/my-ubuntu
9.以下のコマンドを実行して、Dockerホスト上のすべてのイメージを一覧表示します。
docker image ls
my-ubuntuが表示されます 以下に示すように、プライベートレジストリからプルされたものとしてリストされた画像。この出力は、イメージがプライベートレジストリから正常にプルされ、プライベートレジストリが正しく機能していることを確認します。
画像のプッシュ、プル、署名
Dockerには、画像のプッシュ、プル、検索のコマンドラインオプションがいくつか用意されています。このセクションでは、これらのコマンドを使用して、ホストのコマンドラインからレジストリ内のイメージを管理する方法を学習します。この例では、Docker Hubを使用してデモンストレーションを行っていますが、他のレジストリを使用することもできます。
1. docker loginコマンドを実行して、DockerHubレジストリにログインします。プロンプトが表示されたら、ユーザー名とパスワードを入力します。 Docker Hubアカウントをお持ちでない場合は、https://hub.docker.com/で無料で作成できます。
docker login
2.ログインすると、画像をプッシュする準備が整います。 ubuntuの最新イメージをDockerHubにプッシュするとします。また、後で簡単に参照できるように、意味のある名前で画像にタグを付ける必要があります。この例では、画像にhowtoforge / ubuntu:latestというタグを付けます。ご希望のタグ名をお気軽にご利用ください。
docker tag ubuntu:latest howtoforge/ubuntu:latest
docker push howtoforge/ubuntu:latest
3.ウェブブラウザを開き、DockerHubに移動します。そこにあなたの画像が表示されます。このリポジトリは、ユーザー名と使用したタグに基づいて作成されました。この例では、リポジトリは howtoforge / ubuntuです。 。 [タグ]タブに移動すると、タグが正常に適用されたことがわかります(最新 。
4.以下のコマンドを実行して、ローカルのubuntuイメージを削除し、プルをテストします。
docker image rm howtoforge/ubuntu
システム上のイメージを一覧表示して、ubuntuイメージが削除されたことを確認します。
docker image ls
5.以下のコマンドを実行して、DockerHubからmy-ubuntuイメージをダウンロードします。
docker pull howtoforge/ubuntu
6.ホスト上のイメージを再度リストして、ubuntuイメージがプルされたことを確認します。システムにmy-ubuntuイメージが表示されるはずです。
docker image ls
イメージを操作しているときに、Dockerレジストリで特定のイメージを検索することをお勧めします。 docker searchコマンドを使用して、Dockerレジストリ上のイメージを検索できます。
7. docker searchコマンドを実行して、使用可能なすべてのオプションとパラメーターを確認します。
man docker search
次の出力が表示されます。次のような便利なフィルタリングオプションが表示されます:
- 星= :画像がDockerHubにある星の数で検索結果をフィルタリングします。これを使用して、最も人気のある画像を見つけることができます。
- is-automated =(true | false) :検索結果をフィルタリングして、自動ビルドを含めるか除外します。これを使用して、自動ビルドであるかどうかにかかわらずイメージを見つけることができます。
- is-official =(true | false) :検索結果をフィルタリングして、公式画像を含めたり除外したりします。これを使用して、画像の背後にある会社によって公式にサポートされている画像を見つけることができます。たとえば、UbuntuはUbuntuイメージの背後にある公式の会社です。 Nginxは、Nginxイメージの背後にある公式会社です。公式画像は会社によってテストされており、安定している可能性が高いため、可能な限り常に公式画像を使用する必要があります。公式画像で問題が発生した場合は、画像を提供している会社からサポートを受けることができます。
8.たとえば、docker search --filter =stars =4 ubuntuコマンドを実行して、DockerHubで星が4つ以上あるubuntuイメージを検索します。
docker search --filter=stars=4 ubuntu
9.以下のコマンドを実行して、Ubuntuの公式イメージであるubuntuイメージを検索します。
docker search --filter=is-official=true ubuntu
出力は、ubuntuイメージを含み、それが公式のUbuntuイメージであることを示すリポジトリのリストである必要があります( OK )、以下に示すように。
10.以下のコマンドを実行して、Docker Hubで星の数が100以上で、Ubuntuの公式画像であるubuntu画像を検索します。
docker search --filter="stars=100" --filter=is-official=true ubuntu
Dockerイメージは、アプリケーションコードと構成を保存するための優れた方法です。しかし同時に、特にさまざまなアプリケーションをテストしたり、さまざまな構成を試したりする場合は、未使用のイメージを大量に蓄積するのは簡単です。レジストリの一部の画像が不要になった場合があります。
画像を含むリポジトリに移動し、削除ボタンをクリックすると、画像を削除できます。
11.たとえば、Docker Hubで、howtoforge/ubuntuリポジトリに移動します。 設定をクリックします>リポジトリを削除 。リポジトリの名前を入力して、リポジトリを削除することを確認します。 削除をクリックします 。
ダッシュボードに戻ると、howtoforge/ubuntuリポジトリがubuntuイメージとともに削除されていることがわかります。
おめでとう!これで、記事の最後に到達しました。これで、Dockerイメージとその操作方法の基本を理解できたはずです。 Dockerについて詳しく知りたい場合は、Dockerの公式ドキュメントを読むことをお勧めします。このドキュメントでは、次のようなトピックに関する詳細情報を見つけることができます。
- Dockerfiles
- ネットワーキング
- ボリューム
- サービス
- スウォームモード