Docker の使い方(その3:コンテナイメージ)
前回、「Docker の使い方(その2:コンテナ)」の続きです。今回はコンテナイメージについてです。
コンテナイメージの一覧
コンテナイメージの一覧を表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。
Docker Desktop でコンテナイメージの一覧を表示する
Docker Desktop でコンテナイメージの一覧を表示するには、Docker Desktop の左メニューの「Images」をクリックします。
コマンドでコンテナイメージの一覧を表示する
コマンドでコンテナイメージの一覧を表示するには、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 のコンテナイメージを探す
コマンドで Docker Hub のコンテナイメージを探すには、docker search
コマンドを使用します。
docker search <検索ワード>
docker search httpd
Docker Hub からコンテナイメージをダウンロードする
コンテナイメージは、docker container create
/ docker container run
コマンドを実行した際に、Docker Hub から自動でダウンロードされますが、
ダウンロードのみを行いたい場合は、docker image pull
コマンドを使用します。
docker image pull
コマンドには、コンテナイメージの名前とタグを指定できます。
タグが未指定の場合は、タグはデフォルトで「latest」(つまり、最新版)になります。
docker image pull <コンテナイメージの名前[:タグ]>
docker image pull httpd
docker image pull httpd:2.4
コンテナイメージを作成する
コンテナイメージを自分で作成するには、Dockerfile と docker image build
コマンドを使用します。
Dockerfile
Dockerfile は、コンテナイメージをどのように作成するかを記載したシンプルなテキストベースのスクリプトファイルです。 「Dockerfile」というファイル名で作成します。拡張子は無いので注意してください。
詳しい 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の場所>
docker image build -t test-img .
コンテナからコンテナイメージを作成する
コンテナからコンテナイメージを作成することもできます。
コンテナイメージからコンテナを作成するには、docker container create
コマンドを使用しましたが、
その逆に、コンテナからコンテナイメージを作成するには、docker container commit
コマンドを使用します。
基本的には、前述の Dockerfile を使用してコンテナイメージを作成した方が、変更内容が文書化されているため良いとされています。 ですが、こちらの方が気軽に使用できるため、コンテナ自体のデバッグを行ったりする場合には便利かもしれません。
docker container commit <コンテナのIDもしくは名前> <コンテナイメージの名前[:タグ]>
docker container commit test-app new-img
コンテナイメージに脆弱性が存在するか調べる
作成したコンテナイメージに脆弱性が存在するか調べることができます。 Docker Hub の Personal プランでは、1か月につき10回まで無料で行うことができます。
Doker ID でログインする
コンテナイメージに脆弱性が存在するか調べるには、先に Docker ID でのログインが必要になります。 Docker ID でのログイン方法は、「Docker の使い方(その1:概要)」を参照してください。
コンテナイメージに脆弱性が存在するか調べる
コンテナイメージに脆弱性が存在するか調べるには、docker scan
コマンドを使用します。
docker scan <コンテナイメージの名前>
docker scan test-img
コンテナイメージの履歴を表示する
コンテナイメージがどのように構築されたかを確認したい場合は、コンテナイメージの履歴から確認できます。 コンテナイメージの履歴を表示するには、Docker Desktop から行う方法と、コマンドで行う方法の2種類があります。
Docker Desktop でコンテナイメージの履歴を表示する
Docker Desktop でコンテナイメージの履歴を表示するには、Docker Desktop の「Images」からコンテナイメージの履歴を表示したいコンテナイメージのメニューを表示し、「Inspect」をクリックします。
コマンドでコンテナイメージの履歴を表示する
コマンドでコンテナイメージの履歴を表示するには、docker image history
コマンドを使用します。
docker image history <コンテナイメージのIDもしくは名前>
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」をクリックします。
コマンドでコンテナイメージを削除する
コマンドでコンテナイメージを削除するには、docker image rm
コマンドを使用します。
docker image rm <コンテナイメージのIDもしくは名前>
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 にコンテナイメージをアップロードするには、コンテナイメージの名前を「Docker ID(ユーザー名)/コンテナイメージの名前」の形式に変更し、任意のタグを付ける必要があります。
docker image tag
コマンドを使用すると、コンテナイメージの名前の変更と、タグを付けることができます。
タグが未指定の場合は、タグはデフォルトで「latest」(つまり、最新版)になります。
docker image tag <古いコンテナイメージ名前[:タグ]> <新しいコンテナイメージ名前[:タグ]>
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」をクリックします。
コマンドでコンテナイメージをアップロードする
コマンドでコンテナイメージをアップロードするには、docker image push
コマンドを使用します。
docker image push
コマンドには、コンテナイメージの名前とタグを指定できます。
タグが未指定の場合は、タグはデフォルトで「latest」(つまり、最新版)になります。
docker image push <Docker ID(ユーザー名)/コンテナイメージの名前[:タグ]>
コンテナイメージ名「test-img」、タグ「latest」をアップロードする
docker image push test-user/test-img
コンテナイメージ名「test-img」、タグ「1.0」をアップロードする
docker image push test-user/test-img:1.0
Docker Hub のコンテナイメージのタグを削除する
Docker Hub からコンテナイメージのタグを削除するには、「Tags」から削除したいタグにチェックを付けて「Delete」ボタンをクリックします。
Docker Hub のコンテナイメージを削除する
Docker Hub からコンテナイメージ(リポジトリ)を削除するには、「Settings」から「Delete repository」ボタンをクリックします。
参考サイト
- Sample application | Docker Documentation
- Update the application | Docker Documentation
- Share the application | Docker Documentation
- Image-building best practices | Docker Documentation
- Vulnerability scanning for Docker local images | Docker Documentation
- イメージの構築と実行 — Docker-docs-ja 19.03 ドキュメント
- Docker Hub 上でイメージを共有 — Docker-docs-ja 19.03 ドキュメント
- Dockerfile reference | Docker Documentation
- Dockerfile リファレンス — Docker-docs-ja 20.10 ドキュメント
- docker image ls | Docker Documentation
- docker search | Docker Documentation
- docker image pull | Docker Documentation
- docker image tag | Docker Documentation
- docker image push | Docker Documentation
- docker image build | Docker Documentation
- docker container commit | Docker Documentation
- docker image history | Docker Documentation
- docker image rm | Docker Documentation
- docker image prune | Docker Documentation