見出し画像

米国AI開発者がゼロから教えるDocker講座④(かめさん)〜buildの詳細とその他instruction〜

初めまして、みずぺーといいます。
このnoteを機に初めて私を知った方のために、箇条書きで自己紹介を記述します。

  • 年齢:28歳

  • 出身:長崎

  • 大学:中堅国立大学

  • 専門:河川、河川計画、河道計画、河川環境

  • 転職回数:1回(建設(2年9か月)→IT系年収100万up(現職3か月))

  • IT系の資格:R5.4基本情報技術者試験合格💮

今日は業務でdockerを用いて物体検出環境を構築する業務があるので、そのための予習をしておきます。

あと、この記事だけでは正直理解することは難しいと思います。
そのため、詳しく知りたい方や図解で理解を行いたい方は是非かめさんの動画を参考にしていただければと思います。

build context

docker imageにdockerfile以外のテキストを追加することができる。

フォルダおよびファイルが作成
起動した時にもnew_dirと言うフォルダが作成されておりsomethingファイルが格納されている

COPY vs ADD

  • 単純にファイルやフォルダをコピーする場合はCOPYを使用

  • tarの圧縮ファイルをコピーして解凍したいときはADDを使用

compressed.tarで圧縮フォルダを作成している。copressed.tar内にはhelloファイルを作成して格納している。

Dockerfileのすぐ右にcopressed.tarを作成

Dockerfileにはcompressed.tarを指定して、ルートディレクトリに置くようにしている。

ADD compressed.tarを記述

それではdocker build .をもとにコンテナを立ち上げてみる。

lsでコンテナ内を確認してみるとsample_folderが入っていることに気が付く。

cat sample_folder/hello

確かにhello内のファイルを開くことができた。

tarを解凍してhelloファイルを覗けている

Dockerfileがbuild contextにない場合

例えば、

  • dockerfile.dev

  • dockerfile.test

などのように開発環境とテスト環境で違う場合。

dockerfile.devで作成してファイルを作る。

docker build -f ../ Dockerfile.dev .

-f を使用することで、ファイル名を指定してコンテナを作成することができる。

様々なテストファイルを作成する際に使用できるので便利。

dockerを指定して作成することができた

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)が行われていますので、チェックするようにしていただければと思います。


この記事が気に入ったらサポートをしてみませんか?