Bagaimana Anda mengatur Dockerfiles milik proyek ketika Anda memiliki satu Dockerfile untuk database, satu untuk server aplikasi, dan sebagainya? Apakah Anda membuat semacam hierarki di sumbernya? Proyek perusahaan besar tidak hanya terdiri dari satu Dockerfile?
216
Jawaban:
Catatan Penulis
Jawaban ini kedaluwarsa. Gambar tidak lagi ada dan telah digantikan oleh komposisi Docker . Jawaban yang diterima tidak dapat dihapus ....
Docker Compose mendukung pembangunan hierarki proyek. Jadi sekarang mudah untuk mendukung Dockerfile di setiap sub direktori.
Jawaban asli
Saya baru saja membuat direktori yang berisi Dockerfile untuk setiap komponen. Contoh:
Ketika membangun wadah hanya berikan nama direktori dan Docker akan memilih Dockerfile yang benar.
sumber
Dalam versi yang lebih baru (> = 1.8.0) dari buruh pelabuhan , Anda dapat melakukan ini
Hemat besar.
EDIT: perbarui versi per komentar raksja
EDIT: komentar dari @vsevolod: dimungkinkan untuk mendapatkan penyorotan sintaks dalam kode VS dengan memberikan file .Dockerfile ekstensi (bukan nama) misalnya Prod.Dockerfile, Test.Dockerfile dll.
sumber
Dockerfile.web
konfigurasi yang dijalankan. Jadi saya membuat masalah: youtrack.jetbrains.com/issue/WEB-28185docker-compose.yml
file, misalnya?Gunakan
docker-compose
dan multipelDockerfile
dalam direktori yang terpisahSeperti yang dikatakan Kingsley Uchnor , Anda dapat memiliki banyak
Dockerfile
, satu direktori, yang mewakili sesuatu yang ingin Anda bangun.Saya suka memiliki
docker
folder yang menampung setiap aplikasi dan konfigurasinya. Berikut ini adalah contoh hierarki folder proyek untuk aplikasi web yang memiliki database.docker-compose.yml
contoh:docker-compose
contoh penggunaan baris perintah:Jika Anda memerlukan file dari folder sebelumnya ketika membangun Dockerfile Anda
Anda masih dapat menggunakan solusi di atas dan menempatkan Anda
Dockerfile
di direktori sepertidocker/web/Dockerfile
, yang Anda butuhkan hanyalah mengatur buildcontext
didocker-compose.yml
seperti ini:Dengan cara ini, Anda akan dapat memiliki hal-hal seperti ini:
dan
./docker/web/Dockerfile
seperti ini:Berikut adalah beberapa perintah cepat dari tldr docker-compose . Pastikan Anda merujuk ke dokumentasi resmi untuk detail lebih lanjut.
sumber
COPY ../package.json /app/package.json
)? File itu biasanya berada di tingkat root dan buruh pelabuhan telah melarang akses ke induknya. Pendekatan apa yang akan Anda ikuti?web
proyek dari.
(dalamdocker-compose.yml
:build: .
). Dengan cara ini,web
memiliki akses ke root file saat membangun. Saya telah melihat pertanyaan terkait ini: stackoverflow.com/questions/24537340/… dan kita dapat membangun dari direktori induk sebagai gantinya ketika menggunakandocker
baris perintah dan jawaban ini menunjukkan bagaimana melakukannya dengan komposisi buruh pelabuhan: stackoverflow.com/a/45353241/ 1092815-f
Pilihannya baik-baik saja, tetapi saya lebih suka menggunakandocker-compose
dengan subfolder. Saya pikir kedua jawaban itu valid. Kebanyakan orang mungkin lebih suka membiarkanDockerfile
nama default untuk mendukung sebagian besar IDE di luar kotak. Saya tidak membatalkan jawaban pertama, saya hanya memberikan alternatif. Saya hanya tidak suka IDE saya untuk berpikir Dockerfile saya adalahphp
file ketika saya gunakanDockerfile.php
, tapi ya, itu berfungsi. Saya telah melihat beberapa contoh dalam dokumentasi buruh pelabuhan;Dockerfile.build
,,Dockerfile.debug
dll.example.Dockerfile
menjaga penyorotan sintaks dan ikon pada VSCode.Di Intellij, saya sederhana mengubah nama file buruh pelabuhan menjadi * .Dockerfile, dan mengaitkan jenis file * .Dockerfile ke sintaks buruh pelabuhan.
sumber
Tambahkan lapisan abstraksi, misalnya, file YAML seperti dalam proyek ini https://github.com/larytet/dockerfile-generator yang terlihat seperti
Skrip / make Python pendek dapat menghasilkan semua Dockerfiles dari file konfigurasi.
sumber
Saat mengerjakan proyek yang membutuhkan penggunaan beberapa dockerfiles, cukup buat setiap dockerfile di direktori terpisah. Misalnya,
app / db /
Masing-masing direktori di atas akan berisi file docker mereka. Ketika aplikasi sedang dibangun, buruh pelabuhan akan mencari semua direktori dan membangun semua buruh pelabuhan.
sumber