Docker:【コンテナ】実行時にコマンド追加
目次
はじめに
概要
- 通常
- イメージ(Dockerイメージ)をコンテナ実行する
- コンテナ実行時のコマンドはDockerファイルの「CMD」コマンドで記述しておく
- ここに書いたこと
- 後からコンテナに対してコマンドを追加する場合
- 記載方法とサンプルコード
前提
- Dockerコマンドの基本
- Dockerファイルを使ったイメージ作成(特にCMD、ENV、RUN)
コマンド追加方法
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 – <<+
- イメージ(Dockerイメージ)を作成
- 作成するイメージのリポジトリ名を「sample-image1」に設定
- 参考
- ヒアドキュメントの説明(- <<)
- Dockerファイル:【ファイルなし】でbuildを実行
- FROM
- ベースイメージ
- alpine(Alpine Linux)を指定
※持ってなければDocker HUBより自動ダウンロードされる
- ENV
- 環境変数ADMIN_USER作成
- 初期値「futa」を設定
- RUN
- ENV環境変数の値をカレントディレクトリのファイル「hello」に出力
- ヒアドキュメントなので「$」を「\」でエスケープ
- ファイル「hello」には「futa」が書き出されている
- unsetで環境変数のクリア
- ENV環境変数の値をカレントディレクトリのファイル「hello」に出力
- CMD
- なし
- コンテナ実行時に何もコマンド実行されない
- docker images
- 作成されたイメージを一覧で確認
- REPOSITORY列が「sample-image1」のデータがある
- イメージが作成された
- 参考
- Dockerファイルのコマンドの説明
- Dockerファイル:【書き方】と【使い方】
コマンド追加実行
sudo docker run --rm sample-image1 sh -c 'cat ./hello'
futa
- docker run –rm sample-image1 …
- コンテナ実行する
- コンテナ実行に使用するイメージは「sample-image1」
- 最後の「…」のところに追加実行したいコマンドを記載する
- 参考
- –rmオプションについて(rmの左のハイフンは2つ)
- Docker:【履歴削除】が不要になる方法
- 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の動きをサンプルコードを使いながら説明
- どのように影響を受けるかが分かります
リファレンス

