Docker เบื้องต้น
Tim Sangster
Software Engineer @ DataCamp
คำสั่ง COPY ใช้คัดลอกไฟล์จากเครื่องของเราไปยัง image ที่กำลังสร้าง:
COPY <src-path-on-host> <dest-path-on-image>
COPY /projects/pipeline_v3/pipeline.py /app/pipeline.py
docker build -t pipeline:v3 .
...
[4/4] COPY ./projects/pipeline_v3/pipeline.py /app/pipeline.py
หากไม่ระบุชื่อไฟล์ที่ปลายทาง จะใช้ชื่อไฟล์ต้นทางเดิม:
COPY /projects/pipeline_v3/pipeline.py /app/
หากไม่ระบุชื่อไฟล์ใน src-path ระบบจะคัดลอกไฟล์ทั้งหมดในโฟลเดอร์นั้น
COPY <src-folder> <dest-folder>
COPY /projects/pipeline_v3/ /app/
COPY /projects/pipeline_v3/ /app/ จะคัดลอกทุกอย่างใน pipeline_v3/:
/projects/
pipeline_v3/
pipeline.py
requirements.txt
tests/
test_pipeline.py
/init.py
/projects/
Dockerfile
pipeline_v3/
pipeline.py
หาก working directory ปัจจุบันอยู่ในโฟลเดอร์ projects/
ไม่สามารถคัดลอก init.py เข้า image ได้
docker build -t pipeline:v3 .
=> ERROR [4/4] COPY ../init.py / 0.0s
failed to compute cache key: "../init.py" not found: not found
แทนที่จะคัดลอกไฟล์จาก directory ในเครื่อง มักจะดาวน์โหลดไฟล์ระหว่างการสร้าง image:
RUN curl <file-url> -o <destination>
RUN unzip <dest-folder>/<filename>.zip
RUN rm <copy_directory>/<filename>.zip
RUN curl <file_download_url> -o <destination_directory>/<filename>.zip \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
| การใช้งาน | คำสั่งใน Dockerfile |
|---|---|
| คัดลอกไฟล์จากเครื่องเข้า image | COPY <src-path-on-host> <dest-path-on-image> |
| คัดลอกโฟลเดอร์จากเครื่องเข้า image | COPY <src-folder> <dest-folder> |
| ไม่สามารถคัดลอกจาก directory ระดับบนของ Dockerfile ได้ |
รักษาขนาด image ให้เล็กด้วยการดาวน์โหลด แตกไฟล์ และลบไฟล์ในคำสั่ง RUN เดียว:
RUN curl <file_download_url> -o <destination_directory> \
&& unzip <destination_directory>/<filename>.zip -d <unzipped-directory> \
&& rm <destination_directory>/<filename>.zip
Docker เบื้องต้น