CodeGym /コース /Docker SELF /Dockerfileの基本的な命令

Dockerfileの基本的な命令

Docker SELF
レベル 13 , レッスン 2
使用可能

3.1 命令 FROM

さて、ちょっとおさらいね、Dockerfile は Dockerイメージを作成するための命令が含まれてるテキストファイルだよ。Dockerfile の各命令は特定のタスクを実行して、イメージ内に新しいレイヤーを作成するんだ。この講義では、Dockerfile の基本命令、FROM, RUN, COPY, CMD の詳細について説明するよ。これらは機能的かつ効率的な Docker イメージを作成するうえで絶対重要だからね。

命令 FROM は新しいイメージを作成するためのベースイメージを指定するよ。これはどんな Dockerfile においても最初の命令で、イメージ作成の開始点を定義するんだ。

構文


FROM <image>[:<tag>] [AS <name>]

ここで:

  • <image>: ベースイメージの名前。
  • <tag>: (オプション) ベースイメージのバージョン。デフォルトはlatest
  • AS <name>: (オプション) このビルドステージの名前を割り当てる(マルチステージビルドで使用)。

ベースイメージ Ubuntu の使用例:

dockerfile


FROM ubuntu:20.04

公式イメージの Node.js を使用する場合:

dockerfile


FROM node:14

マルチステージビルドを使った最適化 の例:

dockerfile


FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
        
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html

この例では、2つのベースイメージが使われてるよ。最初の (node:14) はアプリケーションをビルドするために使われて、2つ目の (nginx:alpine) は静的ファイルを提供する軽量サーバーを作成するために使われてるの。

マルチステージビルドを使用することで、最終的なイメージには最小限のファイルとプログラム (Nginx とビルドされた静的ファイル) だけが含まれるようになるから、軽量でデプロイも速くなるんだよね。

3.2 RUN 命令

RUN 命令はコンテナ内でコマンドを実行し、イメージに新しいレイヤーを作成する。この命令はパッケージのインストール、環境の設定、およびイメージを準備するために必要な他のコマンドを実行するために使用される。

構文:


RUN <command>

ここで:

  • <command>: コンテナ内で実行されるコマンド。

例:

Ubuntu イメージにパッケージをインストール:

dockerfile


RUN apt-get update && apt-get install -y curl git

コードのコンパイル:

dockerfile


RUN gcc -o myapp myapp.c

複数のコマンドをまとめる

image のサイズを小さくし、ビルドを高速化するために、複数のコマンドを一つの RUN 命令にまとめることが推奨される。

dockerfile


RUN apt-get update \
    && apt-get install -y curl git \
    && rm -rf /var/lib/apt/lists/*

3.3 命令 COPY

命令 COPY はビルドコンテキストからコンテナのファイルシステムにファイルやディレクトリをコピーするよ。これで、ソースコードや設定ファイル、その他のリソースをコンテナに持ち込むのが便利ってわけ。

構文:


COPY <src> <dest>

ここで:

  • <src>: ビルドコンテキスト内のファイルやディレクトリへのパス。
  • <dest>: コンテナ内の宛先パス。

例:

現在のディレクトリの全てのコンテンツをコンテナの作業ディレクトリにコピーする:

dockerfile


COPY . /app

個別のファイルをコピーする:

dockerfile


COPY package.json /app/package.json
COPY server.js /app/server.js

.dockerignore の使用

不要なファイルをコピー処理から除外するためには、.dockerignore ファイルを使えばいい。これは .gitignore と同じように動作するよ。

Text


node_modules
dist
*.log

3.4 命令 CMD

CMD 命令は、コンテナを起動するときに実行されるコマンドを指定します。RUN がビルド段階で実行されるのに対し、CMD は作成されたイメージからコンテナを起動した際に実行されます。

構文:


CMD ["executable","param1","param2"]

または


CMD command param1 param2

ここで:

  • ["executable","param1","param2"]: exec形式で、信号処理の適切さを確保するために推奨されます。
  • command param1 param2: shell 形式で、コマンドをシェルで実行します。

例:

Node.js アプリケーションの起動:

dockerfile


CMD ["node", "app.js"]

shell スクリプトの起動:

dockerfile


CMD /usr/bin/myscript.sh

CMDENTRYPOINT の違い

CMD はデフォルトコマンドを指定し、コンテナ起動時に上書き可能です。ENTRYPOINT は常に実行される固定コマンドを指定します。

ENTRYPOINT 使用例:

dockerfile


ENTRYPOINT ["python", "script.py"]
CMD ["arg1"]

この例では ENTRYPOINT がPythonスクリプトを実行し、CMD で引数を指定して、コンテナ起動時に変更可能となっています。

主要な命令を含むDockerfileの例

dockerfile

        
# ベースイメージ Node.js を使用
FROM node:14
        
# 作業ディレクトリを設定
WORKDIR /app
        
# package.json と package-lock.json をコピー
COPY package*.json ./
        
# 依存関係をインストール
RUN npm install
        
# アプリケーションのソースコードをコピー
COPY . .
        
# アプリで使用されるポートを指定
EXPOSE 3000
        
# アプリケーションを起動するコマンドを定義
CMD ["node", "app.js"]
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION