はじめに
Dockerfile
とdocker-compose.yml
の書き方についてまとめてみました
事前知識
Dockerfile
とdocker-compose.yml
の書き方に入る前にDockerとは何かそしてDocker Composeとは何かについて簡潔にまとめます。
Dockerとは
コンテナ仮想化技術を使って、アプリケーションを開発、配置、実行するための隔離された環境を提供するツール
コンテナとは
パソコンやサーバ上で隔離され干渉されない環境のこと
Docker Composeとは
複数のコンテナを定義して操作するためのツール
Dockerfile
とは
Dockerイメージを作成するためのファイル
Dockerfile
を使い以下の順番でコンテナ作成が出来る
docker-compose.yml
とは
複数のコンテナを定義するためのファイル
Dockerfileの書き方
代表的なDockerコマンド
コマンド | 意味 |
---|---|
FROM |
DockerHubで公開中の元イメージを指定 |
LABEL |
作成者情報・バージョンを指定 |
COPY |
イメージにファイルを追加 |
ADD |
イメージにファイルを追加。圧縮ファイル指定時は圧縮まで実行される。 |
RUN |
イメージをBuildする際に実行するコマンド |
CMD |
コンテナ起動の際に実行するコマンド |
ENTRYPOINT |
イメージ実行時に強要するコマンド |
USER |
RUN 、CMD 、ENTRYPOINT で指定のコマンドを実行するユーザー |
WORKDIR |
RUN 、CMD 、 ENTRYPOINT 、ADD 、COPY の際の作業ディレクトリ |
ENV |
環境変数を設定 |
ONBUILD |
Build完了時に実行するコマンド |
EXPOSE |
イメージ利用者にポートを解放 |
VOLUME |
イメージ利用者に永続データが保存される場所を解放 |
ARG |
docker build時に指定する引数 |
Dockerfile
記述例
FROM node:18
CMD["npm","start"]
docker-compose.yml
の書き方
ファイル名は必ずdocker-compose.yml
とする必要がある
YAMLファイルは大きくversion
、services
、networks
、volumes
から構成されている
version: [バージョン]
services:
コンテナ1:
コンテナ2:
networks:
ネットワーク名1:
ネットワーク名2:
volumes:
ボリューム名1:
ボリューム名2:
version
Docker Composeで使用するバージョンを指定する
services
services
項目内にコンテナ作成に以下の必要な設定情報を定義していく
項目 | 意味 |
---|---|
image |
DockerHubで公開中の元イメージを指定 |
build |
作成者情報・バージョンを指定 |
container_name |
イメージにファイルを追加 |
networks |
イメージにファイルを追加。圧縮ファイル指定時は圧縮まで実行される。 |
volumes |
イメージをBuildする際に実行するコマンド |
volumes_from |
コンテナ起動の際に実行するコマンド |
ports |
イメージ実行時に強要するコマンド |
environment |
RUN 、CMD 、ENTRYPOINT で指定のコマンドを実行するユーザー |
depends_on |
RUN 、CMD 、 ENTRYPOINT 、ADD 、COPY の際の作業ディレクトリ |
restart |
環境変数を設定 |
command |
Build完了時に実行するコマンド |
env_file |
イメージ利用者にポートを解放 |
entrypoint |
イメージ利用者に永続データが保存される場所を解放 |
logging |
docker build時に指定する引数 |
external_links |
設定する外部リンク |
network_mode |
ネットワークモード設定 |
networks
作成するネットワーク名を定義する
volumes
作成するボリューム名を定義する
参考記事
【Docker】Dockerfileとは|書き方・コマンド一覧・イメージ作成手順を徹底解説
Docker Composeとは|仕組み・使い方・YAMLファイルの書き方に至るまで徹底解説!
Docker ドキュメント日本語化プロジェクト