15 Docker Commands เพื่อจัดการคอนเทนเนอร์ [List, Stop, Start, Remove และอื่นๆ]

เผยแพร่แล้ว: 2021-08-17

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

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

การจัดการคอนเทนเนอร์ Docker เป็นหนึ่งในส่วนที่สำคัญที่สุดในการดูแลในฐานะผู้ดูแลระบบที่จัดการโฮสต์/คอนเทนเนอร์ของ Docker

ในบทความนี้ เราจะเน้นที่การจัดการคอนเทนเนอร์โดยใช้คำสั่ง docker

เรียกใช้คำสั่ง

คำสั่ง docker run ใช้เพื่อรันคอนเทนเนอร์จากอิมเมจโดยการระบุ Image ID หรือ Repository และ/หรือชื่อ Tag

 $ docker run {image}

ตัวอย่าง:

 $ docker run nginx

คำสั่งดังกล่าว จะรันอินสแตนซ์ของ แอปพลิเคชัน <span class="NormalTextRun SpellingErrorV2 SCXW251451022 BCX0">nginx</span> บนโฮสต์นักเทียบท่า หากมีอยู่แล้ว หากไม่มีอยู่บนโฮสต์ Docker อุปกรณ์จะออกไปที่ Docker Hub (โดยค่าเริ่มต้น) และดึงภาพลง แต่นี่ทำครั้งแรกเท่านั้น ในครั้งต่อๆ ไป จะใช้รูปภาพเดิมซ้ำ

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

นอกจากนี้ หากคุณต้องการเรียกใช้คอนเทนเนอร์ในพื้นหลังในโหมดแยกส่วน เพื่อให้คุณกลับมาที่พรอมต์หลังจาก Docker เปิดตัวคอนเทนเนอร์ ให้ใช้แฟล็ก -d

ตัวอย่าง:

 $ docker run nginx Unable to find image 'nginx:latest' locally latest: Pulling from library/nginx 33847f680f63: Pull complete dbb907d5159d: Pull complete 8a268f30c42a: Pull complete b10cf527a02d: Pull complete c90b090c213b: Pull complete 1f41b2f2bf94: Pull complete Digest: sha256:8f335768880da6baf72b70c701002b45f4932acae8d574dedfddaf967fc3ac90 Status: Downloaded newer image for nginx:latest /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2021/08/15 12:13:23 [notice] 1#1: using the "epoll" event method 2021/08/15 12:13:23 [notice] 1#1: nginx/1.21.1 2021/08/15 12:13:23 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/08/15 12:13:23 [notice] 1#1: OS: Linux 5.8.0-1039-azure 2021/08/15 12:13:23 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2021/08/15 12:13:23 [notice] 1#1: start worker processes 2021/08/15 12:13:23 [notice] 1#1: start worker process 33 2021/08/15 12:13:23 [notice] 1#1: start worker process 34

ps คำสั่ง

คำสั่ง docker ps แสดงรายการคอนเทนเนอร์ที่ทำงานอยู่ทั้งหมดและข้อมูลพื้นฐานบางอย่างเกี่ยวกับคอนเทนเนอร์เหล่านี้ เช่นเดียวกับ ID คอนเทนเนอร์ ชื่อของรูปภาพ เวลาถูกสร้างขึ้น สถานะปัจจุบัน และชื่อของคอนเทนเนอร์ แต่ละคอนเทนเนอร์จะได้รับชื่อแบบสุ่ม (หากไม่ได้ระบุไว้อย่างชัดเจน) และ ID

ตัวอย่าง:

 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 133f5e0267a5 nginx "/docker-entrypoint.…" 10 seconds ago Up 10 seconds 80/tcp jolly_elion

ในการแสดงรายการคอนเทนเนอร์ที่ทำงานอยู่และไม่ได้ทำงาน/ออกทั้งหมดพร้อมกัน คุณสามารถใช้:

 $ docker ps -a

ตัวอย่าง:

 $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES fcec129f0eb4 nginx "/docker-entrypoint.…" 46 hours ago Exited (0) 46 hours ago interesting_ishizaka 6e8b1e441aa6 hello-world "/hello" 2 days ago Exited (0) 2 days ago keen_shirley

ls คำสั่ง

เช่นเดียวกับคำสั่ง ps ls สามารถใช้สำหรับการแสดงรายการคอนเทนเนอร์ -a แฟล็กสามารถใช้เพื่อแสดงรายการคอนเทนเนอร์ทั้งหมด (ไม่ใช่แค่คอนเทนเนอร์ที่ทำงานอยู่)

 $ docker container ls

ตัวอย่าง:

 $ docker container ls CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 15796e91c30b redis "docker-entrypoint.s…" 2 seconds ago Up 1 second 6379/tcp flamboyant_neumann 904390b65d45 nginx "/docker-entrypoint.…" 14 minutes ago Up 14 minutes 80/tcp nginx_new $

หยุดคำสั่ง

คำสั่ง docker stop ใช้เพื่อหยุดคอนเทนเนอร์ที่ทำงานอยู่ ที่นี่เราต้องใส่ชื่อคอนเทนเนอร์หรือ ID พร้อมกับสิ่งนี้

 $ docker stop {container-id}

เมื่อสำเร็จ มันจะส่งคืนชื่อนักเทียบท่าหรือ ID

ตัวอย่าง:

 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 133f5e0267a5 nginx "/docker-entrypoint.…" 50 seconds ago Up 49 seconds 80/tcp jolly_elion

การดำเนินการนี้จะส่งคืน CONTAINER ID ซึ่งคุณสามารถใช้หยุดคอนเทนเนอร์ได้

 $ docker stop 133f5 133f5

สำหรับตัวอย่างนี้และตัวอย่างที่จะตามมา โปรดทราบว่าคุณไม่จำเป็นต้องระบุค่าที่สมบูรณ์ของ CONTAINER ID มันจะยอมรับได้จนถึงส่วน ซึ่งทำให้ไม่ซ้ำกันระหว่างคอนเทนเนอร์ที่ทำงานอยู่อื่น ๆ เนื่องจาก Docker รู้ว่าคอนเทนเนอร์ใดที่จะหยุด

rm คำสั่ง

คำสั่ง docker rm ลบคอนเทนเนอร์ที่หยุดหรือออกจากคอนเทนเนอร์

 $ docker rm {CONTAINER NAME or ID}

ตัวอย่าง:

 $ docker rm 133f5 133f5 $

คำสั่ง exec

เราสามารถใช้คำสั่ง exec เพื่อเข้าไปในคอนเทนเนอร์ที่กำลังรันอยู่ สิ่งนี้มีประโยชน์ในการดีบักคอนเทนเนอร์ที่ทำงานอยู่หรือทำบางสิ่งภายในคอนเทนเนอร์

 $ docker exec –it {container} {command}

ตัวอย่าง:

สมมติว่าคุณต้องการเรียกใช้ bash shell (สมมติว่ารูปภาพมี Bash อยู่ คุณสามารถใช้เชลล์อื่นที่มีอยู่ได้เช่นกัน) ภายในคอนเทนเนอร์ชื่อ unruffled_meninsky ในโหมดโต้ตอบ ให้ใช้:

 $ docker exec –it unruffled_meninsky /bin/bash

สิ่งนี้ควรนำคุณเข้าสู่คอนเทนเนอร์บนเปลือก bash ที่นี่แฟล็ก -i หมายถึงโหมดโต้ตอบและ -t สำหรับเทอร์มินัล หากคุณต้องการเรียกใช้คำสั่งตั้งแต่หนึ่งคำสั่งขึ้นไปและออกจากคอนเทนเนอร์ คุณสามารถใช้:

 $ docker exec unruffled_meninsky cat /etc/hosts 127.0.0.1 localhost ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2 cd2eed4acf34

บันทึกคำสั่ง

ในกรณีที่คอนเทนเนอร์เปิดตัวในโหมดแยกส่วน และเราต้องการดูบันทึกของคอนเทนเนอร์ เราสามารถใช้คำสั่ง logs เพื่อตรวจสอบบันทึกได้:

 $ docker logs {CONTAINER NAME or ID}

ตัวอย่าง:

 $ docker logs 7da6dcebaf9c /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2021/08/15 12:14:09 [notice] 1#1: using the "epoll" event method 2021/08/15 12:14:09 [notice] 1#1: nginx/1.21.1 2021/08/15 12:14:09 [notice] 1#1: built by gcc 8.3.0 (Debian 8.3.0-6) 2021/08/15 12:14:09 [notice] 1#1: OS: Linux 5.8.0-1039-azure 2021/08/15 12:14:09 [notice] 1#1: getrlimit(RLIMIT_NOFILE): 1048576:1048576 2021/08/15 12:14:09 [notice] 1#1: start worker processes 2021/08/15 12:14:09 [notice] 1#1: start worker process 31 2021/08/15 12:14:09 [notice] 1#1: start worker process 32 $

คำสั่ง cp

ในการคัดลอกไฟล์ระหว่างคอนเทนเนอร์และระบบไฟล์ localhost คุณสามารถใช้คำสั่ง cp

 $ docker container cp {CONTAINER NAME or ID:SRC_PATH} {DEST_PATH}|-

ตัวอย่าง:

 $ docker container cp quirky_cray:/etc/nginx/nginx.conf nginx.conf.bkp

คำสั่งส่งออก

คำสั่งคอนเทนเนอร์ Docker มีตัวเลือกในการส่งออกระบบไฟล์ของคอนเทนเนอร์เป็นไฟล์ TAR

 $ docker container export {CONTAINER NAME or ID}

ตรวจสอบคำสั่ง

เราสามารถตรวจสอบข้อมูลโดยละเอียดเกี่ยวกับคอนเทนเนอร์ได้โดยใช้คำสั่ง inspect ดังนี้:

 $ docker inspect {CONTAINER NAME or ID}

หรือ

$ docker container inspect {CONTAINER NAME or ID}

คำสั่งฆ่า

คอนเทนเนอร์ที่รันอยู่สามารถฆ่าได้โดยใช้คำสั่ง kill พร้อม --signal หรือ -s ทางเลือก สามารถระบุคอนเทนเนอร์หลายตัวเพื่อฆ่าพวกมันในครั้งเดียว

 $ docker kill {CONTAINER NAME or ID} [--signal VAL]

ตัวอย่าง:

 $ docker kill cd9005a0b5d2 -s 9 cd9005a0b5d2 $

คำสั่งสถิติ

หากต้องการแสดงสตรีมแบบสดของการใช้ทรัพยากรของคอนเทนเนอร์ คุณสามารถใช้คำสั่ง stats :

 $ docker container stats {CONTAINER NAME or ID}

ตัวอย่าง:

 $ docker container stats thirsty_volhard CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 904390b65d45 thirsty_volhard 0.00% 3.406MiB / 7.775GiB 0.04% 1.02kB / 0B 0B / 8.19kB 3

กองบัญชาการสูงสุด

เช่นเดียวกับคำสั่ง top ใน Linux เราสามารถใช้ร่วมกับ Docker เพื่อรับรายการกระบวนการที่ทำงานอยู่

 $ docker container top {CONTAINER NAME or ID}

ตัวอย่าง:

 $ docker container top thirsty_volhard UID PID PPID C STIME TTY TIME CMD root 2603 2582 0 12:34 ? 00:00:00 nginx: master process nginx -g daemon off; systemd+ 2659 2603 0 12:34 ? 00:00:00 nginx: worker process systemd+ 2660 2603 0 12:34 ? 00:00:00 nginx: worker process $

เปลี่ยนชื่อ Command

หากต้องการเปลี่ยนชื่อคอนเทนเนอร์ที่มีอยู่ ให้ใช้คำสั่ง rename

 $ docker container rename {OLD CONTAINER NAME} {NEW CONTAINER NAME}

ตัวอย่าง:

 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 904390b65d45 nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 80/tcp nginx_container $ docker container rename nginx_container nginx_new $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 904390b65d45 nginx "/docker-entrypoint.…" 7 minutes ago Up 7 minutes 80/tcp nginx_new $

คำสั่งต่าง

เราสามารถตรวจสอบการเปลี่ยนแปลงของไฟล์หรือไดเร็กทอรีบนระบบไฟล์ของคอนเทนเนอร์ด้วยคำสั่ง diff

 $ docker container diff {CONTAINER NAME or ID}

ตัวอย่าง:

 $ docker container diff nginx_new C /var C /var/cache C /var/cache/nginx A /var/cache/nginx/uwsgi_temp A /var/cache/nginx/client_temp A /var/cache/nginx/fastcgi_temp A /var/cache/nginx/proxy_temp A /var/cache/nginx/scgi_temp C /etc C /etc/nginx C /etc/nginx/conf.d C /etc/nginx/conf.d/default.conf C /run A /run/nginx.pid $

สรุป

สรุป Doker เสนอชุดคำสั่งที่ครอบคลุมเพื่อจัดการคอนเทนเนอร์ตั้งแต่การสร้างไปจนถึงการทำลาย เราได้กล่าวถึงคำสั่งสำคัญบางคำสั่งและการใช้งานในบทความนี้ ซึ่งควรให้แนวคิดที่ดีในการจัดการคอนเทนเนอร์นักเทียบท่า

ต่อไป ค้นหาแหล่งข้อมูลเพื่อเรียนรู้ DevOps