หลังจากใช้ Docker มาได้สักระยะ เลยคิดว่าทำบล็อกขึ้นมาเหมือนกับที่เคยเขียนบล็อก การใช้คำสั่ง Git เลยดีกว่า เพราะบางคำสั่งดูแล้วถ้าไม่ได้ใช้นานๆเข้าอาจจะลืม
ซึ่งจะไม่เกริ่นว่า Docker คืออะไร มีประโยชน์อะไร อันนี้คิดว่าใครมาเจอบล็อกนี้น่าจะมีความรู้พื้นฐานเรื่อง Docker บ้างแล้ว โดยคำสั่งอาจจะมีไม่ครบถ้วน และอาจจะไม่ครอบคลุม เพราะตัวผมเองใช้ Docker เพียงเพื่อใช้พัฒนางานบนเครื่องตัวเองเท่านั้น
คำสั่ง 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>
# ตัวอย่าง
docker run --name myweb -p 8080:80 -v /myweb:/var/www/html -d nginx:latest
แสดงรายการ image ที่มีอยู่ในเครื่องเรา
docker images
ลบ image
docker rmi -f <image_name> # แบบระบุชื่อ image
docker rmi -f $(docker images -a -q) # ลบ image ทั้งหมด
แสดงรายการ container
docker ps # แสดง container ที่ทำงานอยู่
docker ps -a # แสดงรายการ container ทั้งหมด ทั้งทำงานอยู่และหยุดทำงานไปแล้ว
ลบ container
docker rm -f <container_name> # แบบระบุชื่อ container
docker rm $(docker ps -a -q) # ลบ container ทั้งหมด
docker rm $(docker ps -q -f status=exited) # ลบ container ทั้งหมดที่ไม่ทำงาน
หยุดการทำงาน 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
docker inspect <container_name>
ดู IP ของ 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
ยังขาดคำสั่งอื่นๆอีกมากมาย ซึ่งตัวผมเองไม่ค่อยได้ใช้ แต่ถ้ามีคำสั่งใดๆ มาเพิ่มเติมจะมาอัพเดทที่บล็อกนี้อีกครั้งครับ