Android

วิธีสร้างภาพนักเทียบท่าด้วย dockerfile

เวก้าผับ ฉบับพิเศษ

เวก้าผับ ฉบับพิเศษ

สารบัญ:

Anonim

อิมเมจ 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 Hub เป็นบริการรีจิสตรีบนคลาวด์ซึ่งมีฟังก์ชั่นอื่น ๆ ที่ใช้สำหรับเก็บอิมเมจ Docker ในที่เก็บข้อมูลสาธารณะหรือส่วนตัว

ในตัวอย่างนี้เราจะสร้างอิมเมจ 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

นักเทียบท่า