LoginSignup
1
1

More than 3 years have passed since last update.

【Docker】その他のよく使う(と思われる)Docker Instructions

Posted at

続いては今回はCOPY, ADD, CMD, ENTRYPOINT, ENV, WORKDIRの紹介です。

COPY

ホストからファイルをコンテナに渡す時に使います。

記述の仕方
COPY <コピーするファイル名> <コンテナ内のコピー先ディレクトリ>

簡単な例ですが、ubuntuのOSでディレクトリを作ってファイルをコピーする場合の記述です。

Dockerfile
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で指定している引数部分は上書きができます。

CMDの場合の記述の仕方
FROM ubuntu:latest
CMD ["コマンド", "引数1", "引数2"]
ENTRYPOINTの場合の記述の仕方
FROM ubuntu:latest
ENTRYPOINT ["コマンド"]
CMD ["引数1", "引数2"]

基本的にはCMDだけで事足りると思います。

ENV

環境変数を設定できます。記述の仕方としてはいろいろあります。下記3つ目の例のように複数並べての記述も可能です。

記述の仕方
ENV key1 val
ENV key2=val
ENV key3=val3 key3=val3

複数を一度に記述する場合で環境変数値(上記のval)に半角スペースがある時はダブルクォーテーションで括るか、エスケープすることで設定できます。

複数ENVの設定を一行で記述の仕方
ENV key4="v a l 4" key5=v\ a\ l\ 5

1行だけの場合は下記のように記述することもできます。

一つのENVでスペースまじりの環境変数設定の記述の仕方
ENV key6 v a l 6

これでコンテナ内でパスを通す、などの作業ができるようになります。

WORKDIR

Dockerfileに記述したRUNで実行しているコマンドを実行するディレクトリを変更することができます。

記述の仕方
WORKDIR 絶対パス

cdだとRUNするたびにルートに戻るので作業ディレクトリを固定してRUN実行したい時にWORKDIRを使ってディレクトリ移動してください。。

おしまい

今回のコマンドで基本的なDocker instructionについての紹介は終わりです。前回の紹介したコマンドと合わせることでおおよそ頻繁に使うコマンドについては網羅できているかと思います。
Docker、便利なんでぜひお試しください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1