à¹à¸§à¸à¹à¸²à¸à¸±à¸ à¸à¸à¸±à¸à¸à¸´à¹à¸¨à¸©
สารบัญ:
อิมเมจ Docker เป็นพิมพ์เขียวของคอนเทนเนอร์ Docker ที่มีแอพพลิเคชั่นและทุกสิ่งที่คุณต้องการในการรันแอพพลิเคชั่น คอนเทนเนอร์เป็นอินสแตนซ์รันไทม์ของรูปภาพ
ในบทช่วยสอนนี้เราจะอธิบายว่า Dockerfile คืออะไรวิธีสร้างและวิธีสร้างรูปภาพ Docker ด้วย Dockerfile
Dockerfile คืออะไร
Dockerfile เป็นไฟล์ข้อความที่มีคำสั่งทั้งหมดที่ผู้ใช้สามารถเรียกใช้บนบรรทัดคำสั่งเพื่อสร้างภาพ มันมีคำแนะนำทั้งหมดที่จำเป็นโดยนักเทียบท่าเพื่อสร้างภาพ
อิมเมจของ Docker ประกอบด้วยเลเยอร์ของระบบไฟล์หลายชุดซึ่งแสดงคำแนะนำใน Dockerfile ของอิมเมจที่ประกอบขึ้นเป็นแอพพลิเคชั่นซอฟต์แวร์ที่ปฏิบัติการได้
ไฟล์นักเทียบท่าใช้แบบฟอร์มต่อไปนี้:
# Comment INSTRUCTION arguments
INSTRUCTION
ไม่คำนึงถึงตัวอักษรตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ แต่การประชุมคือใช้ UPPERCASE สำหรับชื่อ
ด้านล่างนี้เป็นรายการที่มีคำอธิบายสั้น ๆ เกี่ยวกับคำแนะนำที่ใช้บ่อยที่สุดของ Dockerfile:
- ARG - คำสั่งนี้อนุญาตให้คุณกำหนดตัวแปรที่สามารถส่งผ่านในเวลาบิลด์อิน คุณยังสามารถตั้งค่าเริ่มต้น จาก - ภาพฐานสำหรับการสร้างภาพใหม่ คำสั่งนี้จะต้องเป็นคำสั่งที่ไม่ใช่ความคิดเห็นแรกใน Dockerfile ข้อยกเว้นเดียวจากกฎนี้คือเมื่อคุณต้องการใช้ตัวแปรในอาร์กิวเมนต์
FROM
ในกรณีนี้คำสั่งARG
สามารถนำหน้าได้ตั้งแต่หนึ่งคำสั่งขึ้นไป LABEL - ใช้เพื่อเพิ่มข้อมูลเมตาให้กับรูปภาพเช่นคำอธิบายเวอร์ชันผู้แต่ง.. เป็นต้น คุณสามารถระบุมากกว่าหนึ่งLABEL
และคำสั่งLABEL
แต่ละรายการเป็นคู่ของคีย์ - ค่า RUN - คำสั่งที่ระบุในคำสั่งนี้จะถูกดำเนินการในระหว่างกระบวนการสร้าง คำสั่งRUN
แต่ละคำจะสร้างเลเยอร์ใหม่ที่ด้านบนของภาพปัจจุบัน เพิ่ม - ใช้เพื่อคัดลอกไฟล์และไดเรกทอรีจากแหล่งที่ระบุไปยังปลายทางที่ระบุไว้ในภาพนักเทียบท่า แหล่งที่มาอาจเป็นไฟล์หรือไดเรกทอรีในท้องถิ่นหรือ URL หากแหล่งที่มาเป็นไฟล์เก็บถาวร tar แบบท้องถิ่นแหล่งข้อมูลนั้นจะถูกแยกออกเป็นอิมเมจ Docker โดยอัตโนมัติ COPY - คล้ายกับADD
แต่ซอร์สสามารถมีได้เฉพาะไฟล์หรือไดเรกทอรี ENV - คำสั่งนี้อนุญาตให้คุณกำหนดตัวแปรสภาพแวดล้อม CMD - ใช้เพื่อระบุคำสั่งที่จะถูกดำเนินการเมื่อคุณเรียกใช้คอนเทนเนอร์ คุณสามารถใช้คำสั่งCMD
เพียงคำสั่งเดียวใน Dockerfile ของคุณ รายการ - คล้ายกับCMD
คำสั่งนี้กำหนดคำสั่งที่จะถูกดำเนินการเมื่อใช้คอนเทนเนอร์ WORKDIR - คำสั่งนี้ตั้งค่าไดเรกทอรีการทำงานปัจจุบันสำหรับคำแนะนำRUN
,CMD
,ENTRYPOINT
,COPY
และADD
USER - ตั้งชื่อผู้ใช้หรือUID
ให้ใช้เมื่อเรียกใช้คำแนะนำRUN
,CMD
,ENTRYPOINT
,COPY
และADD
ใด ๆ ต่อไปนี้ VOLUME - ช่วยให้คุณสามารถติดตั้งไดเรกทอรีเครื่องโฮสต์กับคอนเทนเนอร์ เปิดเผย - ใช้เพื่อระบุพอร์ตที่คอนเทนเนอร์รับฟังขณะใช้งานจริง
หากต้องการยกเว้นการเพิ่มไฟล์และไดเรกทอรีในภาพให้สร้างไฟล์.
.dockerignore
ในไดเรกทอรีบริบท ไวยากรณ์ของ.
.dockerignore
นั้นคล้ายคลึงกับไฟล์
.gitignore
หนึ่งใน Git
สำหรับการอ้างอิงที่สมบูรณ์และคำอธิบายโดยละเอียดของคำแนะนำ Dockerfile ดูหน้าอ้างอิงอย่างเป็นทางการของ Dockerfile
สร้าง Dockerfile
สถานการณ์ที่พบบ่อยที่สุดเมื่อสร้างอิมเมจ Docker คือการดึงอิมเมจที่มีอยู่จากรีจิสตรี (โดยปกติมาจาก Docker Hub) และระบุการเปลี่ยนแปลงที่คุณต้องการทำบนอิมเมจพื้นฐาน อิมเมจพื้นฐานที่ใช้บ่อยที่สุดเมื่อสร้างอิมเมจ Docker คืออัลไพน์เพราะมันมีขนาดเล็กและได้รับการปรับแต่งให้ทำงานใน RAM
ในตัวอย่างนี้เราจะสร้างอิมเมจ Docker สำหรับเซิร์ฟเวอร์ Redis เราจะใช้ Ubuntu 18.04 ล่าสุดเป็นภาพฐาน
ก่อนอื่นให้สร้างไดเรกทอรีที่จะมี Dockerfile และไฟล์ที่จำเป็นทั้งหมด:
mkdir ~/redis_docker
นำทางไปยังไดเร็กทอรีและสร้าง Dockerfile ต่อไปนี้:
cd ~/redis_docker
nano Dockerfile
Dockerfile
FROM ubuntu:18.04 RUN apt-get update && \ apt-get install -y redis-server && \ apt-get clean EXPOSE 6379 CMD
มาอธิบายความหมายของแต่ละบรรทัดใน Dockerfile:
- ในบรรทัดที่
1
เรากำลังกำหนดอิมเมจพื้นฐานคำสั่งRUN
ที่เริ่มต้นในบรรทัดที่3
จะอัปเดตดัชนี apt ติดตั้งแพ็คเกจ "redis-server" และล้างแคช apt คำสั่งที่ใช้ในคำสั่งนั้นเหมือนกับคำสั่งที่คุณจะใช้ในการติดตั้ง redis บนเซิร์ฟเวอร์ Ubuntu คำสั่งEXPOSE
กำหนดพอร์ตที่เซิร์ฟเวอร์ redis รอฟังในบรรทัดสุดท้ายเราใช้คำสั่งCMD
เพื่อตั้งค่าคำสั่งเริ่มต้น ที่จะถูกดำเนินการเมื่อคอนเทนเนอร์ทำงาน
บันทึกไฟล์และปิดตัวแก้ไข
สร้างภาพ
ขั้นตอนต่อไปคือการสร้างภาพ โดยรันคำสั่งต่อไปนี้จากไดเร็กทอรีที่มี Dockerfile อยู่:
docker build -t linuxize/redis.
ตัวเลือก
-t
ระบุชื่อภาพและเลือกชื่อผู้ใช้และแท็กในรูปแบบ 'ชื่อผู้ใช้ / ชื่อ: แท็ก'
ผลลัพธ์ของกระบวนการสร้างจะมีลักษณะดังนี้:
Sending build context to Docker daemon 3.584kB Step 1/4: FROM ubuntu:18.04 ---> 7698f282e524 Step 2/4: RUN apt-get update && apt-get install -y gosu redis-server && apt-get clean ---> Running in e80d4dd69263… Removing intermediate container e80d4dd69263 ---> e19fb7653fca Step 3/4: EXPOSE 6379 ---> Running in 8b2a45f457cc Removing intermediate container 8b2a45f457cc ---> 13b92565c201 Step 4/4: CMD ---> Running in a67ec50c7048 Removing intermediate container a67ec50c7048 ---> d8acc14d9b6b Successfully built d8acc14d9b6b Successfully tagged linuxize/redis:latest
เมื่อกระบวนการสร้างเสร็จสมบูรณ์รูปภาพใหม่จะปรากฏในรายการรูปภาพ:
docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE linuxize/redis latest d8acc14d9b6b 4 minutes ago 100MB ubuntu 18.04 7698f282e524 5 days ago 69.9MB
วิ่งคอนเทนเนอร์
ตอนนี้ภาพถูกสร้างขึ้นให้คุณเรียกใช้คอนเทนเนอร์จากมันโดยการเรียกใช้:
docker run -d -p 6379:6379 --name redis linuxize/redis
ตัวเลือก
-d
บอกนักเทียบท่าให้เรียกใช้คอนเทนเนอร์ในโหมดเดี่ยวตัวเลือก
-p 6379:6379
จะเผยแพร่พอร์ต 6379 ไปยังเครื่องโฮสต์และตัวเลือก
--name redis
ระบุชื่อคอนเทนเนอร์ อาร์กิวเมนต์สุดท้าย
linuxize/redis
คือชื่อของอิมเมจซึ่งใช้เพื่อรันคอนเทนเนอร์
เมื่อคอนเทนเนอร์เริ่มต้นใช้คำสั่งต่อไปนี้เพื่อแสดงรายการคอนเทนเนอร์ที่ใช้งานอยู่ทั้งหมด:
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6b7d424cd915 linuxize/redis:v0.0.1 "redis-server '--pro…" 5 minutes ago Up 5 minutes 0.0.0.0:6379->6379/tcp redis
ในการตรวจสอบว่าทุกอย่างทำงานได้ตามที่ควรใช้
redis-cli
เพื่อเชื่อมต่อกับคอนเทนเนอร์ docker:
redis-cli ping
เซิร์ฟเวอร์ redis ควรตอบกลับด้วย
PONG
ข้อสรุป
บทช่วยสอนนี้ครอบคลุมเฉพาะพื้นฐานของการใช้ Dockerfiles เพื่อสร้างภาพ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีเขียน Dockerfiles และแนวทางปฏิบัติที่ดีที่สุดที่แนะนำให้ดูแนวทางปฏิบัติที่ดีที่สุดสำหรับการเขียน Dockerfiles