Docker - คอนเทนเนอร์และเปลือกหอย

ตามค่าเริ่มต้นเมื่อคุณเปิดคอนเทนเนอร์คุณจะใช้ไฟล์ shell commandในขณะที่เปิดคอนเทนเนอร์ดังที่แสดงด้านล่าง นี่คือสิ่งที่เราได้เห็นในบทก่อนหน้านี้เมื่อเราทำงานกับคอนเทนเนอร์

ในภาพหน้าจอด้านบนคุณสามารถสังเกตได้ว่าเราได้ออกคำสั่งต่อไปนี้ -

sudo docker run –it centos /bin/bash

เราใช้คำสั่งนี้เพื่อสร้างคอนเทนเนอร์ใหม่จากนั้นใช้คำสั่ง Ctrl + P + Q เพื่อออกจากคอนเทนเนอร์ ทำให้มั่นใจได้ว่าตู้คอนเทนเนอร์ยังคงมีอยู่แม้ว่าเราจะออกจากตู้คอนเทนเนอร์แล้วก็ตาม

เราสามารถตรวจสอบได้ว่าคอนเทนเนอร์ยังคงมีอยู่กับ Docker psคำสั่ง ถ้าเราต้องออกจากตู้คอนเทนเนอร์โดยตรงตู้คอนเทนเนอร์นั้นก็จะถูกทำลาย

ตอนนี้มีวิธีที่ง่ายกว่าในการยึดติดกับตู้คอนเทนเนอร์และออกจากตู้คอนเทนเนอร์โดยไม่จำเป็นต้องทำลายทิ้ง วิธีหนึ่งในการบรรลุสิ่งนี้คือการใช้nsenter คำสั่ง

ก่อนที่เราจะเรียกใช้ nsenter คำสั่งคุณต้องติดตั้งไฟล์ nsenterภาพ. สามารถทำได้โดยใช้คำสั่งต่อไปนี้ -

docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter

ก่อนที่เราจะใช้ nsenter คำสั่งเราจำเป็นต้องได้รับรหัสกระบวนการของคอนเทนเนอร์เนื่องจากสิ่งนี้ต้องการโดยไฟล์ nsenterคำสั่ง เราสามารถรับ Process ID ผ่าน Dockerinspect command และกรองผ่านไฟล์ Pid.

ดังที่เห็นในภาพหน้าจอด้านบนเราได้ใช้ไฟล์ docker psคำสั่งเพื่อดูคอนเทนเนอร์ที่กำลังทำงานอยู่ เราจะเห็นว่ามีคอนเทนเนอร์หนึ่งที่กำลังทำงานอยู่โดยมีรหัส ef42a4c5e663

จากนั้นเราใช้ Docker inspect เพื่อตรวจสอบการกำหนดค่าของคอนเทนเนอร์นี้จากนั้นใช้ไฟล์ grepคำสั่งเพียงแค่กรอง ID กระบวนการ และจากผลลัพธ์เราจะเห็นว่า Process ID คือ 2978

เมื่อเรามีรหัสกระบวนการแล้วเราสามารถดำเนินการต่อและใช้ไฟล์ nsenter คำสั่งเพื่อแนบไปกับคอนเทนเนอร์ Docker

nsenter

วิธีนี้ช่วยให้สามารถเชื่อมต่อกับคอนเทนเนอร์ได้โดยไม่ต้องออกจากคอนเทนเนอร์

ไวยากรณ์

nsenter –m –u –n –p –i –t คำสั่ง containerID

ตัวเลือก

  • -u ใช้เพื่อกล่าวถึงไฟล์ Uts namespace

  • -m ใช้เพื่อกล่าวถึงไฟล์ mount namespace

  • -n ใช้เพื่อกล่าวถึงไฟล์ network namespace

  • -p ใช้เพื่อกล่าวถึงไฟล์ process namespace

  • -i เพื่อให้คอนเทนเนอร์ทำงานในโหมดโต้ตอบ

  • -t ใช้เพื่อเชื่อมต่อสตรีม I / O ของคอนเทนเนอร์กับโฮสต์ OS

  • containerID - นี่คือรหัสของคอนเทนเนอร์

  • Command - นี่คือคำสั่งสำหรับเรียกใช้ภายในคอนเทนเนอร์

ส่งคืนค่า

ไม่มี

ตัวอย่าง

sudo nsenter –m –u –n –p –i –t 2978 /bin/bash

เอาต์พุต

จากผลลัพธ์เราสามารถสังเกตประเด็นต่อไปนี้ -

  • พรอมต์จะเปลี่ยนเป็นไฟล์ bash shell โดยตรงเมื่อเราออกไฟล์ nsenter คำสั่ง

  • จากนั้นเราจะออกไฟล์ exitคำสั่ง ตอนนี้ปกติถ้าคุณไม่ได้ใช้ไฟล์nsenterคำสั่งคอนเทนเนอร์จะถูกทำลาย แต่คุณจะสังเกตได้ว่าเมื่อเราเรียกใช้ไฟล์nsenter คำสั่งคอนเทนเนอร์ยังคงทำงานอยู่