ฉันไม่แน่ใจว่าจะตั้งชื่อ Dockerfiles อย่างไร หลายคนบน GitHub ใช้Dockerfile
โดยไม่มีนามสกุลไฟล์ ฉันให้ชื่อและนามสกุลแก่พวกเขาหรือไม่ ถ้ายังไง? หรือฉันเรียกมันว่าDockerfile
?
ฉันไม่แน่ใจว่าจะตั้งชื่อ Dockerfiles อย่างไร หลายคนบน GitHub ใช้Dockerfile
โดยไม่มีนามสกุลไฟล์ ฉันให้ชื่อและนามสกุลแก่พวกเขาหรือไม่ ถ้ายังไง? หรือฉันเรียกมันว่าDockerfile
?
คำตอบ:
อย่าเปลี่ยนชื่อของ dockerfile ถ้าคุณต้องการใช้ autobuilder ที่ hub.docker.com อย่าใช้นามสกุลสำหรับไฟล์นักเทียบท่าปล่อยให้เป็นโมฆะ ชื่อไฟล์ควรเป็น: (ไม่มีนามสกุลเลย)
Dockerfile
dev.Dockerfile
, test.Dockerfile
, build.Dockerfile
ฯลฯ
ฉันใช้ VS Code <purpose>.Dockerfile
และได้รับการยอมรับอย่างถูกต้อง
ฉันคิดว่าคุณควรมีไดเร็กทอรีต่อคอนเทนเนอร์ที่มี Dockerfile (ไม่มีนามสกุล) อยู่ในนั้น ตัวอย่างเช่น:
/db/Dockerfile
/web/Dockerfile
/api/Dockerfile
เมื่อคุณสร้างเพียงใช้ชื่อไดเร็กทอรี Docker จะพบ Dockerfile เช่น:
docker build -f ./db .
หากคุณต้องการที่จะใช้ autobuilder ที่ hub.docker.com ก็จะต้องมีการ Dockerfile
ที่นั่น :)
ดูเหมือนว่าจะเป็นเรื่องจริง แต่โดยส่วนตัวแล้วดูเหมือนว่าฉันจะออกแบบไม่ดี แน่นอนว่ามีชื่อเริ่มต้น (พร้อมนามสกุล) แต่อนุญาตชื่ออื่นและมีวิธีระบุชื่อไฟล์นักเทียบท่าสำหรับคำสั่ง
การมีส่วนขยายเป็นสิ่งที่ดีเพราะช่วยให้สามารถเชื่อมโยงแอปพลิเคชันกับประเภทส่วนขยายนั้นได้ เมื่อฉันคลิกที่ Dockerfile ใน MacOSX จะถือว่าไฟล์นั้นเป็นไฟล์ปฏิบัติการ Unix และพยายามเรียกใช้
หากไฟล์ Docker มีส่วนขยายฉันสามารถบอกให้ OS เริ่มต้นด้วยแอปพลิเคชันเฉพาะเช่นแอปพลิเคชันแก้ไขข้อความของฉัน ฉันไม่แน่ใจ แต่พฤติกรรมปัจจุบันอาจเกี่ยวข้องกับการอนุญาตของไฟล์ด้วย
ฉันได้สร้าง Dockerfiles สองไฟล์ในไดเรกทอรีเดียวกัน
# vi one.Dockerfile
# vi two.Dockerfile
เพื่อสร้างทั้ง Dockerfiles ใช้
# docker build . -f one.Dockerfile
# docker build . -f two.Dockerfile
หมายเหตุ: คุณควรอยู่ในไดเรกทอรีการทำงานปัจจุบัน ..
ฉันให้ชื่อและนามสกุลแก่พวกเขาหรือไม่ ถ้ายังไง
คุณสามารถตั้งชื่อ Dockerfiles ได้ตามต้องการ ชื่อไฟล์เริ่มต้นคือDockerfile
(ไม่มีนามสกุล) และการใช้ค่าเริ่มต้นสามารถทำให้งานต่างๆง่ายขึ้นในขณะที่ทำงานกับคอนเทนเนอร์
คุณอาจต้องการเปลี่ยนชื่อไฟล์ทั้งนี้ขึ้นอยู่กับความต้องการเฉพาะของคุณ ตัวอย่างเช่นหากคุณกำลังสร้างสถาปัตยกรรมหลายแบบคุณอาจต้องการเพิ่มส่วนขยายที่ระบุสถาปัตยกรรมตามที่ทีมresin.ioได้ทำไว้สำหรับคอนเทนเนอร์ HAProxy ตัวอย่าง ARM แบบหลายคอนเทนเนอร์ :
Dockerfile.aarch64
Dockerfile.amd64
Dockerfile.armhf
Dockerfile.armv7hf
Dockerfile.i386
Dockerfile.i386-nlp
Dockerfile.rpi
ในตัวอย่างที่ให้มา Dockerfile แต่ละตัวสร้างจากอิมเมจอัพสตรีมเฉพาะสถาปัตยกรรมที่แตกต่างกัน Dockerfile เฉพาะที่จะใช้สำหรับบิลด์อาจถูกระบุโดยใช้--file, -f
ตัวเลือกเมื่อสร้างคอนเทนเนอร์ของคุณโดยใช้บรรทัดคำสั่ง
ฉันรู้ว่านี่เป็นคำถามเก่าที่มีคำตอบค่อนข้างน้อย แต่ฉันประหลาดใจที่พบว่าไม่มีใครแนะนำหลักการตั้งชื่อที่ใช้ในเอกสารอย่างเป็นทางการ :
$ docker build -f dockerfiles/Dockerfile.debug -t myapp_debug . $ docker build -f dockerfiles/Dockerfile.prod -t myapp_prod .
คำสั่งข้างต้นจะสร้างบริบทการสร้างปัจจุบัน (ตามที่ระบุไว้
.
) สองครั้งโดยใช้เวอร์ชันดีบักของ aDockerfile
และหนึ่งครั้งโดยใช้เวอร์ชันที่ใช้งานจริง
โดยสรุปหากคุณมีไฟล์ที่เรียกว่าDockerfile
ในรูทของบริบทบิลด์ของคุณไฟล์นั้นจะถูกเลือกโดยอัตโนมัติ หากคุณต้องการมากกว่าหนึ่งDockerfile
สำหรับบริบทการสร้างเดียวกันหลักการตั้งชื่อที่แนะนำคือ:
Dockerfile.<purpose>
Dockerfiles เหล่านี้อาจอยู่ในรูทของบริบทบิลด์ของคุณหรือในไดเร็กทอรีย่อยเพื่อให้ไดเร็กทอรีรูทของคุณเป็นระเบียบมากขึ้น
Dockerfile
เป็นสิ่งที่ดีถ้าคุณมีไฟล์นักเทียบท่าเพียงไฟล์เดียว (ต่อไดเรกทอรี) คุณสามารถใช้มาตรฐานใดก็ได้ที่คุณต้องการหากคุณต้องการไฟล์นักเทียบท่าหลายไฟล์ในไดเร็กทอรีเดียวกัน - หากคุณมีเหตุผลที่ดี ในโครงการล่าสุดมีไฟล์ AWS docker และไฟล์สภาพแวดล้อม dev ในเครื่องเนื่องจากสภาพแวดล้อมแตกต่างกันมากพอ:
Dockerfile
Dockerfile.aws
Dockerfile.armv7hf
ถัดจากไฟล์Dockerfile.i386
.
Dockerfile (ชื่อและโฟลเดอร์ที่กำหนดเอง):
docker/app.Dockerfile
docker/nginx.Dockerfile
สร้าง:
docker build -f ./docker/app.Dockerfile .
docker build -f ./docker/nginx.Dockerfile .