データベース用、アプリケーションサーバー用などの1つのDockerfileがある場合、プロジェクトに属するDockerfileをどのように編成しますか?ソースで何らかの階層を作成しますか?大規模なエンタープライズプロジェクトを1つのDockerfileだけで構成することはできませんか?
データベース用、アプリケーションサーバー用などの1つのDockerfileがある場合、プロジェクトに属するDockerfileをどのように編成しますか?ソースで何らかの階層を作成しますか?大規模なエンタープライズプロジェクトを1つのDockerfileだけで構成することはできませんか?
回答:
この回答は古くなっています。図はもう存在せず、Docker composeに置き換えられました。承認された回答は削除できません....
Docker Composeは、プロジェクト階層の構築をサポートしています。そのため、各サブディレクトリでDockerfileをサポートするのが簡単になりました。
├── docker-compose.yml
├── project1
│ └── Dockerfile
└── project2
└── Dockerfile
各コンポーネントのDockerfileを含むディレクトリを作成するだけです。例:
コンテナを構築するときは、ディレクトリ名を指定するだけで、Dockerは正しいDockerfileを選択します。
でドッキングウィンドウの新しいバージョン(> = 1.8.0) 、あなたはこれを行うことができます
docker build -f Dockerfile.db .
docker build -f Dockerfile.web .
大きな節約。
編集:raksjaのコメントごとにバージョンを更新する
編集:@vsevolodからのコメント:ファイルに.Dockerfile拡張子(名前ではなく)を与えることで、VSコードで構文の強調表示を取得できます(例:Prod.Dockerfile、Test.Dockerfileなど)。
Dockerfile.web
実行構成としても許可していません。だから私は問題を作成しました: youtrack.jetbrains.com/issue/WEB-28185
docker-compose.yml
たとえば、ファイル内で定義された各「サービス」に使用するDockerfileをどのように指定しますか?
docker-compose
複数使用するDockerfile
あなたの名前は変更しないでください
Dockerfile
にしDockerfile.db
たりDockerfile.web
にください。IDEでサポートされていない可能性があり、構文の強調表示が失われます。
以下のようキングスレーUchnorが言った、あなたは複数を持つことができますDockerfile
ますが、ビルドに必要なものを表し、ディレクトリごとに1つずつ、。
docker
各アプリケーションとその構成を保持するフォルダーが欲しい。これは、データベースを持つWebアプリケーションのプロジェクトフォルダー階層の例です。
docker-compose.yml
docker
├── web
│ └── Dockerfile
└── db
└── Dockerfile
docker-compose.yml
例:
version: '3'
services:
web:
# will build ./docker/web/Dockerfile
build: ./docker/web
ports:
- "5000:5000"
volumes:
- .:/code
db:
# will build ./docker/db/Dockerfile
build: ./docker/db
ports:
- "3306:3306"
redis:
# will use docker hub's redis prebuilt image from here:
# https://hub.docker.com/_/redis/
image: "redis:alpine"
docker-compose
コマンドラインの使用例:
# The following command will create and start all containers in the background
# using docker-compose.yml from current directory
docker-compose up -d
# get help
docker-compose --help
上記のソリューションを引き続き使用して、Dockerfile
などのディレクトリにを配置docker/web/Dockerfile
できます。必要なのはcontext
、次のdocker-compose.yml
ようにビルドを設定することだけです。
version: '3'
services:
web:
build:
context: .
dockerfile: ./docker/web/Dockerfile
ports:
- "5000:5000"
volumes:
- .:/code
このようにすると、次のようなことが可能になります。
config-on-root.ini
docker-compose.yml
docker
└── web
├── Dockerfile
└── some-other-config.ini
そして./docker/web/Dockerfile
このような:
FROM alpine:latest
COPY config-on-root.ini /
COPY docker/web/some-other-config.ini /
tldr docker-composeのいくつかのクイックコマンドを次に示します。詳細については、公式ドキュメントを参照してください。
COPY ../package.json /app/package.json
)そのファイルは通常ルートレベルにあり、Dockerは親へのアクセスを禁止しています。どのようなアプローチをとりますか?
web
からプロジェクト.
(中にdocker-compose.yml
:build: .
)。この方法でweb
は、ビルド時にルートファイルにアクセスできます。私はこの関連する質問を見てきました:stackoverflow.com/questions/24537340/…docker
コマンドラインを使用するときに代わりに親ディレクトリからビルドできます。この回答はdocker-composeでそれを行う方法を示しています:stackoverflow.com/a/45353241/ 1092815
-f
オプションで結構ですがdocker-compose
、サブフォルダで使用することを好みます。どちらの答えも有効だと思います。ほとんどの人は、デフォルトのDockerfile
名前をそのまま使用してほとんどのIDEをそのままサポートすることを好むでしょう。私は最初の回答を無効にするのではなく、代わりを提供するだけです。IDEでphp
を使用するときにDockerfileがファイルであると思われたくないのですDockerfile.php
が、はい、動作します。dockerドキュメンテーションでいくつかの例を見てきました。Dockerfile.build
、Dockerfile.debug
など
example.Dockerfile
付けると、VSCodeで構文の強調表示とアイコンが保持されます。
Intellijでは、単純にdockerファイルの名前を* .Dockerfileに変更し、ファイルタイプ* .Dockerfileをdocker構文に関連付けました。
例えば、抽象化レイヤを追加し、このプロジェクトのようなYAMLファイルhttps://github.com/larytet/dockerfile-generatorのように見えます
centos7:
base: centos:centos7
packager: rpm
install:
- $build_essential_centos
- rpm-build
run:
- $get_release
env:
- $environment_vars
短いPythonスクリプト/ makeは、構成ファイルからすべてのDockerfileを生成できます。
複数のdockerfileを使用する必要があるプロジェクトで作業する場合は、各dockerfileを別のディレクトリに作成するだけです。例えば、
app / db /
上記の各ディレクトリにはdockerfileが含まれます。アプリケーションがビルドされると、dockerはすべてのディレクトリを検索してすべてのdockerfilesをビルドします。