15 Docker Commands เพื่อจัดการคอนเทนเนอร์ [List, Stop, Start, Remove และอื่นๆ]
เผยแพร่แล้ว: 2021-08-17Docker เป็นเครื่องมือยอดนิยมในการสร้างและเรียกใช้แอปพลิเคชันที่มีคอนเทนเนอร์ สามารถใช้ได้กับหลายแพลตฟอร์มและใช้เป็นเทคโนโลยีคอนเทนเนอร์ส่วนหลังอย่างใดอย่างหนึ่งใน 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