aws

【A-28】Dockerfile

Dockerfile は、コンテナの環境をコードとして管理し、誰でも同じ環境を再現できる仕組み です。
手作業で環境を構築するのではなく、コードとして定義することで、どこでも一貫した環境を作成できる のが最大のメリットです。

[学習フェーズ]

Dockerfile の主要コマンド

Dockerfile には 複数の重要なコマンド があります。
以下の表に、よく使われるコマンドの概要を示します。

コマンド説明
FROMベースイメージを指定FROM ubuntu:22.04
RUNコンテナ作成時に実行するコマンドRUN apt update && apt install -y vim
ENV環境変数を設定ENV APP_ENV=production
COPYホストのファイルをコンテナにコピーCOPY index.html /var/www/html/
ADDCOPY と同様だが、URLや圧縮ファイルも対応ADD myapp.tar.gz /opt/
ENTRYPOINT実行するコマンドを指定(固定)ENTRYPOINT ["nginx", "-g", "daemon off;"]
CMD実行するコマンドを指定(上書き可能)CMD ["python", "app.py"]

🚀 CMDENTRYPOINT の違い

  • CMD はデフォルトのコマンドとして利用し、docker run コマンド で上書き可能。
    ユースケース:柔軟に使いたいとき
    例)①通常時はCMDのデフォルトコマンドを実行
      ②docker run -it debug-image → 中に入ってトラブル確認
  • ENTRYPOINT は基本的に固定され、上書きができない。

実際のDockerfileを見てみよう

ここでは、実際のdockerfileを見ていきましょう。

以下dockerfileは、Nginxのイメージを利用して、ソースコードをデフォルトルートにコピーと、Nginxのconfを追加しています。

FROM nginx:alpine

RUN mkdir -p /var/www/html
WORKDIR /var/www/html/

COPY ./src /var/www/html

ADD ./docker/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf

実はdockerfileの実態は、サーバーに対して本来手動で打ち込むコマンドを順に書いているだけという事が分かります。
そのため、Linuxコマンドやデプロイの知識さえあれば意外と簡単に作成できます。


[実践フェーズ]

今回は、dockerfileをゼロから作成してみましょう。

vimをインストールしたubuntuコンテナを作成してみます。

コンテナを手動起動して検証

dockerfileを作成する際は、いきなりファイルの作成ではなく、単体のコンテナでコマンドを検証しながら記載していきます。

1. FROM ubuntu でコンテナを手動起動

まず、Dockerfile を書く前に、手動で ubuntu の環境を作り、RUN に記載する想定コマンドを試してみます。

docker run -it --name test-container ubuntu bash

この状態で ubuntu のコンテナに入れるので、以下を試す

apt update
apt install -y vim

vim --version
exit

これでvimのインストールコマンドが検証できました。

2. Dockerfile を作成

次に、手動でやった操作を Dockerfile に落とし込んで 自動化します。

  1. 新しいディレクトリを作成し、Dockerfile を用意
mkdir my-docker-app
cd my-docker-app
nano Dockerfile
  1. 以下の内容で Dockerfile を作成
# Ubuntu 22.04 をベースにする
FROM ubuntu:22.04

# パッケージリストを更新し、vim をインストール
RUN apt update && apt install -y vim

# デフォルトのコマンド
CMD ["bash"]

3. Docker イメージのビルド

Dockerfile を使って、新しいイメージを作成します。

docker build -t my-ubuntu-vim .

my-ubuntu-vim という名前の Docker イメージが作成されたことを確認

docker images

4. 作成したイメージでコンテナを起動

docker run -it my-ubuntu-vim

コンテナに vim が入っているか確認

vim --version