Dockerfileを使ったイメージとコンテナの作成
DockerfileはDockerイメージをビルドするための設定ファイルです。以下は基本的なDockerファイルの書き方です。
Dockerfileの書き方
命令 内容
の形式で記述をします。以下は一般的なDockerfileの例とその説明です。
命令 | 説明 |
---|---|
FROM |
ベースイメージを指定する。イメージのビルドに使用するベースとなるDockerイメージ。先頭に記述する |
WORKDIR |
作業ディレクトリを指定する。後続のコマンドが実行される場所となる ディレクトリが存在しない場合は生成する |
COPY |
ローカルのファイルやディレクトリをコンテナ内にコピーする |
RUN |
コマンドを実行する。イメージのビルド時に実行され、パッケージのインストールや環境の設定などに使用される |
CMD |
コンテナが起動した際に実行されるコマンドを指定する。通常は実行するアプリケーションのエントリーポイントとなる |
起動後にShellを実行するDockerfile
RUN命令の && について
&&
は、Dockerfile内のRUN命令で使用されるシェルコマンドのチェーンを表す演算子です。この演算子を使用することで、複数のコマンドを1つのRUN命令で実行することができます。
具体的には、&&
の前のコマンドが成功した場合にのみ、次のコマンドが実行されます。一つ前のコマンドが正常に終了しない場合、後続のコマンドは実行されません。
&&
を使用することで、Dockerイメージのビルドプロセスを効率化し、イメージのサイズを最小限に抑えることができます。また、エラーチェックやデバッグを容易にするための手段としても利用されます。
Dockerfileからイメージをビルドする
docker build
コマンドはDockerfileからイメージをビルドします。
キャッシュを利用せずにビルドする
イメージをビルドする際、ベース環境などは以前ビルド時にダウンロードしたキャッシュが利用されます。
キャッシュを利用せずに、ダウンロードから行う場合は、以下のコマンドを実行します。
イメージからコンテナを起動する
または
一時的な作業用で起動したい場合は、次のようにrun
で-it --rm
を指定する。
オプション
よく使うオプション。
名前 | 説明 |
---|---|
-d |
コンテナーをバックグラウンド実行する(run のみ) |
--dns |
カスタムDNSサーバーを設定する |
--gpus |
コンテナーに追加する GPU デバイスを指定する |
-i |
アタッチされていなくてもSTDINを開放する |
--mount |
ファイルシステムをマウントする |
-p |
ポートを公開する |
--restart |
コンテナー終了時に適用する再起動ポリシー |
--runtime |
利用するランタイム |
マウントの指定例
GPU使用の指定例
DNSサーバの指定例
コンテナ内でモジュールのダウンロードに失敗する場合などに指定します。
コンテナの停止
停止したコンテナの起動
Docker Composeを使った起動
Docker Composeは、複数のDockerコンテナを簡単に定義、起動、および管理するためのツールで、特に複雑なアプリケーションのデプロイメントやマルチコンテナアプリケーションの設定を容易にします。
以下は一般的なdocker-compose.ymlファイルの例です。
version
Docker Composeファイルの書式のバージョンを設定します。
services
サービス(コンテナ)定義セクション。コンテナごとに1つのサービスを指定します。
配下に任意のサービス名(Dockerコンテナ)を指定します。コンテナごとに指定する要素については以下のとおりです。
要素 | 内容 |
---|---|
build |
Dockerファイルを使ってイメージをビルドする際に、Dockerファイルのあるディレクトリを指定する |
image |
- 使用するDockerイメージを指定する - buildが指定されているときは、ビルドしたイメージのイメージ名の指定となる。Dockerイメージ名[:タグ]で指定が可能 |
container_name |
任意のコンテナ名を指定する |
environment |
環境変数の設定 |
restart |
コンテナが停止した場合に自動的に再起動するように設定するためのオプション |
ports |
ホストとコンテナのポートのマッピング。ホストのポートとコンテナのポートを関連付けて、外部からWebアプリにアクセスできるようにする ホストのポート:コンテナのポートで指定する |
dns |
カスタムDNSサーバーを設定する |
tty |
true にすることで、コンテナを起動し続ける |
volumes |
ボリュームのマウント。ホストとコンテナ間でファイルを共有するために使用する ホストのディレクトリ:コンテナのディレクトリで指定する |
環境変数の設定について
環境変数はマップ形式または配列形式で指定できます。
- マップ形式
- 配列形式
docker-compose.yml を使ったデプロイ
docker compose
コマンドは、設定に従ってコンテナを起動し、アプリケーションを実行します。
または
-d
- デタッチ・モード。バックグラウンドでコンテナを実行します。