Docker の使い方(その3:コンテナイメージ)

この記事は最終更新日から 2年以上 が経過しています。

前回、「Docker の使い方(その2:コンテナ)」の続きです。今回はコンテナイメージについてです。

コンテナイメージの一覧

コンテナイメージの一覧を表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。

Docker Desktop でコンテナイメージの一覧を表示する

Docker Desktop でコンテナイメージの一覧を表示するには、Docker Desktop の左メニューの「Images」をクリックします。

images.png

コマンドでコンテナイメージの一覧を表示する

コマンドでコンテナイメージの一覧を表示するには、docker image ls コマンドを使用します。

書式
docker image ls
出力内容
REPOSITORY   TAG       IMAGE ID       CREATED              SIZE
test-img     latest    7a8e49daffc3   About a minute ago   456MB

Docker Hub のコンテナイメージを探す

Docker Hub に公開されている公式のコンテナイメージは下記のリンクから探すことができます。 どんなコンテナイメージが公開されているか探してみましょう。 左サイドバーの「Official Images」にチェックを付けると、公式のコンテナイメージが探せます。

docker_hub_explore.png

コマンドで Docker Hub のコンテナイメージを探す

コマンドで Docker Hub のコンテナイメージを探すには、docker search コマンドを使用します。

書式
docker search <検索ワード>
例:検索ワード「httpd」で、コンテナイメージを探す
docker search httpd

Docker Hub からコンテナイメージをダウンロードする

コンテナイメージは、docker container create / docker container run コマンドを実行した際に、Docker Hub から自動でダウンロードされますが、 ダウンロードのみを行いたい場合は、docker image pull コマンドを使用します。 docker image pull コマンドには、コンテナイメージの名前とタグを指定できます。 タグが未指定の場合は、タグはデフォルトで「latest」(つまり、最新版)になります。

書式
docker image pull <コンテナイメージの名前[:タグ]>
例:コンテナイメージ名「httpd」の、タグ「latest」(つまり、最新版)をダウンロードする
docker image pull httpd
例:コンテナイメージ名「httpd」の、タグ「2.4」(つまり、バージョン 2.4)をダウンロードする
docker image pull httpd:2.4

コンテナイメージを作成する

コンテナイメージを自分で作成するには、Dockerfile と docker image build コマンドを使用します。

build.png

Dockerfile

Dockerfile は、コンテナイメージをどのように作成するかを記載したシンプルなテキストベースのスクリプトファイルです。 「Dockerfile」というファイル名で作成します。拡張子は無いので注意してください。

詳しい Dockerfile の書き方については、ここでは記載しません。 あまりにも大量にありますので、公式のドキュメントを見てもらった方が良いと思います。

書式と簡単な例だけ記載しておきます。

書式
# コメント
命令 引数
例:Apache HTTPサーバーを使用したWebサーバーを作成する
Dockerfile
# コンテナイメージ「httpd:2.4」をベースとする
FROM httpd:2.4

# ホストの「./public-html/」にあるファイルを、
# コンテナイメージの「/usr/local/apache2/htdocs/」にコピー
COPY ./public-html/ /usr/local/apache2/htdocs/

コンテナイメージをビルドする

Dockerfile の内容に従ってコンテナイメージを作成するのが、docker image build コマンドです。

-t オプションを使用すると、コンテナイメージに名前(とタグ)を付けることができます。 ちなみに、-t オプションを使用しないと、名前のないコンテナイメージが作成されるので注意してください。

書式
docker image build -t <コンテナイメージの名前[:タグ]> <Dockerfileの場所>
例:「test-img」という名前のコンテナイメージを、カレントディレクトリ「.」にある Dockerfile から作成する
docker image build -t test-img .

コンテナからコンテナイメージを作成する

コンテナからコンテナイメージを作成することもできます。

コンテナイメージからコンテナを作成するには、docker container create コマンドを使用しましたが、 その逆に、コンテナからコンテナイメージを作成するには、docker container commit コマンドを使用します。

commit.png

基本的には、前述の Dockerfile を使用してコンテナイメージを作成した方が、変更内容が文書化されているため良いとされています。 ですが、こちらの方が気軽に使用できるため、コンテナ自体のデバッグを行ったりする場合には便利かもしれません。

書式
docker container commit <コンテナのIDもしくは名前> <コンテナイメージの名前[:タグ]>
例:コンテナ名「test-app」から、コンテナイメージ名「new-img」を作成する
docker container commit test-app new-img

コンテナイメージに脆弱性が存在するか調べる

作成したコンテナイメージに脆弱性が存在するか調べることができます。 Docker Hub の Personal プランでは、1か月につき10回まで無料で行うことができます。

Doker ID でログインする

コンテナイメージに脆弱性が存在するか調べるには、先に Docker ID でのログインが必要になります。 Docker ID でのログイン方法は、「Docker の使い方(その1:概要)」を参照してください。

コンテナイメージに脆弱性が存在するか調べる

コンテナイメージに脆弱性が存在するか調べるには、docker scan コマンドを使用します。

書式
docker scan <コンテナイメージの名前>
例:コンテナイメージ名「test-img」の脆弱性を調べる
docker scan test-img

コンテナイメージの履歴を表示する

コンテナイメージがどのように構築されたかを確認したい場合は、コンテナイメージの履歴から確認できます。 コンテナイメージの履歴を表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。

Docker Desktop でコンテナイメージの履歴を表示する

Docker Desktop でコンテナイメージの履歴を表示するには、Docker Desktop の「Images」からコンテナイメージの履歴を表示したいコンテナイメージのメニューを表示し、「Inspect」をクリックします。

image_inspect.png image_history.png

コマンドでコンテナイメージの履歴を表示する

コマンドでコンテナイメージの履歴を表示するには、docker image history コマンドを使用します。

書式
docker image history <コンテナイメージのIDもしくは名前>
例:コンテナイメージ名「test-img」の履歴を表示する
docker image history test-img
出力内容
IMAGE          CREATED          CREATED BY                                      SIZE      COMMENT
7a8e49daffc3   27 minutes ago   CMD ["node" "src/index.js"]                     0B        buildkit.dockerfile.v0
<missing>      27 minutes ago   RUN /bin/sh -c yarn install --production # b…  83.8MB    buildkit.dockerfile.v0
<missing>      28 minutes ago   COPY . . # buildkit                             58.1MB    buildkit.dockerfile.v0
<missing>      29 minutes ago   WORKDIR /app                                    0B        buildkit.dockerfile.v0
<missing>      29 minutes ago   RUN /bin/sh -c apk add --no-cache python2 g+…  223MB     buildkit.dockerfile.v0
<missing>      3 days ago       /bin/sh -c #(nop)  CMD ["node"]                 0B
<missing>      3 days ago       /bin/sh -c #(nop)  ENTRYPOINT ["docker-entry…  0B
<missing>      3 days ago       /bin/sh -c #(nop) COPY file:4d192565a7220e13…  388B
<missing>      3 days ago       /bin/sh -c apk add --no-cache --virtual .bui…  7.84MB
<missing>      3 days ago       /bin/sh -c #(nop)  ENV YARN_VERSION=1.22.17     0B
<missing>      3 days ago       /bin/sh -c addgroup -g 1000 node     && addu…  77.6MB
<missing>      3 days ago       /bin/sh -c #(nop)  ENV NODE_VERSION=12.22.10    0B
<missing>      2 months ago     /bin/sh -c #(nop)  CMD ["/bin/sh"]              0B
<missing>      2 months ago     /bin/sh -c #(nop) ADD file:9233f6f2237d79659…  5.59MB

コンテナイメージの削除

コンテナイメージを削除するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。 コンテナで使用中のコンテナイメージは削除できません。

Docker Desktop でコンテナイメージを削除する

Docker Desktop でコンテナイメージを削除するには、Docker Desktop の「Images」から削除したいコンテナイメージのメニューを表示し、「Remove」をクリックします。

image_remove.png

コマンドでコンテナイメージを削除する

コマンドでコンテナイメージを削除するには、docker image rm コマンドを使用します。

書式
docker image rm <コンテナイメージのIDもしくは名前>
例:コンテナイメージ名「test-img」を削除する
docker image rm test-img

コマンドで未使用のコンテナイメージを全て削除する

未使用のコンテナイメージがたくさんあって、1つ1つ削除するのがメンドウな場合には、 docker image prune コマンドが便利です。

オプション無しで使用した場合は、宙ぶらりんイメージ(dangling image)のみ削除されます。 宙ぶらりんイメージとは、タグを持たず、他のコンテナからも参照されていないコンテナイメージです。

未使用のコンテナイメージを全て削除するには、-a オプションを使用します。

書式
docker image prune
例:未使用のコンテナイメージを全て削除する
docker image prune -a

Docker Hub にコンテナイメージをアップロードする

コンテナイメージを Docker Hub にアップロードすると、複数人で同じコンテナイメージを共有したりできます。

プライベートリポジトリを作成する

Docker Hub にアップロードするコンテナイメージはデフォルトでは公開リポジトリになり、誰でもダウンロードできる状態になります。 プライベートリポジトリにしたい場合は、先に Docker Hub でプライベートリポジトリを作成する必要があります。 Docker Hub の Personal プランでは、プライベートリポジトリは1つしか作成できません。 注意してください。

docker_hub_private.png

コンテナイメージにタグを付ける

Docker Hub にコンテナイメージをアップロードするには、コンテナイメージの名前を「Docker ID(ユーザー名)/コンテナイメージの名前」の形式に変更し、任意のタグを付ける必要があります。 docker image tag コマンドを使用すると、コンテナイメージの名前の変更と、タグを付けることができます。 タグが未指定の場合は、タグはデフォルトで「latest」(つまり、最新版)になります。

書式
docker image tag <古いコンテナイメージ名前[:タグ]> <新しいコンテナイメージ名前[:タグ]>
例:コンテナイメージ名「old-img」を元にして、
Docker ID(ユーザー名)「test-user」、コンテナイメージ名「test-img」、タグ「1.0」を付ける
docker image tag old-img test-user/test-img:1.0

Doker ID でログインする

Docker Hub にコンテナイメージをアップロードするには、先に Docker ID でのログインが必要になります。 Docker ID でのログイン方法は、「Docker の使い方(その1:概要)」を参照してください。

Docker Hub にコンテナイメージをアップロードするには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。

Docker Desktop でコンテナイメージをアップロードする

Docker Desktop でコンテナイメージをアップロードするには、Docker Desktop の「Images」からアップロードするしたいコンテナイメージのメニューを表示し、「Push to Hub」をクリックします。

image_push_to_hub.png

コマンドでコンテナイメージをアップロードする

コマンドでコンテナイメージをアップロードするには、docker image push コマンドを使用します。 docker image push コマンドには、コンテナイメージの名前とタグを指定できます。 タグが未指定の場合は、タグはデフォルトで「latest」(つまり、最新版)になります。

書式
docker image push <Docker ID(ユーザー名)/コンテナイメージの名前[:タグ]>
例:Docker ID(ユーザー名)「test-user」、
コンテナイメージ名「test-img」、タグ「latest」をアップロードする
docker image push test-user/test-img
例:Docker ID(ユーザー名)「test-user」、
コンテナイメージ名「test-img」、タグ「1.0」をアップロードする
docker image push test-user/test-img:1.0

Docker Hub のコンテナイメージのタグを削除する

Docker Hub からコンテナイメージのタグを削除するには、「Tags」から削除したいタグにチェックを付けて「Delete」ボタンをクリックします。

docker_hub_tag_delete.png

Docker Hub のコンテナイメージを削除する

Docker Hub からコンテナイメージ(リポジトリ)を削除するには、「Settings」から「Delete repository」ボタンをクリックします。

docker_hub_delete_repository.png

参考サイト

関連記事

最近では、アプリケーションの実行環境の構築に Docker を使うことも珍しくなくなりました。Docker は便利ではあるのかもしれませんが、難しく感じて敬遠されている人もいるのではないでしょうか。その感覚はおそらく間違っていません。実際、知れば知るほど奥が深い技術だと感じてしまいます。もはや沼というか深淵を覗いている ...
前回、「Docker の使い方(その1:概要)」の続きです。今回はコンテナについてです。コンテナの一覧を表示するコンテナの一覧を表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。Docker Desktop でコンテナの一覧を表示するDocker Desktop でコンテ ...
前回、「Docker の使い方(その3:コンテナイメージ)」の続きです。今回はボリュームについてです。ボリュームコンテナは作り直すと中身が初期状態に戻ってしまいます。ですが、コンテナの中のアプリケーションが作成したファイルなど、残しておいてほしいファイルもあると思います。例えばデータベースに保存されているデータなどです ...
前回、「Docker の使い方(その4:ボリューム)」の続きです。今回はネットワークについてです。複数のコンテナを連携させるこれまでは1つのコンテナについて説明してきましたが、複数のコンテナを連携させたい場合はどうすればよいでしょうか。例えば、Webサーバーコンテナと、DBサーバーコンテナを通信させたいような場合です。 ...
前回、「Docker の使い方(その5:ネットワーク)」の続きです。今回は Docker Compose についてです。Docker Compose とは?ここまで Docker の基本的な操作について説明してきました。コンテナを使ってアプリケーションを起動するためには、コンテナイメージからコンテナを起動し、そのコンテ ...

お知らせ

記事検索

最新記事

人気記事

RSSフィード

フィードバック

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

匿名でフィードバックする
匿名でフィードバックする

要望などあれば、お気軽にどーぞ。 不具合やバグを発見した場合も、連絡をいただけると助かります。

なお、このフォームから入力された内容について、管理者から返信はできませんので注意してください。 もし、管理者からの返信が必要であれば、X(旧 Twitter) もしくは、お問い合わせより、お願いします。