Docker:【コンテナ】実行時にコマンド追加


はじめに

概要

  • 通常
    • イメージ(Dockerイメージ)をコンテナ実行する
    • コンテナ実行時のコマンドはDockerファイルの「CMD」コマンドで記述しておく
  • ここに書いたこと
    • 後からコンテナに対してコマンドを追加する場合
    • 記載方法とサンプルコード

前提

コマンド追加方法

sudo docker run --rm sample-image1 sh -c 'cat ./hello'
  • 「sh -c 'xxx’」のように実行したいコマンドを記載
  • 複数コマンドがあれば「;」でつなぐ
    • 以降のサンプルコードで詳細を説明

サンプルコード

イメージ作成と実行

sudo docker build -t sample-image1 - <<+
# syntax=docker/dockerfile:1
FROM alpine
ENV ADMIN_USER="futa"
RUN echo \$ADMIN_USER > ./hello
RUN unset ADMIN_USER
+
sudo docker images
$ sudo docker build -t sample-image1 - <<+
> # syntax=docker/dockerfile:1
> FROM alpine
> ENV ADMIN_USER="futa"
> RUN echo \$ADMIN_USER > ./hello
> RUN unset ADMIN_USER
> +
Sending build context to Docker daemon  2.048kB
Step 1/4 : FROM alpine
 ---> c059bfaa849c
Step 2/4 : ENV ADMIN_USER="futa"
 ---> Running in 9258c3b1dbc3
Removing intermediate container 9258c3b1dbc3
 ---> 238bf286e782
Step 3/4 : RUN echo $ADMIN_USER > ./hello
 ---> Running in 6aaa48785eac
Removing intermediate container 6aaa48785eac
 ---> 3a1b354f9ea4
Step 4/4 : RUN unset ADMIN_USER
 ---> Running in b5bcae6c3e09
Removing intermediate container b5bcae6c3e09
 ---> 4839f752b2cf
Successfully built 4839f752b2cf
Successfully tagged sample-image1:latest

$ sudo docker images
REPOSITORY                  TAG       IMAGE ID       CREATED        SIZE
sample-image1               latest    4839f752b2cf   1 second 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 -t sample-image1 – <<+
  • FROM
    • ベースイメージ
    • alpine(Alpine Linux)を指定
      ※持ってなければDocker HUBより自動ダウンロードされる
  • ENV
    • 環境変数ADMIN_USER作成
    • 初期値「futa」を設定
  • RUN
    • ENV環境変数の値をカレントディレクトリのファイル「hello」に出力
      • ヒアドキュメントなので「$」を「\」でエスケープ
    • ファイル「hello」には「futa」が書き出されている
    • unsetで環境変数のクリア
  • CMD
    • なし
    • コンテナ実行時に何もコマンド実行されない
  • docker images
    • 作成されたイメージを一覧で確認
    • REPOSITORY列が「sample-image1」のデータがある
      • イメージが作成された
  • 参考

コマンド追加実行

sudo docker run --rm sample-image1 sh -c 'cat ./hello'
futa
  • docker run –rm sample-image1 …
    • コンテナ実行する
    • コンテナ実行に使用するイメージは「sample-image1」
    • 最後の「…」のところに追加実行したいコマンドを記載する
    • 参考
  • sh -c '…’
    • 追加実行するコマンド
    • sh
      • コンテナ内のshellを起動
    • -c
      • shellの実行オプション
      • 「’」(シングルクォーテーション)内のコマンドを実行する
  • cat ./hello
    • コンテナ実行時に実行するコマンド
    • コンテナ内のファイル「hello」の中身を表示(cat)する
    • 「futa」が表示される
  • 補足
    • DockerファイルのCMDコマンドの記載と同様の機能

後処理

sudo docker rmi sample-image1
sudo docker images
$ sudo docker rmi sample-image1
Untagged: sample-image1:latest
Deleted: sha256:4839f752b2cff7a1ac67a4559b30994b8211be77d6359fc4a9fa4d158553c64a
Deleted: sha256:3a1b354f9ea4bdfda905d5c6e66928f0bbff776b0e90e4aada8c242657df4a8d
Deleted: sha256:30311206fb471884428f204fe64d2d419887146085607916a78107bde24bd2b4
Deleted: sha256:238bf286e782c6a4879a0d3f0ecb69bb8715cc936f2edfa2c70d4662eaf23aee

$ 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 rmi sample-image1
    • イメージの削除
    • イメージのリポジトリ名「sample-image1」を指定
  • docker images
    • イメージ一覧の確認
    • 「sample-image1」が削除されている

参考記事紹介

DockerファイルのCMDコマンド

  • コンテナ実行時の動作は通常DockerファイルのCMDコマンドとして記載する
  • 記載例
    • CMD “sh" “-c" “cat ./hello"
    • CMD [“sh", “-c", “cat ./hello"]
  • 違い
    • CMD:イメージ作成時にコンテナ実行した場合に実行するコマンド
    • 今回の例:配布されたイメージをコンテナ実行した場合に実行したいコマンド
  • 参考記事
    • Dockerファイルの記載方法や実行方法を説明
    • CMD以外にも利用できるコマンドが分かります

WORKDIRについて

  • 実行ディレクトリ
    • コンテナ内のコマンド実行はWORKDIRの影響を受けます
    • もちろん今回のように外からコマンドを実行する場合も意識しておくべきです
  • 参考記事
    • WORKDIRの動きをサンプルコードを使いながら説明
    • どのように影響を受けるかが分かります

リファレンス


Posted by futa