ค้นหาเว็บไซต์

วิธีสร้างและกำหนดค่าอิมเมจ Docker แบบกำหนดเองโดยอัตโนมัติด้วย Dockerfile - ตอนที่ 3


บทช่วยสอนนี้จะเน้นไปที่วิธีสร้างอิมเมจ Docker แบบกำหนดเองโดยใช้ Ubuntu ที่ติดตั้งบริการ Apache กระบวนการทั้งหมดจะเป็นอัตโนมัติโดยใช้ Dockerfile

สามารถสร้างอิมเมจ Docker ได้โดยอัตโนมัติจากไฟล์ข้อความชื่อ Dockerfiles ไฟล์ Docker มีคำแนะนำทีละขั้นตอนหรือคำสั่งที่ใช้ในการสร้างและกำหนดค่าอิมเมจ Docker

ความต้องการ

  • ติดตั้ง Docker และเรียนรู้การจัดการคอนเทนเนอร์ Docker – ตอนที่ 1
  • ปรับใช้และรันแอปพลิเคชันภายใต้ Docker Containers – ตอนที่ 2

โดยทั่วไปแล้ว ไฟล์ Docker จะมีคำสั่งต่างๆ มากมายเพื่อสร้างและกำหนดค่าคอนเทนเนอร์เฉพาะตามความต้องการของคุณ คำแนะนำต่อไปนี้เป็นคำแนะนำที่ใช้บ่อยที่สุด โดยบางส่วนเป็นคำสั่งบังคับ:

  1. FROM=บังคับเป็นคำสั่งแรกในไฟล์ Docker สั่งให้ Docker ดึงอิมเมจพื้นฐานที่คุณกำลังสร้างอิมเมจใหม่ ใช้แท็กเพื่อระบุรูปภาพที่คุณกำลังสร้าง:
Ex: FROM ubuntu:20.04
  1. MAINTAINER=ผู้สร้างอิมเมจบิลด์
  2. RUN=คำสั่งนี้สามารถใช้ได้กับหลายบรรทัดและรันคำสั่งใดๆ หลังจากสร้างอิมเมจ Docker แล้ว
  3. CMD=เรียกใช้คำสั่งใด ๆ เมื่ออิมเมจ Docker เริ่มทำงาน ใช้คำสั่ง CMD เพียงคำสั่งเดียวใน Dockerfile
  4. ENTRYPOINT=เหมือนกับ CMD แต่ใช้เป็นคำสั่งหลักสำหรับรูปภาพ
  5. EXPOSE=สั่งให้คอนเทนเนอร์ฟังพอร์ตเครือข่ายเมื่อทำงาน พอร์ตคอนเทนเนอร์ไม่สามารถเข้าถึงได้จากโฮสต์ตามค่าเริ่มต้น
  6. ENV=ตั้งค่าตัวแปรสภาพแวดล้อมของคอนเทนเนอร์
  7. 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 ง่ายๆ แต่คุณสามารถสร้างแอปพลิเคชันที่ค่อนข้างซับซ้อนไว้ล่วงหน้าซึ่งคุณสามารถเริ่มทำงานได้ในเวลาเพียงไม่กี่วินาทีโดยใช้ทรัพยากรและความพยายามเพียงเล็กน้อย

อ่านเพิ่มเติม: