คำสั่ง Docker Command Line

Sirichai Teerapattarasakul

Sirichai Teerapattarasakul / July 03, 2021

3 min read

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

คำสั่ง Docker


แสดงเวอร์ชั่น

docker -v

โหลด Docker image

docker pull <image_name>:<tag> // tag ถ้าไม่ระบุระบบจะเลือกเวอร์ชั่นล่าสุดมาให้

สร้าง container จาก image

ซึ่งถ้าไม่มี image ในเครื่อง มันก็จะโหลดลงมาให้เราอัตโนมัติ โดยจะมี options ดังนี้

  • –name กำหนดชื่อ container name ถ้าไม่ระบุมันจะสุ่มตั้งชื่อมาให้เราเอง
  • -d เป็นการสั่ง container ให้รันแบบ background
  • -e กำหนด Environment ของ Container ต้องดูว่าแต่ล่ะ images มีอะไรให้เราเซ็ตบ้าง
  • -p เป็นการ map port ระหว่าง container เพื่อใช้สื่อสารกัน เช่น container ของ nginx จะใช้ port 80 เป็น default หากต้องการให้ใช้ port 8080 เราก็กำหนดให้เป็น -p 8080:80
  • -v คือการ mount volume เพื่อให้สามารถเรียกใช้ไฟล์ร่วมกันได้ ระหว่าง container กับเครื่องเรา อย่างเช่น /myweb:/var/www/html (ซ้ายคือ path ในเครื่องของเรา และด้านขวาคือ path ใน container)
  • –network ระบุ network ที่ใช้ ถ้าไม่ระบุจะเป็น bridge
docker run [options] <image_name>:<tag> // tag ถ้าไม่ระบุระบบจะเลือกเวอร์ชั่นล่าสุดมาให้
// ตัวอย่าง
docker run --name myweb -p 8080:80 -v /myweb:/var/www/html -d nginx:latest

แสดงรายการ image ที่มีอยู่ในเครื่องเรา

docker images

ลบ image แบบระบุชื่อ image

docker rmi -f <image_name>

ลบ image ทั้งหมด

docker rmi -f $(docker images -a -q)

แสดงรายการ container

docker ps // แสดง container ที่ทำงานอยู่
docker ps -a // แสดงรายการ container ทั้งหมด ทั้งทำงานอยู่และหยุดทำงานไปแล้ว

ลบ container แบบระบุชื่อ container

docker rm -f <container_name>

ลบ container ทั้งหมด

docker rm $(docker ps -a -q)

ลบ container ทั้งหมดที่ไม่ทำงาน

docker rm $( docker ps -q -f status=exited)

หยุดการทำงาน container ทั้งหมด

docker stop $(docker ps -a -q)

เพื่อ Access เข้าไปใน container

docker exec -it <container_name> <command> // <command> คือคำสั่งที่ต้องการเข้าใช้ เช่น bash จะได้ในลักษณะนี้ 
docker exec -it <container_name> bash

ดู container ว่ามีการใช้ resource แค่ใหน เช่น CPU, Memory

docker stats // ทั้งหมด
docker stats <container_name> // ระบุชื่อ container ถ้าดูแบบหลายตัวให้เว้นวรรคชื่อ container

ดูรายละเอียด container

docker inspect <container_name>

ดู IP ของ container ทั้งหมด

ถ้าต้องการระบุชื่อ container ให้เว้นวรรคท้ายสุดคำสั่งแล้วตามด้วยชื่อ container ที่ต้องการ

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

แสดงรายการ network

docker network ls

สร้าง network

docker network create <network_name> // default เป็น bridge

ดูรายละเอียด network

docker network inspect <network_name or container_id>

ดู Log ของ container

docker logs <container_name or container_id>

คำสั่ง Docker Compose


ใช้ build /re-build container

docker-compose build // ทั้งหมด
docker-compose build <container_name> // ระบุชื่อ container
docker-compose -f <yml_name> build // ระบุไฟล์ YML

สั่งให้ container ทำงาน

docker-compose up
docker-compose up -d // -d คือการกำหนดว่าให้ทำงานแบบ background process
docker-compose up --build // สั่ง build และรันการทำงานพร้อมกัน
docker-compose up --force-recreate --build // กรณีเปลี่ยนค่า config ให้ rebuild ใหม่
docker-compose -f <yml_name> up // ระบุไฟล์ YML

หยุดการทำงาน container

docker-compose stop // ทั้งหมด
docker-compose stop <container_name> // ระบุชื่อ container
docker-compose -f <yml_name> stop // ระบุไฟล์ YML

สั่งให้กลับมาทำงานใหม่กรณีสั่งหยุดด้วยคำสั่ง stop ก่อนหน้านั้น

 docker-compose start // ทั้งหมด
 docker-compose start <container_name> // ระบุชื่อ container
 docker-compose -f <yml_name> start // ระบุไฟล์ YML

สั่ง restart เพื่อให้ container ทำงานใหม่

docker-compose restart // ทั้งหมด
docker-compose restart <container_name> // ระบุชื่อ container
docker-compose -f <yml_name> restart // ระบุไฟล์ YML

หยุดการทำงานรวมถึงลบ containers

docker-compose down
docker-compose -f <yml_name> down // ระบุไฟล์ YML