Docker:【はじめて自作した】Dockerイメージ


はじめに

概要

  • ベースイメージをカスタマイズ
  • 独自の環境イメージを作成して、コンテナ実行する

手順の流れ

  • Dockerファイルの作成
    • Dockerイメージを作成する設定ファイル
    • どのような環境にするか記載する
  • イメージのビルド
    • 作成したDockerファイルを使ってイメージを作成
    • 今回は標準のファイル名「Dockerfile」を利用した
  • コンテナ実行
    • 作成したDockerイメージを使って実行

前提

準備

Dockerファイル作成

cat <<+ > Dockerfile
FROM alpine
CMD ["/bin/sh", "-c", "echo AI Self Studying by \$AUTHOR."]
+
ls -l Dockerfile
-rw-rw-r-- 1 futa futa 71 Feb 17 23:54 Dockerfile
  • cat <<+ > Dockerfile
    • Dockerファイルを作成
    • viなどのエディタでもいいが、コピペできるようにLinuxのヒアドキュメントを利用
  • ls -l Dockerfile
    • Dockerファイルが作成されたことを確認
  • FROM
    • Apline Linuxがベースイメージ
    • バージョン指定していないので最新(leatest)
    • バージョン指定する場合はalpine:3.5のようにする
  • CMD
    • 「,」で区切ってコマンドを記載
    • /bin/shを起動
    • -c …… コマンド実行するshellのオプション
    • 実行するコマンド「echo …」
    • 環境変数を「AUTHOR」とする
  • 環境変数「AUTHOR」について
    • コンテナ実行時に引数で値を指定できる
  • 補足

ベースイメージのダウンロード

sudo docker images
sudo docker pull alpine
sudo docker images
$ sudo docker images
REPOSITORY                  TAG       IMAGE ID       CREATED        SIZE
hello-world                 latest    feb5d9fea6a5   4 months ago   13.3kB
ubuntu                      12.04     5b117edd0b76   4 years ago    104MB
dockersamples/static-site   latest    f589ccde7957   5 years ago    191MB

$ sudo docker pull alpine
Using default tag: latest
latest: Pulling from library/alpine
59bf1c3509f3: Pull complete
Digest: sha256:21a3deaa0d32a8057914f36584b5288d2e5ecc984380bc0118285c70fa8c9300
Status: Downloaded newer image for alpine:latest
docker.io/library/alpine:latest

$ sudo docker images
REPOSITORY                  TAG       IMAGE ID       CREATED        SIZE
alpine                      latest    c059bfaa849c   2 months ago   5.59MB
hello-world                 latest    feb5d9fea6a5   4 months ago   13.3kB
ubuntu                      12.04     5b117edd0b76   4 years ago    104MB
dockersamples/static-site   latest    f589ccde7957   5 years ago    191MB
  • docker images
    • 現在あるイメージを一覧表示する
  • docker pull
    • イメージのダウンロード
    • 今回は「alpline」を指定してDocker HUBよりAlpine Linuxのイメージをダウンロード
  • 結果考察
    • ダウンロードが成功した
    • イメージ一覧に表示されている(REPOSITORY列が「alpine」)

Dockerイメージ作成と実行

イメージビルド

sudo docker build -t futa-sample .
sudo docker images
$ sudo docker build -t futa-sample .
Sending build context to Docker daemon  2.048kB
Step 1/2 : FROM alpine
 ---> c059bfaa849c
Step 2/2 : CMD ["/bin/sh", "-c", "echo AI Self Studying by $AUTHOR."]
 ---> Running in 713d99150c66
Removing intermediate container 713d99150c66
 ---> 4538bbabe489
Successfully built 4538bbabe489
Successfully tagged futa-sample:latest

$ sudo docker images
REPOSITORY                  TAG       IMAGE ID       CREATED          SIZE
futa-sample                 latest    4538bbabe489   15 seconds ago   5.59MB
alpine                      latest    c059bfaa849c   2 months ago     5.59MB
hello-world                 latest    feb5d9fea6a5   4 months ago     13.3kB
ubuntu                      12.04     5b117edd0b76   4 years ago      104MB
dockersamples/static-site   latest    f589ccde7957   5 years ago      191MB
  • docker build
    • Dockerイメージをビルドする
      • Dockerファイルに記載したコマンドが順次実行されている
    • 「-t」
      • タグ名を指定
      • タグ名は「futa-sample」
    • 「.」
      • カレントディレクトリにあるDockerファイルを使う
      • Dockerファイル名は標準の「Dockerfile」を使用
  • docker images
    • イメージを一覧表示する
    • REPOSITORY列に「futa-sample」が表示されている
  • 補足
    • docker buildで「-f」オプションを使えば、任意のDockerファイル名を利用できる

コンテナの実行

sudo docker run --name futa-conte -e AUTHOR=futa futa-sample
$ sudo docker run --name futa-conte -e AUTHOR=futa futa-sample
AI Self Studying by futa.
  • docker run
    • 指定したイメージを使ってコンテナ実行する
  • –name(nameの左のハイフン2つ)
    • コンテナ名を指定
    • コンテナ名は「futa-conte」とした
  • -e
    • コンテナに渡す環境変数を指定する
    • コンテナに渡す環境変数「AUTHOR」に「futa」を設定
  • -P
    • 「-P」は省略した
    • コンテナ実行するイメージを指定する
    • イメージ名は先ほど自作した「futa-sample」を設定
  • 結果考察
    • DockerファイルのCMDで設定したコマンド(echo …)が実行された
    • 環境変数AUTHORはコンテナ実行時のオプション「-e」で設定した「futa」に置き換わった

コンテナ実行履歴を確認

sudo docker ps -a
$ sudo docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED         STATUS                     PORTS     NAMES
a87e101fc051   futa-sample   "/bin/sh -c 'echo AI…"   6 minutes ago   Exited (0) 6 minutes ago             futa-conte
be19cc34d51b   hello-world   "/hello"                 3 days ago      Exited (0) 3 days ago                condescending_almeida
13e8f94aab43   hello-world   "/hello"                 3 days ago      Exited (0) 3 days ago                gallant_lumiere
e62a017fdc2d   hello-world   "/hello"                 3 days ago      Exited (0) 3 days ago                magical_euclid
  • docker ps -a
    • コンテナ実行履歴が確認できる
    • 「-a」オプションがなければ、実行中のコンテナを確認できる
    • 今回は実行が終わっている(echo …で終了)ので「-a」オプションを付ける
  • 一覧表示
    • CONTAINER ID列 …… コンテナID「a87e101fc051」
    • IMAGE列 …… 先ほど作成したイメージ「futa-sample」
    • COMMAND列 …… DockerファイルのCMDで設定したコマンド「/bin/sh -c 'echo AI…」(表示は一部)
    • NAMES列 …… 実行コンテナ名は「futa-conte」

後処理

コンテナ実行履歴を削除

sudo docker ps -a
sudo docker rm futa-conte
sudo docker ps -a
$ sudo docker ps -a
CONTAINER ID   IMAGE         COMMAND                  CREATED          STATUS                      PORTS     NAMES
a87e101fc051   futa-sample   "/bin/sh -c 'echo AI…"   10 minutes ago   Exited (0) 10 minutes ago             futa-conte
be19cc34d51b   hello-world   "/hello"                 3 days ago       Exited (0) 3 days ago                 condescending_almeida
13e8f94aab43   hello-world   "/hello"                 3 days ago       Exited (0) 3 days ago                 gallant_lumiere
e62a017fdc2d   hello-world   "/hello"                 3 days ago       Exited (0) 3 days ago                 magical_euclid

$ sudo docker rm futa-conte
futa-conte

$ sudo docker ps -a
CONTAINER ID   IMAGE         COMMAND    CREATED      STATUS                  PORTS     NAMES
be19cc34d51b   hello-world   "/hello"   3 days ago   Exited (0) 3 days ago             condescending_almeida
13e8f94aab43   hello-world   "/hello"   3 days ago   Exited (0) 3 days ago             gallant_lumiere
e62a017fdc2d   hello-world   "/hello"   3 days ago   Exited (0) 3 days ago             magical_euclid
  • docker ps -a
    • 実行履歴の確認
    • NAME列の「futa-conte」を確認
      (削除キーワード)
  • docker rm
    • コンテナ実行履歴を削除する
    • コンテナID「a87e101fc051」を使っても削除可能
  • 結果考察
    • 「docker rm」で削除成功したので、削除したコンテナ名「futa-conte」が表示された
    • コンテナ実行履歴の一覧表示から「futa-conte」がなくなっている

イメージを削除

sudo docker images
sudo docker rmi futa-sample alpine
sudo docker images
$ sudo docker images
REPOSITORY                  TAG       IMAGE ID       CREATED          SIZE
futa-sample                 latest    4538bbabe489   24 minutes ago   5.59MB
alpine                      latest    c059bfaa849c   2 months ago     5.59MB
hello-world                 latest    feb5d9fea6a5   4 months ago     13.3kB
ubuntu                      12.04     5b117edd0b76   4 years ago      104MB
dockersamples/static-site   latest    f589ccde7957   5 years ago      191MB

$ sudo docker rmi futa-sample alpine
Untagged: futa-sample:latest
Deleted: sha256:4538bbabe4897816892c2a9b433e203a59e57bbf01cfdc6f33b28a73d4a5a2cb
Untagged: alpine:latest
Untagged: alpine@sha256:21a3deaa0d32a8057914f36584b5288d2e5ecc984380bc0118285c70fa8c9300
Deleted: sha256:c059bfaa849c4d8e4aecaeb3a10c2d9b3d85f5165c66ad3a4d937758128c4d18
Deleted: sha256:8d3ac3489996423f53d6087c81180006263b79f206d3fdec9e66f0e27ceb8759

$ sudo docker images
REPOSITORY                  TAG       IMAGE ID       CREATED        SIZE
hello-world                 latest    feb5d9fea6a5   4 months ago   13.3kB
ubuntu                      12.04     5b117edd0b76   4 years ago    104MB
dockersamples/static-site   latest    f589ccde7957   5 years ago    191MB
  • docker images
    • 今あるイメージを一覧表示
    • REPOSITORY列「futa-sample」「alpine」がある
  • docker rmi
    • イメージ削除を実行
    • 「futa-sample」「alpine」を同時に指定
  • 結果考察
    • 一覧から「futa-sample」「alpine」が消えた
    • 掃除終わり!

リファレンス


Posted by futa