หลังจากใช้ 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

ยังขาดคำสั่งอื่นๆอีกมากมาย ซึ่งตัวผมเองไม่ค่อยได้ไช้ แต่ถ้ามีคำสั่งใดๆ มาเพิ่มเติมจะมาอัพเดทที่บล็อกนี้หลังอีกครั้งครับ