LoginSignup
2
2

More than 1 year has passed since last update.

dockerfileに関して

Posted at

Dockerfileの変数に関して

毎回忘れちゃうので備忘録

ARG

Dockerfile内で使用できる変数として利用できる
docker-compose v2より、docker-compose.yml内でargsを利用でき、docker-compose.ymlで具体的な値を設定、Dockerfileで利用する的なことができる

  • Dockerfile
ARG NODE_VER
ARG RUBY_VER
ARG YARN_VER
  • docker-compose.yml
  web:
    build:
      context: .
      dockerfile: Dockerfile
      args:
        NODE_VER: "12"
        RUBY_VER: "2.6.6"
        YARN_VER: "v1.22.15"
        BUNDLE_VER: "2.3.5"

FROM

作成するコンテナのベースとなるイメージを指定する

  • Dockerfile
FROM ruby:${RUBY_VER} //${ARGで設定している変数が利用できる}

EXPOSE

公開するコンテナのポートを指定する

  • Dockerfile
EXPOSE 80

RUN

イメージを作成する際、実行したいコマンドなどを記載できる
複数指定する場合は「&&」が推奨されている

  • Dockerfile
RUN curl -sL https://deb.nodesource.com/setup_12.x | bash - && apt-get install -y nodejs
RUN apt-get install -y libjpeg62 libpng-dev libxrender-dev libfontconfig1-dev libxext-dev fonts-ipafont-gothic
RUN npm install --global yarn

CMD

コンテナ起動時に実行するコマンドとオプションを変更できる
原則は末尾に記載する
コンテナを実行したときに”デフォルトで”実行されるコマンド
ENTRYPOINTも指定されている場合は、ENTRYPOINTの引数として渡される

  • Dockerfile
# CMD ["実行コマンド", "オプション1", "オプション2"...]
# 記載例
CMD ["ls", "-a"]

ENTRYPOINT

コンテナ起動時に実行するコマンドとオプションを変更できる
原則は末尾に記載する
コンテナを実行したときに”必ず”実行されるコマンド

  • Dockerfile
# ENTRYPOINT  ["実行コマンド", "オプション1", "オプション2"...]
# 記載例
ENTRYPOINT ["ping","127.0.0.1","-c","100"]

WORKDIR

操作するディレクトリの絶対パス(推奨)を指定する
以降はそのディレクトリを基準にDockerfileに書いた操作が実行される

  • Dockerfile
# WORKDIR 絶対パス
# 記載例
WORKDIR /opt
今まで書いてきたDockerfile

ENV

環境変数の設定できる

  • Dockerfile
# ENV 環境変数名=値
# 記載例
ENV DB_USER="user" \
    DB_PASSWORD="password" \
    DB_DATABASE="sample_db"

COPY

明示的なコピー元とコピー先のファイルまたはディレクトリを指定して、ローカルファイルを再帰的にコピーする
COPYでは、場所を宣言する必要がある
COPYはソース側のマシンにあるものをImageへコピーするだけというシンプルな機能

  • Dockerfile
COPY ./file.conf /etc/conf

ADD

ローカルファイルを再帰的にコピーし、存在しない場合は暗黙的にコピー先ディレクトリを作成し、アーカイブをコピー元としてローカルURLまたはリモートURLとして受け入れる
アーカイブはそれぞれコピー先ディレクトリに展開またはダウンロードされる
ADDは対象が圧縮ファイルであればそれを展開してImageへ移し、リモート上のリソースも引っ張ってくる機能がついている

  • Dockerfile
ADD ./file.tar /etc/conf

ADDのリスク

  • リモート上のリソースを自動で取りに行くのでダウンロード中、中間者攻撃の対象となりえる
  • 圧縮ファイルを自動で展開するので、ZIP爆弾やZIP SLIP脆弱性攻撃の対象となりえる

※使い分けとしては容量が大きいファイル等をtarで圧縮した場合はADDでコピー、それ以外はCOPYといった感じ

参考記事

https://docs.docker.jp/engine/reference/builder.html
https://alterbo.jp/blog/ryu2-2106/
https://qiita.com/momotaro98/items/bf34eef176cc2bdb6892
https://qiita.com/soushiy/items/0945bcbc7ecce4822985
https://penpen-dev.com/blog/docker-cmd-entrypoin/

2
2
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
2
2