docker buildコマンドおさらい 

はじめに

docker buildを中心とするdockerコマンドの基本的なところをまとめた。基礎に立ち返って再入門する。

Dockerコマンドについて

よく使うのはこのあたり

コマンド意味
runDockerイメージからDockerコンテナを作成
execDockerコンテナでコマンド実行
pushDockerイメージをDockerレジストリへ送信
buildDockerfileに基づき、imageを作成
rm停止中のコンテナを削除
rmiDockerホスト上のイメージを削除
commitDockerコンテナからイメージを作成する
kill起動中のコンテナを強制停止
loadtarアーカイブからDockerイメージを読み込む
tag既存のDockerイメージから新しDockerイメージを作成
historyDockerイメージの精製履歴を表示
psDockerコンテナ一覧を表示

Dockerfileとは

DockerイメージはDockerfileというファイルを生成、buildコマンドで読み込ませることによりイメージにすることが可能。

基本構文はこちら

デフォルトでコマンドを実行するディレクトリにあるDockerfileが読み込まれる。

AnsibleやChefなどを用いて環境構築することもできるが、Dockerfileでも構築手順が明確になる。

コマンド意味
FROMベースになるDockerイメージを指定
ENV環境変数を設定
ARGbuild時の引数を定義するコマンド
デフォルト値の設定も可能
buildコマンドから --build-argsオプションを使う
LABELDockerイメージにメタデータを付与
versionやdescriptionを記載
RUNshellの実行を行う
SHELLデフォルトのシェルを設定
WORKDIR基点となるいディレクトリを設定
これを設定すると、Dockerfile内の多くのコマンドが相対パスで利用可能
ADDファイルやディレクトリのコピー
(重要!圧縮ファイルは自動的に展開される)
COPYファイルやディレクトリを指定したURLからコピー。(重要!圧縮ファイルは展開されない)
EXPOSEコンテナがlistenするポートを明記
ENTRYPOINTコンテナ起動時に実行するコマンド
CMDENTRYPOINTと同じくコンテナ起動時に実行するコマンドを指定

動いているコンテナを全て止める

停止前の状態

docker ps -qでコンテナIDのみ表示させることが可能。

それとdocker stopコマンドを組み合わせることにより、動いているコンテナを停止させる事ができる。

止まっているコンテナを削除する

このコンテナを削除

docker ps -qaで停止しているコンテナID一覧が表示できる。これとdocker rmコマンドを組み合わせる。

docker build時のキャッシュの利用を止める

Dockerをbuildしている時、以下のようにキャッシュを使われてしまう事がある。その利用を停止させる

docker buildするとデフォルトで --no-cache=false が設定されている。これを --no-cache=true にすることにより、キャッシュを使わずbuildする事が可能になる。

Dockerfileは以下とする

キャッシュを利用した場合

キャッシュを利用しなかった場合

docker inspectを利用する

docker inspectはイメージの詳細を調べるコマンド

docker run

shellの実行を行うためのコマンド

RUN <command> shell from

shell fromと呼ばれる使われ方

SHELLの値にもとづいたコマンドによって実行される。

/bin/sh -c で実行される

RUN [“executable”, “param1″,”param2”] (exec from)

exec fromと呼ばれる使われ方

SHELLの値とは無関係に実行可能コマンドを直接実行

shell fromとexec fromの違い

shell fromはSHELLの設定により実行される
 /bin/sh -c echo $HOGE

exec from はexecutableに指定されたコマンドが実行

コマンドシェル経由での実行ではなく、直接実行する

  echo $HOGE    

参考方法: https://docs.docker.com/engine/reference/builder/#run

/bin/sh: 1: Syntax error: “(” unexpected

shellの指定がされていない可能性が高い

RUNコマンドの前に上記SHELLを追加することにより解消できる

SHELL

SHELLコマンドはRUNやCMD,ENTRYPOINTなどでshell fromが行われた際のコマンドを指定する事が可能

SHELL ["executable", "parameters"]

WORKDIR

linuxで言うところの、mkdirとcdを同時に実行しているようなコマンド

と言うdockerfileがあったとすると、

と表示される

ADDとCOPYの違い

COPYはURLを指定する事ができない

圧縮ファイル(tarファイル)を自動で解凍しない

ENTRYPOINT

exec from

exec fromは推奨された使い方。

Dockerfile

build

PIDが1で起動される

shell from

こちらが推奨された使い方ではない

Dockerfile

build

docker run

1はshが動き、shell fromによって起動されたコマンドは別プロセスになってしまう。これにより、ホスト側が実施したコマンドを直接受け取る事ができない。

docker stopの動作

docker stopを実施すると、PID 1にSIGTERMを送信する。

しかしデフォルトで10秒応答が返ってこない場合はSIGKILLを実施。強制終了させると言う仕様がある。

shell fromとexecの違い

RUNはあくまでもDockerイメージをbuildするために実際にコンテナでコマンドを実施。commitすることにイメージに変更を加える。

 

 

Facebook Comments