続いては今回はCOPY, ADD, CMD, ENTRYPOINT, ENV, WORKDIRの紹介です。
COPY
ホストからファイルをコンテナに渡す時に使います。
COPY <コピーするファイル名> <コンテナ内のコピー先ディレクトリ>
簡単な例ですが、ubuntuのOSでディレクトリを作ってファイルをコピーする場合の記述です。
FROM ubuntu:latest
RUN mkdir /test_dir
COPY hoge.txt /test_dir
もう一つファイルをコンテナに追加するコマンドとしてADD
というものが存在します。
ADD
ファイルやフォルダをコンテナにコピーすることができるコマンドですが、COPY
と決定的に違う点があります。tarの圧縮ファイルをコピー+解凍することができます。
ファイルが重かったり、フォルダ階層で転送するサイズが大きいものをそのままコンテナに渡すと、コンテナに渡すだけでも時間がかかります。そう言った場合にtarで圧縮してコンテナにコピーする際にADD
で記述すると送信自体も早く済み、解凍された状態で展開されます。
ADD <コピーする圧縮されたファイル名> <コンテナ内のコピー先ディレクトリ>
COPYと違うのはファイルが圧縮されているかどうかだけなので例は割愛します。
ENTRYPOINT
CMD
と同じようにdocker run時に最後に実行するコマンドを指定する。
CMD
はdocker run時にコマンドを上書きすることができますが、ENTRYPOINT
は最後のコマンドを上書きできません。
記述の仕方はCMD
は["コマンド"(, "引数1", "引数2")]のように引数も続けて指定しましたが、ENTRYPOINT
はコマンドのみを指定し、その引数はCMD
を使って指定します。
ENTRYPOINT
はコマンドは変更できませんが、CMD
で指定している引数部分は上書きができます。
FROM ubuntu:latest
CMD ["コマンド", "引数1", "引数2"]
FROM ubuntu:latest
ENTRYPOINT ["コマンド"]
CMD ["引数1", "引数2"]
基本的にはCMD
だけで事足りると思います。
ENV
環境変数を設定できます。記述の仕方としてはいろいろあります。下記3つ目の例のように複数並べての記述も可能です。
ENV key1 val
ENV key2=val
ENV key3=val3 key3=val3
複数を一度に記述する場合で環境変数値(上記のval)に半角スペースがある時はダブルクォーテーションで括るか、エスケープすることで設定できます。
ENV key4="v a l 4" key5=v\ a\ l\ 5
1行だけの場合は下記のように記述することもできます。
ENV key6 v a l 6
これでコンテナ内でパスを通す、などの作業ができるようになります。
WORKDIR
Dockerfileに記述したRUN
で実行しているコマンドを実行するディレクトリを変更することができます。
WORKDIR 絶対パス
cd
だとRUN
するたびにルートに戻るので作業ディレクトリを固定してRUN
実行したい時にWORKDIR
を使ってディレクトリ移動してください。。
おしまい
今回のコマンドで基本的なDocker instructionについての紹介は終わりです。前回の紹介したコマンドと合わせることでおおよそ頻繁に使うコマンドについては網羅できているかと思います。
Docker、便利なんでぜひお試しください。