【Docker】Docker ~ 基本編 / docker imageコマンド ~

■ はじめに

https://dk521123.hatenablog.com/entry/2020/04/24/160044
https://dk521123.hatenablog.com/entry/2018/04/10/234030
https://dk521123.hatenablog.com/entry/2020/04/11/000000

の続き。

今回は、docker image コマンド を扱う。
また、以下の動画を見ながらやるといいかも。

https://dotinstall.com/lessons/basic_docker

目次

【0】予備知識
 1)Docker における基本操作
 2)コマンドの基本体系
 3)遷移図
【1】docker image ls
 Tips:Docker image ID を取得する
【2】docker image build
【3】docker search
【4】docker image pull
【5】docker image inspect
【6】docker image rm
 Tips:再タグ付け
【7】docker exec
【8】docker tag / docker image tag

【0】予備知識

1)Docker における基本操作

* Docker における基本操作は、以下に大別できる。
~~~~~~~~~~
[1] Dockerイメージに関する操作
[2] Dockerコンテナに関する操作
~~~~~~~~~~
=> 「[2] Dockerコンテナに関する操作」については、
  以下の関連記事を参照のこと

Docker ~ 基本編 / docker container コマンド ~
https://dk521123.hatenablog.com/entry/2022/01/20/000000

2)コマンドの基本体系

docker <操作グループ> <操作種類>
docker 何を どうする (引数) 具体的な名称
docker container run -d --name apache-demo httpd:latest

コマンド例

コマンド サブコマンド(カテゴリ) 操作 オプション
docker help
docker container run --help/-d/-it
docker container stop
docker container rm
docker image pull
docker image rm

補足:旧コマンドについて

* 上記については、docker v2 だが、
 docker v1 のコマンドも よく見るので知っておいた方がいい

https://qiita.com/zembutsu/items/6e1ad18f0d548ce6c266

v2 v1 Explanation
docker image ls docker images イメージ一覧表示
docker image rm docker rmi イメージを削除
docker image tag docker tag タグを付ける
docker image pull docker pull Dockerイメージをレジストリから取得

3)遷移図

                       +------------+
                       | Docker Hub |
                       +------------+
                             | ↑
                        pull | | push
                             ↓ |
+------------+  build  +--------------+ rmi
| Dockerfile | ------> | Docker Image | ------> Deleted
+------------+         +--------------+
                  ↙ ↗  create | ↑ commit
          run ↙ ↗ commit      ↓ |
+-----------+  stop   +-----------+ rm
| Container | ------> | Container | ------> Deleted
| (Running) | <------ | (Stopped) |
+-----------+   run   +-----------+

【1】docker image ls

* ローカル上で取得したDockerイメージ一覧表示
* 旧コマンドだと、「docker images」

https://docs.docker.jp/engine/reference/commandline/images.html

コマンド例

docker image ls

docker image ls -a

Tips:Docker image ID を取得する

# docker images (<イメージ名>:<タグ>) --format "{{.ID}}"
docker images --format "{{.ID}}"
# c23c9837dbc

https://www.k-hitorigoto.online/entry/2022/10/11/080000

出力形式
https://docs.docker.jp/engine/reference/commandline/images.html#docker-images-format-the-output

プレースホルダ 説明
.ID イメージ ID

【2】docker image build

* Dockerイメージのビルド

https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/image_build/

基本構文

docker image build -t [image name]:[tag] [Dockerfile path]

オプション

# オプション 説明
1 -t, --tag -t [イメージ名]:[タグ]で指定
2 -f, --file -f [Dockerfile Name]で指定
3 --pull --pull=trueでDockerイメージを再取得
4 --no-cache キャッシュを使わずに毎回すべてビルド
5 --network RUN 命令に対してネットワークモードを設定

コマンド例
https://dk521123.hatenablog.com/entry/2022/01/14/102719

# より抜粋

# DockerファイルからDockerイメージを作成
# docker build [ -t {イメージ名} [ :{タグ名} ] ] {Dockerfileのあるディレクトリ}
docker image build -t hello/world:latest .

docker image build -t hello/world:latest -f Dockerfile2 .

【3】docker search

* Dockerイメージの検索

コマンド例

sudo docker search centos | more

【4】docker image pull

* Dockerイメージをレジストリから取得(ダウンロード)
* 旧コマンド「docker pull」

https://docs.docker.jp/engine/reference/commandline/pull.html
https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/image_pull/

コマンド例

sudo docker pull centos

【5】docker image inspect

* Dockerイメージの詳細設定表示
* 旧コマンド「docker inspect」

コマンド例

sudo docker inspect e934aafc2206

【6】docker image rm

* Dockerイメージ削除
* 旧コマンド「docker rmi [イメージID] (rmi = REmove Image)」
 => 補足: docker rm は、コンテナ削除。

https://docs.docker.jp/engine/reference/commandline/image_rm.html
https://docs.docker.jp/engine/reference/commandline/rmi.html
コマンド例

docker image rm hello-world

Tips:再タグ付け

$ docker image pull hello-world

$ docker image ls
REPOSITORY       TAG              IMAGE ID            CREATED             SIZE
hello-world        latest              83eea1180916        15 minutes ago      6.96MB

# 再タグ付け
$ docker image tag hello-world:latest hello-world:renamed
# or "docker image tag 83eea1180916 hello-world:renamed"

$ docker image rm hello-world:latest
Untagged: hello-world:latest

$ docker image ls
REPOSITORY       TAG              IMAGE ID            CREATED             SIZE
hello-world        renamed              83eea1180916        15 minutes ago      6.96MB

https://tutorialcrawler.com/virtualization/docker/docker%E3%82%BF%E3%82%B0/

使用上の注意

* イメージを削除するには、コンテナが停止している必要がある

https://qiita.com/gisuyama7/items/82086b30f6b8e6fc14cf

 => そうしないと以下「エラー内容」が表示

エラー内容

Error response from daemon: conflict: unable to remove repository reference
 "hello-world" (must force) - container aa1a26a9a4aa is using
 its referenced image aa1a26a9a4bb

対応策

# コンテナが起動しているかを一覧表示
docker ps -a

# docker container rm <CONTAINER ID> でコンテナ停止
docker container rm aa1a26a9a4aa

# docker image rm <IMAGE NAME> でDockerイメージを削除
docker image rm hello-world

【7】docker exec

* Dockerコンテナ内に入る

コマンド例

docker exec -it <container_name> bash
# exit で出る

【8】docker tag / docker image tag

* ソースイメージを参照するタグを生成

https://docs.docker.jp/engine/reference/commandline/tag.html
https://matsuand.github.io/docs.docker.jp.onthefly/engine/reference/commandline/image_tag/

docker tag [ImageID] ([Repository]/)[ImageName]:[Tag]

https://docs.docker.jp/linux/step_six.html

参考文献

https://qiita.com/zembutsu/items/6e1ad18f0d548ce6c266

関連記事

Docker ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2020/04/24/160044
Docker ~ Windows / 環境構築編 ~
https://dk521123.hatenablog.com/entry/2017/09/23/235818
Docker ~ 基本編 / docker container コマンド ~
https://dk521123.hatenablog.com/entry/2022/01/20/000000
Docker ~ 基本編 / レポジトリに関するコマンド ~
https://dk521123.hatenablog.com/entry/2023/01/21/000000
脆弱性エラー対応時に役立ったDockerコマンド
https://dk521123.hatenablog.com/entry/2024/02/03/020736
Docker ~ ファイルをコンテナにコピー ~
https://dk521123.hatenablog.com/entry/2022/04/27/000000
Docker ~ 基本編 / Dockerfile ~
https://dk521123.hatenablog.com/entry/2020/04/14/000000
Docker ~ 基本編 / docker-compose ~
https://dk521123.hatenablog.com/entry/2020/04/11/000000
LocalStack ~ ローカルで疑似AWSを作成する ~
https://dk521123.hatenablog.com/entry/2019/12/14/010524
Amazon ECR ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2020/05/22/165711