0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Docker】DockerFile

Last updated at Posted at 2024-10-01

Dockerfileとは

Dockerfileは、Dockerイメージを作成するためのテキストファイル

以下の情報が記述される

  • 基本となるOS
  • インストールする必要があるソフトウェア
  • コピーするファイル・ディレクトリ
  • 実行するコマンド
#### ベースとなるイメージを指定
FROM python:3.7-alpine

#### 作業ディレクトリを指定
WORKDIR /app
# /app ディレクトリを作業ディレクトリに指定
# 存在しない場合でも自動的に作成される

#### ローカルファイルをDockerイメージにコピー
COPY ./src/ /app/
# ローカルのsrcディレクトリをコンテナの/appディレクトリにコピー
# srcディレクトリ内のすべてのファイルが/appに入る

#### 必要なパッケージをインストール
RUN apk update && apk add --no-cache python3 gcc musl-dev libc-dev
# Alpineベースのイメージでパッケージリストを更新し、Python3関連のツールと依存関係をインストール

#### Pythonの依存パッケージをインストール
COPY requirements.txt /app/
RUN pip3 install --no-cache-dir -r requirements.txt
# requirements.txtに記載されたPythonの依存パッケージをインストール

#### ENTRYPOINT命令でコンテナ起動時に実行されるコマンドを指定
ENTRYPOINT ["python3", "app.py"]
# コンテナ起動時に必ず "python3 app.py" が実行されるように指定

FROM

作成するコンテナのベースとなるイメージを指定
FROM ubuntu:18.04と記述すると、Ubuntu 18.04をベースにしたイメージが作成

コロンの後にタグを指定
タグなしの場合、latest(最新)が選択される

FROM イメージ[:タグ]
# example
FROM python:3.7-alpine

WORKDIR

コマンドを実行する作業ディレクトリを指定
WORKDIR /appと記述すると、その後のRUN、CMD、ENTRYPOINT、COPY、ADD命令が/appディレクトリで実行される

※ディレクトリが存在しない場合:
指定したディレクトリがイメージ内に存在しない場合でも、自動的にそのディレクトリが作成されます。たとえば、以下のように /app/mydir がまだ存在しない場合でも、自動的に作成されます。

WORKDIR /app/mydir

※Dockerfile に WORKDIR が存在しない場合、
ルートディレクトリ(/)に自動で作成されます。

COPY

ソースコードや設定ファイルをローカルからDockerイメージにコピーする
COPY index.html /mydir/index.htmlと記述すると、ローカルのindex.htmlがイメージ(コンテナ)の/mydir/index.htmlにコピーされる

COPY <コピー元ファイル名(orディレクトリ名)> <コピー先ディレクトリ名>
# example
COPY ../web/src/index.html /var/www/
COPY ../web/script/ /var/www/script/
COPY *.txt /var/www/docs/

よく使われる「.」について

## . は 現在のローカルディレクトリ を指します(Dockerfileが置かれているディレクトリ)
# DockerFileの置いてあるフォルダの内容を全ての内容をappディレクトリにコピー
COPY . /app

# ローカルディレクトリのすべての内容を、
# コンテナのカレントディレクトリ(WORKDIRで指定された場所)にコピー
COPY . .

例:

COPY . /app

もしローカルのproject/ディレクトリに以下のファイルがあるとします:
Dockerfileは/home/user/project/にある状態。

/home/user/project/
├── Dockerfile
├── app.py
└── requirements.txt

この命令により、コンテナ内に/appフォルダが作成され、その中にapp.pyrequirements.txtがコピーされます。

RUN

イメージ作成時に実行するコマンドを指定します。例えば、RUN apt-get update && apt-get install -y gitと記述すると、イメージ作成時にパッケージリストの更新とgitのインストールが行われます

ENTRYPOINT

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

# コンテナ起動時に必ず "ping 127.0.0.1 -c 100" コマンドが実行される
# "ping" コマンドはネットワーク接続のテストに使用
# "127.0.0.1" はlocalhostを指すIPアドレス
# "-c 100" はパケットを100回送信することを指定している
ENTRYPOINT ["ping", "127.0.0.1", "-c", "100"]

# このコンテナは、起動すると 127.0.0.1 に対して 100 回の ping を実行し、その後終了します。

CMD

起動時に実行するコマンド
1つのDockerfileで1度だけ指定できる

CMD <コマンド>
# example
CMD python -m http.server 80

ENV

環境変数の定義

ENV <環境変数名>=<値>
# example
ENV TZ=Asia/Tokyo
# イコールの代わりに半角スペースでもOK
ENV DB_ENDPOINT 172.16.0.2
0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?