วิธีสร้างและกำหนดค่าอิมเมจ Docker แบบกำหนดเองโดยอัตโนมัติด้วย Dockerfile - ตอนที่ 3
บทช่วยสอนนี้จะเน้นไปที่วิธีสร้างอิมเมจ Docker แบบกำหนดเองโดยใช้ Ubuntu ที่ติดตั้งบริการ Apache กระบวนการทั้งหมดจะเป็นอัตโนมัติโดยใช้ Dockerfile
สามารถสร้างอิมเมจ Docker ได้โดยอัตโนมัติจากไฟล์ข้อความชื่อ Dockerfiles ไฟล์ Docker มีคำแนะนำทีละขั้นตอนหรือคำสั่งที่ใช้ในการสร้างและกำหนดค่าอิมเมจ Docker
ความต้องการ
- ติดตั้ง Docker และเรียนรู้การจัดการคอนเทนเนอร์ Docker – ตอนที่ 1
- ปรับใช้และรันแอปพลิเคชันภายใต้ Docker Containers – ตอนที่ 2
โดยทั่วไปแล้ว ไฟล์ Docker จะมีคำสั่งต่างๆ มากมายเพื่อสร้างและกำหนดค่าคอนเทนเนอร์เฉพาะตามความต้องการของคุณ คำแนะนำต่อไปนี้เป็นคำแนะนำที่ใช้บ่อยที่สุด โดยบางส่วนเป็นคำสั่งบังคับ:
FROM
=บังคับเป็นคำสั่งแรกในไฟล์ Docker สั่งให้ Docker ดึงอิมเมจพื้นฐานที่คุณกำลังสร้างอิมเมจใหม่ ใช้แท็กเพื่อระบุรูปภาพที่คุณกำลังสร้าง:
Ex: FROM ubuntu:20.04
MAINTAINER
=ผู้สร้างอิมเมจบิลด์RUN
=คำสั่งนี้สามารถใช้ได้กับหลายบรรทัดและรันคำสั่งใดๆ หลังจากสร้างอิมเมจ Docker แล้วCMD
=เรียกใช้คำสั่งใด ๆ เมื่ออิมเมจ Docker เริ่มทำงาน ใช้คำสั่ง CMD เพียงคำสั่งเดียวใน DockerfileENTRYPOINT
=เหมือนกับ CMD แต่ใช้เป็นคำสั่งหลักสำหรับรูปภาพEXPOSE
=สั่งให้คอนเทนเนอร์ฟังพอร์ตเครือข่ายเมื่อทำงาน พอร์ตคอนเทนเนอร์ไม่สามารถเข้าถึงได้จากโฮสต์ตามค่าเริ่มต้นENV
=ตั้งค่าตัวแปรสภาพแวดล้อมของคอนเทนเนอร์ADD
=คัดลอกทรัพยากร (ไฟล์ ไดเร็กทอรี หรือไฟล์จาก URL)
ขั้นตอนที่ 1: การสร้างหรือเขียนที่เก็บ Dockerfile
1. ก่อนอื่น มาสร้างที่เก็บ Dockerfile เพื่อนำไฟล์กลับมาใช้ใหม่เพื่อสร้างรูปภาพอื่นๆ ในอนาคต สร้างไดเรกทอรีว่างที่ไหนสักแห่งในพาร์ติชัน /var
ซึ่งเราจะสร้างไฟล์พร้อมคำแนะนำที่จะใช้ในการสร้างอิมเมจ Docker ใหม่
mkdir -p /var/docker/ubuntu/apache
touch /var/docker/ubuntu/apache/Dockerfile
2. จากนั้น ให้เริ่มแก้ไขไฟล์ตามคำแนะนำต่อไปนี้:
vi /var/docker/ubuntu/apache/Dockerfile
ข้อความที่ตัดตอนมาจาก Dokerfile:
FROM ubuntu
MAINTAINER your_name <[email >
RUN apt-get -y install apache2
RUN echo “Hello Apache server on Ubuntu Docker” > /var/www/html/index.html
EXPOSE 80
CMD /usr/sbin/apache2ctl -D FOREGROUND
ตอนนี้เรามาดูคำแนะนำเกี่ยวกับไฟล์กัน:
บรรทัดแรกบอกเราว่าเรากำลังสร้างจากอิมเมจ Ubuntu หากไม่มีการส่งแท็ก เช่น 14:10 ระบบจะใช้รูปภาพล่าสุดจาก Docker Hub
ในบรรทัดที่สอง เราได้เพิ่ม ชื่อ และ อีเมล ของผู้สร้างรูปภาพ RUN สองบรรทัดถัดไปจะถูกดำเนินการในคอนเทนเนอร์เมื่อสร้างอิมเมจ และจะติดตั้ง Apache daemon และ echo ข้อความบางส่วนลงในหน้าเว็บ apache เริ่มต้น .
บรรทัด EXPOSE จะสั่งให้คอนเทนเนอร์ Docker ฟังบนพอร์ต 80 แต่พอร์ตจะไม่สามารถใช้งานได้ภายนอก บรรทัดสุดท้ายสั่งให้คอนเทนเนอร์เรียกใช้บริการ Apache ในเบื้องหน้าหลังจากที่คอนเทนเนอร์เริ่มทำงาน
3. สิ่งสุดท้ายที่เราต้องทำคือเริ่มสร้างอิมเมจโดยออกคำสั่งด้านล่าง ซึ่งจะสร้างอิมเมจ Docker ใหม่ภายในเครื่องที่ชื่อ ubuntu-apache
โดยยึดตาม Dockerfile สร้างขึ้นก่อนหน้านี้ ดังที่แสดงในตัวอย่างนี้:
docker build -t ubuntu-apache /var/docker/ubuntu/apache/
4. หลังจากที่ นักเทียบท่า สร้างรูปภาพแล้ว คุณสามารถแสดงรายการรูปภาพที่มีอยู่ทั้งหมดและระบุรูปภาพของคุณได้โดยใช้คำสั่งต่อไปนี้:
docker images
ขั้นตอนที่ 2: เรียกใช้คอนเทนเนอร์และเข้าถึง Apache จาก LAN
5. เพื่อใช้งานคอนเทนเนอร์อย่างต่อเนื่อง (ในพื้นหลัง) และเข้าถึงบริการที่เปิดเผยคอนเทนเนอร์ (พอร์ต) จากโฮสต์หรือเครื่องระยะไกลอื่นๆ ใน LAN ของคุณ ให้รันคำสั่งด้านล่างบนพรอมต์เทอร์มินัลโฮสต์ของคุณ : :
docker run -d -p 81:80 ubuntu-apache
ที่นี่ ตัวเลือก -d
รันคอนเทนเนอร์ ubuntu-apache
ในพื้นหลัง (เป็น daemon) และตัวเลือก -p
แมปพอร์ตคอนเทนเนอร์ 80 ไปยังพอร์ต localhost ของคุณ 81 การเข้าถึงบริการ Apache จาก LAN ภายนอกสามารถเข้าถึงได้ผ่านพอร์ต 81 เท่านั้น
คำสั่ง Netstat จะทำให้คุณทราบว่าพอร์ตใดที่โฮสต์กำลังฟังอยู่
หลังจากที่คอนเทนเนอร์เริ่มทำงานแล้ว คุณยังสามารถเรียกใช้คำสั่ง docker ps
เพื่อดูสถานะของคอนเทนเนอร์ที่ทำงานอยู่ได้
6. หน้าเว็บสามารถแสดงบนโฮสต์ของคุณได้จากบรรทัดคำสั่งโดยใช้ยูทิลิตี curl กับที่อยู่ IP ของเครื่อง, localhost หรืออินเทอร์เฟซ docker net บนพอร์ต 81 ใช้คำสั่ง IP บรรทัดเพื่อแสดงที่อยู่ IP ของอินเทอร์เฟซเครือข่าย
ip addr [List nework interfaces]
curl ip-address:81 [System Docker IP Address]
curl localhost:81 [Localhost]
7. หากต้องการเยี่ยมชมเว็บเพจคอนเทนเนอร์จากเครือข่ายของคุณ ให้เปิดเบราว์เซอร์ที่ตำแหน่งระยะไกลและใช้โปรโตคอล HTTP ที่อยู่ IP ของเครื่องที่คอนเทนเนอร์ทำงานอยู่ ตามด้วยพอร์ต 81 ดังที่แสดงในภาพ ด้านล่างภาพ
http://ip-address:81
8. หากต้องการทราบถึงกระบวนการที่กำลังทำงานอยู่ภายในคอนเทนเนอร์ ให้ออกคำสั่งต่อไปนี้:
docker ps
docker top <name or ID of the container>
9. หากต้องการหยุดปัญหาคอนเทนเนอร์ คำสั่ง นักเทียบท่าหยุด
ตามด้วยรหัสหรือชื่อคอนเทนเนอร์
docker stop <name or ID of the container>
docker ps
10. ในกรณีที่คุณต้องการกำหนดชื่อที่สื่อความหมายให้กับคอนเทนเนอร์ ให้ใช้ตัวเลือก --name
ดังที่แสดงในตัวอย่างด้านล่าง:
docker run --name my-www -d -p 81:80 ubuntu-apache
docker ps
ตอนนี้คุณสามารถอ้างอิงคอนเทนเนอร์เพื่อการจัดการ (เริ่มต้น หยุด บนสุด สถิติ ฯลฯ) ได้โดยใช้ชื่อที่กำหนดเท่านั้น
docker stats my-www
ขั้นตอนที่ 3: สร้างไฟล์การกำหนดค่าทั้งระบบสำหรับ Docker Container
11. บน CentOS/RHEL คุณสามารถสร้างไฟล์การกำหนดค่า systemd และจัดการคอนเทนเนอร์ได้ตามปกติกับบริการในพื้นที่อื่นๆ
ตัวอย่างเช่น สร้างไฟล์ systemd ใหม่ชื่อ สมมติว่า apache-docker.service
โดยใช้คำสั่งต่อไปนี้:
vi /etc/systemd/system/apache-docker.service
apache-docker.service ไฟล์ที่ตัดตอนมา:
[Unit]
Description=apache container
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a my-www
ExecStop=/usr/bin/docker stop -t 2 my-www
[Install]
WantedBy=local.target
12. หลังจากที่คุณแก้ไขไฟล์เสร็จแล้ว ให้ปิดมัน โหลด systemd daemon ใหม่เพื่อแสดงการเปลี่ยนแปลง และเริ่มต้นคอนเทนเนอร์โดยใช้คำสั่งต่อไปนี้:
systemctl daemon-reload
systemctl start apache-docker.service
systemctl status apache-docker.service
นี่เป็นเพียงตัวอย่างง่ายๆ ของสิ่งที่คุณสามารถทำได้ด้วย Dockerfile ง่ายๆ แต่คุณสามารถสร้างแอปพลิเคชันที่ค่อนข้างซับซ้อนไว้ล่วงหน้าซึ่งคุณสามารถเริ่มทำงานได้ในเวลาเพียงไม่กี่วินาทีโดยใช้ทรัพยากรและความพยายามเพียงเล็กน้อย
อ่านเพิ่มเติม: