คำสั่ง Docker เบื้องต้น
หลังจากใช้ Docker ใช้งานมาได้สักระยะ เลยคิดว่าทำบล็อกขึ้นมาเหมือนกับที่เคยเขียนบล็อก การใช้คำสั่ง Git เลยดีกว่า เพราะบางคำสั่งดูแล้วถ้าไม่ได้ใช้นานๆเข้าอาจจะลืม ไว้ทั้งสำหรับตัวเองกลับมาดูและสำหรับคนอื่นทั่วไปด้วยเลยแล้วกัน
ซึ่งจะไม่เกริ่นว่า Docker คืออะไร มีประโยชน์อะไร อันนี้คิดว่าใครมาเจอบล็อกนี้น่าจะมีความรู้พื้นฐานเรื่อง Docker บ้างแล้ว โดยคำสั่งอาจจะมีไม่ครบถ้วน และอาจจะไม่ครอบคลุม เพราะตัวผมเองใช้ Docker เพียงเพื่อใช้พัฒนางานบนเครื่องตัวเองเท่านั้น ยังไม่เคยใช้บน Production ดังนั้นจึงเน้นคำสั่งพื้นฐานที่ตัวผมเองเคยใช้มาก่อนเป็นหลัก โดยมีดังนี้
คำสั่ง Docker
แสดงเวอร์ชั่น
docker -v
โหลด Docker image จาก Server มาไว้ในเครื่องเรา (ดู image เพิ่มเติม https://hub.docker.com/)
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)
เพื่อ SSH เข้าไปใน 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>
คำสั่ง DOCKER COMPOSE
Docker Compose คือ tool ของ docker ที่ช่วยจัดการ container หลายตัวให้ง่ายขึ้น ลองนึกภาพถ้าเรามี container สิบตัวเราจะต้องสั่งทีละตัวๆ ซึ่งค่อนข้างเสียเวลา และทำให้เกิดข้อผิดพลาดได้ แต่ Docker Compose จะให้เราสร้างไฟล์ docker-compose.yml เพื่อควบคุมและการกำหนดค่าต่างๆ ของ container ทั้งหมด ซึ่งสามารถสั่งรันได้โดยไม่กี่คำสั่งเท่านั้น
ใช้ build /re-build container
docker-compose build // ทั้งหมด
docker-compose build <container_name> // ระบุชื่อ container
สั่งให้ container ทำงาน
docker-compose up
docker-compose up -d // d= option ที่ใช้กำหนดว่า ให้รันแบบ background process
docker-compose up --build // สั่ง build และรันการทำงานพร้อมกัน
docker-compose up --force-recreate --build // กรณีเปลี่ยนค่า config ให้ rebuild ใหม่
หยุดการทำงาน container
docker-compose stop // ทั้งหมด
docker-compose stop <container_name> // ระบุชื่อ container
สั่งให้กลับมาทำงานใหม่กรณีสั่งหยุดด้วยคำสั่ง stop ไปก่อนหน้านั้น
docker-compose start // ทั้งหมด
docker-compose start <container_name> // ระบุชื่อ container
สั่ง restart เพื่อให้ container ทำงานใหม่
docker-compose restart // ทั้งหมด
docker-compose restart <container_name> // ระบุชื่อ container
หยุดการทำงานรวมถึงลบ containers, networks, volumes, และ images ที่ถูกสร้างโดยคำสั่ง up ทั้งหมด
docker-compose down
ยังขาดคำสั่งอื่นๆอีกมากมาย ซึ่งตัวผมเองไม่ค่อยได้ไช้ แต่ถ้ามีคำสั่งใดๆ มาเพิ่มเติมจะมาอัพเดทที่บล็อกนี้หลังอีกครั้งครับ