Bagaimana memberi nama Dockerfiles

156

Saya tidak yakin bagaimana memberi nama Dockerfiles. Banyak di GitHub menggunakan Dockerfiletanpa ekstensi file. Apakah saya memberi mereka nama dan ekstensi; jika demikian apa Atau apakah saya hanya memanggil mereka Dockerfile?

Lloyd R. Prentice
sumber

Jawaban:

181

Jangan ubah nama dockerfile jika Anda ingin menggunakan autobuilder di hub.docker.com. Jangan gunakan ekstensi untuk file buruh pelabuhan, biarkan null. Nama file seharusnya: (tanpa ekstensi sama sekali)

Dockerfile
tk_
sumber
93
Bagaimana jika Anda memiliki beberapa Dockerfile di direktori yang sama?
Visgean Skeloru
@VisgeanSkeloru meskipun agak sedikit merepotkan Anda dapat meletakkannya di direktori yang berbeda jika perlu, di mana pun saya mencarinya tampaknya sudah ada konvensi
orustammanapov
2
@VisgeanSkeloru Tidak memiliki beberapa Dockerfile dalam direktori yang sama. Direktori yang berisi menjadi konteks untuk docker buildperintah, yang berarti bahwa setiap gambar akan dibangun kembali tanpa perlu jika file galangan gambar lain diubah.
Thomas
9
@Thomas terkadang Anda perlu menempatkan beberapa Dockerfile di direktori yang sama untuk berbagi file umum di seluruh wadah terpisah, karena konteks buruh pelabuhan tidak mengizinkan untuk mengakses "../some-common-stuff"
Devis L.
2
Apakah "D" harus dikapitalisasi atau tidak masalah?
NoName
60

dev.Dockerfile, test.Dockerfile, build.DockerfileDll

Pada VS Code saya gunakan <purpose>.Dockerfiledan dikenali dengan benar.

Sahil Ahuja
sumber
Diakui dengan benar di IntelliJ Idea Community 2020.2 juga!
rahulmohan
29

Saya pikir Anda harus memiliki direktori per kontainer dengan Dockerfile (tanpa ekstensi) di dalamnya. Sebagai contoh:

  /db/Dockerfile
  /web/Dockerfile
  /api/Dockerfile

Saat Anda membangun, cukup gunakan nama direktori, Docker akan menemukan Dockerfile. misalnya:

docker build -f ./db .
garryp
sumber
Apakah itu akan membangun 3 kontainer dari contoh Anda?
alvas
@alvas Ya itu akan
garryp
4
Tidak cukup banyak kasus. Docker tidak dapat melihat file. Misalnya target, build, dll.
Cyva
Bisakah kita menjalankan file buruh pelabuhan 3 ini sekaligus menggunakan perintah docker-compose?
Yogi Ghorecha
tapi inilah mengapa docker compose lebih baik digunakan sebagai pengganti IMO. Maka sangat fleksibel bagaimana Anda ingin menyusun atau menemukan file galangan Anda yang sebenarnya
PositiveGuy
16

Jika Anda ingin menggunakan autobuilder di hub.docker.com, itu harus Dockerfile . Jadi disana :)

Dirk Eddelbuettel
sumber
3
Saya yakin konteks pertanyaannya lebih luas. Mungkin Anda dapat memasukkan informasi tambahan untuk individu yang tidak menggunakan pembuat otomatis untuk membuat jawaban ini lebih lengkap.
Josh Habdas
16

Tampaknya ini benar tetapi, secara pribadi, menurut saya desainnya buruk. Tentu, memiliki nama default (dengan ekstensi) tetapi mengizinkan nama lain dan memiliki cara untuk menentukan nama file buruh pelabuhan untuk perintah.

Memiliki ekstensi juga bagus karena memungkinkan seseorang untuk mengaitkan aplikasi ke jenis ekstensi itu. Ketika saya mengklik Dockerfile di MacOSX, ia memperlakukannya sebagai Unix yang dapat dieksekusi dan mencoba menjalankannya.

Jika file Docker memiliki ekstensi, saya dapat memberi tahu OS untuk memulainya dengan aplikasi tertentu, misalnya aplikasi editor teks saya. Saya tidak yakin tetapi perilaku saat ini mungkin juga terkait dengan izin file.

Ashley Aitken
sumber
16

Saya telah membuat dua Dockerfile di direktori yang sama,

# vi one.Dockerfile
# vi two.Dockerfile

untuk membangun kedua penggunaan Dockerfiles,

# docker build . -f one.Dockerfile
# docker build . -f two.Dockerfile

Catatan: Anda harus berada di direktori kerja saat ini ..

Shivaraj Navalgund
sumber
12

Apakah saya memberi mereka nama dan ekstensi; jika demikian apa

Anda dapat menamai Dockerfiles sesuka Anda. Nama file default adalah Dockerfile(tanpa ekstensi), dan menggunakan default dapat membuat berbagai tugas lebih mudah saat bekerja dengan container.

Tergantung pada kebutuhan spesifik Anda, Anda mungkin ingin mengubah nama file. Jika Anda membuat untuk beberapa arsitektur, misalnya, Anda mungkin ingin menambahkan ekstensi yang menunjukkan arsitektur seperti yang telah dilakukan tim resin.io untuk penampung HAProxy, contoh ARM multi-container mereka :

Dockerfile.aarch64
Dockerfile.amd64
Dockerfile.armhf
Dockerfile.armv7hf
Dockerfile.i386
Dockerfile.i386-nlp
Dockerfile.rpi

Dalam contoh yang diberikan, setiap Dockerfile dibuat dari image upstream khusus arsitektur yang berbeda. Dockerfile spesifik yang akan digunakan untuk build dapat ditentukan menggunakan --file, -fopsi saat membuat container Anda menggunakan command line.

Josh Habdas
sumber
1
Saya suka menggunakan ekstensi untuk menunjukkan arsitektur (atau apa pun). Tidak seperti beberapa jawaban lain, semua Dockerfile sangat mudah ditemukan di direktori yang besar dan berantakan; mereka secara alami memilah bersama.
Mike Sherrill 'Cat Recall'
ini adalah standar yang sangat baik untuk diikuti, terima kasih ~
Jake
5

Saya tahu ini adalah pertanyaan lama, dengan beberapa jawaban, tetapi saya terkejut menemukan bahwa tidak ada yang menyarankan konvensi penamaan yang digunakan dalam dokumentasi resmi :

$ docker build -f dockerfiles/Dockerfile.debug -t myapp_debug .
$ docker build -f dockerfiles/Dockerfile.prod  -t myapp_prod .

Perintah di atas akan membangun konteks build saat ini (seperti yang ditentukan oleh .) dua kali, sekali menggunakan versi debug dari a Dockerfiledan sekali lagi menggunakan versi produksi.

Singkatnya, jika Anda memiliki file yang dipanggil Dockerfiledi root konteks build Anda, itu akan diambil secara otomatis. Jika Anda memerlukan lebih dari satu Dockerfileuntuk konteks build yang sama, konvensi penamaan yang disarankan adalah:

Dockerfile.<purpose>

File galangan ini bisa berada di root konteks build Anda atau di subdirektori untuk menjaga direktori root Anda lebih rapi.

Erik B
sumber
3

Dockerfilebagus jika Anda hanya memiliki satu file buruh pelabuhan (per direktori). Anda dapat menggunakan standar apa pun yang Anda inginkan jika Anda memerlukan beberapa file buruh pelabuhan di direktori yang sama - jika Anda punya alasan yang bagus. Dalam proyek baru-baru ini ada file buruh pelabuhan AWS dan file lingkungan dev lokal karena lingkungannya cukup berbeda:

Dockerfile Dockerfile.aws

ktamlyn.dll
sumber
Saya telah melihat metode ini digunakan untuk menentukan arsitektur juga. Misalnya, menempatkan di Dockerfile.armv7hfsebelah a Dockerfile.i386.
Josh Habdas
2

Dockerfile (nama dan folder khusus):

   docker/app.Dockerfile
   docker/nginx.Dockerfile

Membangun:

   docker build  -f ./docker/app.Dockerfile .
   docker build  -f ./docker/nginx.Dockerfile .
Abel
sumber