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/ |
ADD | COPY と同様だが、URLや圧縮ファイルも対応 | ADD myapp.tar.gz /opt/ |
ENTRYPOINT | 実行するコマンドを指定(固定) | ENTRYPOINT ["nginx", "-g", "daemon off;"] |
CMD | 実行するコマンドを指定(上書き可能) | CMD ["python", "app.py"] |
🚀 CMD
と ENTRYPOINT
の違い
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 vimvim --version
exit
これでvimのインストールコマンドが検証できました。
2. Dockerfile を作成
次に、手動でやった操作を Dockerfile に落とし込んで 自動化します。
- 新しいディレクトリを作成し、
Dockerfile
を用意
mkdir my-docker-app
cd my-docker-app
nano Dockerfile
- 以下の内容で
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