はじめに
Dockerを勉強していると、Dockerfileの中に頻繁に登場する「app
」という文字。
「appってなんのこと?」「これがないとダメ?」と疑問に感じる人も多いと思います。
この記事では、このapp
の正体についてわかりやすく説明していきます!
記事の対象者
- Docker初心者の方
- Dockerfileを初めて書く方
- Dockerの基本的な仕組みを理解したい方
Dockerのappとは
Dockerにおけるapp
とは、特別な予約語や特定の機能を指す言葉ではありません。
実はDockerfileでよく使われる、仮想の作業ディレクトリ(作業場)の名前のことなのです。
つまり、
- コンテナ内に仮想的に作る作業スペース(フォルダ)の名前
- 自分のソースコードや環境設定ファイルを置いておく場所
を便宜的にapp
と呼んでいるだけで、別にapp
という名前でなくてもOKです。
では、なぜapp
を使うのでしょうか?
それは単純に、みんなが使う慣例であり、
Dockerfileを書くときにわかりやすく、一貫性が出るからです。
実際の挙動(Dockerファイルを使いながら説明)
実際のDockerfileを使って解説しましょう。
FROM continuumio/miniconda3:latest
WORKDIR /app
COPY conda.yml /app/conda.yml
RUN conda env create -f /app/conda.yml && \
conda clean -afy
SHELL ["conda", "run", "-n", "aml-env", "/bin/bash", "-lc"]
COPY . /app
CMD ["python", "train.py"]
各コマンドの意味
-
FROM continuumio/miniconda3:latest
- Dockerのベースイメージを指定します。ここでは、Minicondaが入っている環境を使います。
-
WORKDIR /app
- コンテナ内に
app
というフォルダを作り、それを作業場所に指定します。 - 以降の命令はすべてここで実行されます。
- コンテナ内に
-
COPY conda.yml /app/conda.yml
-
conda.yml
という設定ファイルをコンテナ内の作業場所にコピーします。
-
-
RUN conda env create -f /app/conda.yml && conda clean -afy
-
conda.yml
を元に、Pythonの環境を構築し、不要なデータを削除します。
-
-
SHELL ["conda", "run", "-n", "aml-env", "/bin/bash", "-lc"]
- 以降の命令を、作成した環境(
aml-env
)上で動かすことを指定します。
- 以降の命令を、作成した環境(
-
COPY . /app
- 自分のPCにあるコードやファイルを、作業場所(
/app
)にすべてコピーします。
- 自分のPCにあるコードやファイルを、作業場所(
-
CMD ["python", "train.py"]
- コンテナを立ち上げると、
train.py
を実行するように設定します。
- コンテナを立ち上げると、
「app」の名前を変えたかったら?
もちろん、app
以外の名前を使っても問題ありません。
たとえば、my_project
やworkspace
に変えたい場合は、Dockerfileをこう書くだけです。
WORKDIR /my_project
COPY . /my_project
重要なのは、プロジェクト内で一貫して同じ名前を使うことです。
以上がDockerのapp
の正体でした。
これでDockerfileの基本構造への理解がぐっと深まったのではないでしょうか!