สำหรับการเรียกใช้แอปพลิเคชัน ASP.NET Core ฉันได้สร้าง Dockerfile ซึ่งสร้างแอปพลิเคชันและคัดลอกซอร์สโค้ดในคอนเทนเนอร์ซึ่ง Git ดึงข้อมูลโดยใช้ Jenkins ดังนั้นในพื้นที่ทำงานของฉันฉันทำสิ่งต่อไปนี้ใน dockerfile:
WORKDIR /app
COPY src src
ในขณะที่ Jenkins อัปเดตไฟล์บนโฮสต์ของฉันอย่างถูกต้องด้วย Git Docker จะไม่ใช้สิ่งนี้กับรูปภาพของฉัน
สคริปต์พื้นฐานของฉันสำหรับการสร้าง:
#!/bin/bash
imageName=xx:my-image
containerName=my-container
docker build -t $imageName -f Dockerfile .
containerRunning=$(docker inspect --format="{{ .State.Running }}" $containerName 2> /dev/null)
if [ "$containerRunning" == "true" ]; then
docker stop $containerName
docker start $containerName
else
docker run -d -p 5000:5000 --name $containerName $imageName
fi
ฉันลองสิ่งต่างๆเช่น--rm
และ--no-cache
พารามิเตอร์สำหรับdocker run
และหยุด / ลบคอนเทนเนอร์ก่อนที่จะสร้างใหม่ ฉันไม่แน่ใจว่าฉันทำอะไรผิดที่นี่ ดูเหมือนว่านักเทียบท่ากำลังอัปเดตภาพอย่างถูกต้องเนื่องจากการเรียกใช้COPY src src
จะส่งผลให้เกิดรหัสชั้นและไม่มีการเรียกแคช:
Step 6 : COPY src src
---> 382ef210d8fd
วิธีที่แนะนำในการอัปเดตคอนเทนเนอร์คืออะไร
สถานการณ์ทั่วไปของฉันจะเป็น: แอปพลิเคชันกำลังทำงานบนเซิร์ฟเวอร์ในคอนเทนเนอร์ Docker ตอนนี้บางส่วนของแอพได้รับการอัปเดตเช่นโดยการแก้ไขไฟล์ ตอนนี้คอนเทนเนอร์ควรเรียกใช้เวอร์ชันใหม่ ดูเหมือนว่านักเทียบท่าจะแนะนำให้สร้างอิมเมจใหม่แทนการปรับเปลี่ยนคอนเทนเนอร์ที่มีอยู่ดังนั้นฉันคิดว่าวิธีการสร้างใหม่ทั่วไปเหมือนที่ฉันทำนั้นถูกต้อง แต่ต้องปรับปรุงรายละเอียดบางอย่างในการใช้งาน