米国AI開発者がゼロから教えるDocker講座④(かめさん)〜buildの詳細とその他instruction〜
初めまして、みずぺーといいます。
このnoteを機に初めて私を知った方のために、箇条書きで自己紹介を記述します。
年齢:28歳
出身:長崎
大学:中堅国立大学
専門:河川、河川計画、河道計画、河川環境
転職回数:1回(建設(2年9か月)→IT系年収100万up(現職3か月))
IT系の資格:R5.4基本情報技術者試験合格💮
今日は業務でdockerを用いて物体検出環境を構築する業務があるので、そのための予習をしておきます。
あと、この記事だけでは正直理解することは難しいと思います。
そのため、詳しく知りたい方や図解で理解を行いたい方は是非かめさんの動画を参考にしていただければと思います。
build context
docker imageにdockerfile以外のテキストを追加することができる。
COPY vs ADD
単純にファイルやフォルダをコピーする場合はCOPYを使用
tarの圧縮ファイルをコピーして解凍したいときはADDを使用
compressed.tarで圧縮フォルダを作成している。copressed.tar内にはhelloファイルを作成して格納している。
Dockerfileにはcompressed.tarを指定して、ルートディレクトリに置くようにしている。
それではdocker build .をもとにコンテナを立ち上げてみる。
lsでコンテナ内を確認してみるとsample_folderが入っていることに気が付く。
cat sample_folder/hello
確かにhello内のファイルを開くことができた。
Dockerfileがbuild contextにない場合
例えば、
dockerfile.dev
dockerfile.test
などのように開発環境とテスト環境で違う場合。
dockerfile.devで作成してファイルを作る。
docker build -f ../ Dockerfile.dev .
-f を使用することで、ファイル名を指定してコンテナを作成することができる。
様々なテストファイルを作成する際に使用できるので便利。
CMD vs ENTRYPOINT
ENTRYPOINTはdocker runで実行してオプションを指定したとしても上書きできない。
ENTRYPOINT併用の場合
Dockerfileが以下の記述だったとき
FROM ubuntu:latest
RUN touch test
CMD ["ls","--help"]
docker run <CONTAINER ID> pwd
この場合CMDの二つのコマンドは削除されてpwdのカレントディレクトリが出力される。
CMDのみの場合
Dockerfileが以下の記述だったとき
FROM ubuntu:latest
RUN touch test
ENTRYPOINT ["ls"]
CMD ["--help"]
以下のコマンドを実行してみる。結果は回らない。
docker run <CONTAINER ID> pwd
これはどう言う状態になっているかというと
ls pwd
とコマンドに伝えることになる。
そのためもし通るコマンドを打ち込みたいなら
docker run <CONTAINER ID> -la
としてlsのオプションを記述する場合通る。
ENV(環境変数)
echo $SHELL
どのシェルを使用しているかを見れる。
ENV <key> <value>
この形で環境変数をdocker内に設定することができる。
WORKDIR
workdirはDocker instructionの実行ディレクトリを変更する。
今回はsample_folderの中にsample_fileを指定して作成してみる。
失敗例①:rootディレクトリにsample_fileを作成してしまう例
FROM ubuntu
RUN mkdir sample_folder
cd /sample_folder
RUN touch sample_file
成功だけど失敗例②:sample_folderの中に作成はできたが冗長すぎる
FROM ubuntu
RUN mkdir sample_folder
WORKDIR /sample_folder
RUN touch sample_file
成功例③:スッキリかけてsample_folderの中に作成できた例
FROM ubuntu
WORKDIR /sample_folder
RUN touch sample_file
WORKDIRはフォルダがなければフォルダを自動的に作成してくれるためmkdirを使用する必要がない。
最後に
詳しく知りたい方や図解で理解を行いたい方は是非かめさんの動画を参考にしていただければと思います。
GW期間中やかめさんのTwitterで定期的に割引(30%OFF)が行われていますので、チェックするようにしていただければと思います。