Step 1 - Running A Container
ค้นหา image ของ application ที่เราต้องการด้วยรูปแบบดังนี้
docker search <name>
<name> = ชื่อที่คุณต้องการค้นหาบน docker hub
เช่น
docker search redis
> Enter
For example, to find an image for Redis
เมื่อต้องการ redis(ซึ่งเป็นฐานข้อมูล) ทำงาน ให้เราอยู่เบื้องหลัง เรียกการใช้งานในรูปแบบการใช้งานของ docker คือ
docker run <option> <image-name> โดยคำสั่งเริ่มต้นของ Docker เพื่อให้ image ทำงานเบื้องหลังต้องระบุตัวเลือก -d
docker run -d redis
การเรียกแบบนี้ docker จะนำ redis เวอร์ชั่นล่าสุดมาใช้งาน ถ้าเราจำเป็นต้องเลือก เวอร์ชั่นเฉพาะ ต้องเรียกโดยระบุเช่น
docker run -d redis:3.2
เป็นต้น
มาถึงตอนนี้เราได้ download image application ที่ชื่อ redis ไว้ที่ Docker Host ของเราเรียบร้อยแล้ว
Step 2 - Finding Running Containers ค้นหา Containers ที่กำลังทำงานอยู่
เราใช้คำสั่งในรูปแบบนี้
docker ps
เมื่อเรา Enter จะพบว่า docker command จะแสดง Containers ที่กำลังทำงานอยู่ เห็น image ทั้งหมด
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
3855b28d10fa redis "docker-entrypoint..." 12 minutes ago Up 12 minutes 6379/tcp zen_bose
คำสั่งนี้จะแสดงชื่อ และ id ของ containers ที่ทำงานอยู่
เช่นคำสั่ง docker inspect <friendly-name|container-id> จะให้รายละเอียดต่างๆของ container หรือ ip ที่ใช้ทำงานอยู่เป็นต้น
ตัวอย่างคำสั่ง
docker inspect zen_bose
คุณจะได้ output รายละเอียด container ต่างๆออกมา
คำสั่ง docker logs <friendly-name|container-id> จะแสดงข้อความที่เก็บ log เขียนลงในข้อผิดพลาดมาตรฐาน หรือแสดงข้อผิดพลาดออกมา
Step 3 - Accessing Redis การเข้าถึง container Redis
เมื่อเราทราบแล้วเช่นว่า Redis ทำงานบน Porsts 6379 แต่เราจะเข้าถึงได้อย่างไรมาดูกัน
จริงแล้วเราใช้ option -p เพื่อเชื่อต่อการเข้าถึงได้
-p <host-port>:<container-port>
ตัวอย่างการใช้จริง
docker run -d --name redisHostPort -p 6379:6379 redis:latest
Protip
ในค่าเริ่มต้นนั้น port ของ host จะถูก map เข้ากับ 0.0.0.0 ซึ่งหมายถึงที่อยู่ ip ทั้งหมดที่ host มีอยู่ คุณสามารถระบุ ip เฉพาะได้โดยรูปเช่น -p 127.0.0.1:6379:6379 เป็นต้น
Step 4 - Accessing Redis(ต่อ)
ปัญหาเกี่ยวกับการรันกระบวนการ fix port คือคุณสามารถรันได้เพียงหนึ่งอินสแตนซ์เท่านั้น ถ้าจะะใช้งาน Redis หลายอินสแตนซ์และกำหนดค่าแอพพลิเคชันขึ้นอยู่กับพอร์ต Redis ที่กำลังรันอยู่
แต่เราสามารถทำให้สุ่ม port การทำงานได้โดยรูปแบบ -p 6379 โดยไม่ต้อง map กับ containers ก็ได้ตัวอย่างเช่น
docker run -d --name redisDynamic -p 6379 redis:latest
ดูว่าทำงานบนport ไหนใช้คำสั่ง
docker port redisDynamic 6379
output
0.0.0.0:32768
docker ps
output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
927e584d6a65 redis:latest "docker-entrypoint..." 19 seconds ago Up 17 seconds 0.0.0.0:32768->6379/tcp redisDynamic
7d61c991b19e redis:latest "docker-entrypoint..." 9 minutes ago Up 9 minutes 0.0.0.0:6379->6379/tcp redisHostPort
3855b28d10fa redis "docker-entrypoint..." 39 minutes ago Up 38 minutes 6379/tcp zen_bose
เปรียบเทียบดูเส้นทางการ map port แบบต่างๆ
Step 5 - Persisting Data ข้อมูลที่มีอยู่
หลังจากทำงานกับ Containers การลบและสร้างคอนเทนเนอร์ใหม่ และเมื่อต้องการใช้ซ้ำคอนเทนเนอร์เราอาจจะกังวลเกี่ยวกับข้อมูลของเรา
Containers ถูกออกแบบมาให้เป็นแบบ stateless จะใช้ตัวเลือก -v <host-dir>:<container-dir> ที่ ทำการ map host ของเรา กับ host ของ container ข้อมูลที่เรากระทำการใดๆบน Container host จะถูกเก็บไว้ใน diretory เครื่องเรา
เมื่อเราทำการupgrad หรือกระทำการใดๆบน docker host ก็จะไม่ไปทำลายข้อมูลที่มีอยู่
ทั้งนี้เราต้องศึกษาเอกสารเกี่ยวกับการเก็บข้อมูลของ application ต่างๆ ในตัวอย่างของเรานั้นพบว่า redis ข้อมูลต่างๆต้องเก็บไว้ยัง /opt/docker/data/redis
เราจึงต้องเรียกใช้แบบนี้
docker run -d --name redisMapped -v /opt/docker/data/redis:/data redis
Step 6 - Running A Container In The Foreground
ก่อนหน้านี้เราใช้ option -d ในการทำงาน docker แบบ background แต่ถ้าเราต้องการ interact กับ container(ตัวอย่างเช่นการ เข้าถึง bash shell)ใช้ option -it
เช่นเดียวกับการกำหนดว่าคอนเทนเนอร์ที่ทำงานในพื้นหลังหรือเบื้องหน้า บางอย่างช่วยให้คุณสามารถแทนที่คำสั่งที่ใช้ในการเปิด image ความสามารถในการแทนที่คำสั่งเริ่มต้นทำให้สามารถมี image
เดียวที่สามารถนำมาใช้ใหม่ได้หลายวิธี ตัวอย่างเช่น image Ubuntu สามารถเรียกใช้คำสั่ง OS หรือรันทับ bash โต้ตอบโดยใช้ / bin / bash
Example
docker run ubuntu ps จะเปิดคอนเทนเนอร์ของอูบุนตูและรันคำสั่ง ps เพื่อดูกระบวนการทั้งหมดที่ทำงานในคอนเทนเนอร์
docker run -it ubuntu bash จะช่วยให้เราเห็นเปลือกของ container ได้ (คำสั่งนี้จะทำให้เราเหมือนทำงานอยู่บน terminal ของ ubuntu)