- DSL:Docker独自の言語
Dockerfileに、インストラクション(命令)を書く。
Dockerfileの上から順に、実行されていく。
* インストラクション:FROM, RUN, CMD, etc.
- FROM
Dockerfile の一番上に記載する。
Dockerイメージのベースになるイメージを指定する。
指定するイメージは、Dockerhub に載っているものを使うのが通説。
- RUN
Dockerイメージをビルドする時に、コンテナ内で実行するコマンドを書く。
- COPY:COPY <ローカルfile or dir名> <コピー先>
ローカルホスト(自分のpc)で作ったソースコードをdockerイメージに送る。
COPY index.html /var/www/html/
:ローカルの index.html をdocker の /var/www/html/ 直下にコピペする という意味
因みに、「apache」 の仕様上、デフォルトでは/var/www/html/
の直下にあるファイルを読み込むようになっている。
FROM ubuntu:22.10 RUN apt update \ && apt install -y apache2 COPY index.html /var/www/html/ CMD [ "apachectl", "-DFOREGROUND" ]
- ENV:環境変数:その OS 上の全てで使う変数。機密事項もここに書いたりする。
以下の例のように、APACHE_CONFDIR=/etc/apache2
を$APACHE_CONFDIR
として、変数として使える。
FROM ubuntu:22.10 ENV APACHE_CONFDIR=/etc/apache2 ENV APACHE_ENVVARS=$APACHE_CONFDIR/envvars RUN apt update \...
コンテナ内で、確認もできる。
***コンテナ内 root@XXXXXXX:/# echo $APACHE_CONFDIR /etc/apache2 root@dc1902b02536:/# echo $APACHE_ENVVARS /etc/apache2/envvars
- WORKDIR:コンテナ内の作業ディレクトリを指定する。
目的としては、$ docker container exec -it apache2 /bin/bash
みたいに、コンテナの中で、作業をするときに、cd XXX
コマンドで、ディレクトリの移動を減らすため。
FROM ubuntu:22.10 ENV APACHE_CONFDIR=/etc/apache2 ENV APACHE_ENVVARS=$APACHE_CONFDIR/envvars WORKDIR /var/www/html <- ここ! RUN apt update \...
因みに、WORKDIR /var/www/html
を指定すると、以下みたいな状態になる。
% docker container exec -it apache2 /bin/bash root@XXXXX:/var/www/html# pwd /var/www/html
と、最初から今いるディレクトリを表してくれているかなと。root@XXXXX:/var/www/html#
- ENTRYPOINT:必ず実行されるコマンド。CMDと近いが、違うところがある。
ほぼ同じ。
違いは、CMD は、上書きできるが、ENTRYPOINT は、上書きされない。
また、CMDとENTRYPOINT は、一緒に使えて、CMD が ENTRYPOINTの引数になる。
$ docker run 引数
とできる。その際に
$ docker run bbb
とすると、「bbb」が引数として追記される。
$ docker run bbb
とすると、「bbb」に全て上書きされる。
例1: Dockerfile の中身が、CMD [ "echo", "hoge" ] の場合 $ docker docker container run -d practice/apache2:latest echo test test 上記のコマンドを実行すると、「echo test」に CMD が上書きされ、「test」が出力される。 しかし、 例2: Dockerfile の中身が、ENTRYPOINT [ "echo", "hoge" ] の場合 $ docker docker container run -d practice/apache2:latest test hoge test 上記のコマンドを実行すると、「test」が追加の引数となり、「hoge test」が出力される。 さらに、 例3: Dockerfile の中身が、以下の場合 ENTRYPOINT [ "echo", "hoge" ] CMD ["addCMD"] $ docker docker container run -d practice/apache2:latest hoge addCMD となる。
Dockerfile 作成手順
ベースイメージを決める
コンテナの中に入って、シェルを実行してみる
必要な作業をする
Dockerfile に記載する
イメージとコンテナを作り直す
2~5 を繰り返し行い、Dockerfile を作成していく