แชร์ Docker Image ที่สร้างไว้

🤔 Environment ที่เราสร้างไว้จะเอาให้คนอื่นเอาไปใช้ยังไงนะ ?

😢 ปัญหา

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

😄 วิธีแก้ปัญหา

เราสามารถสร้าง environment ที่เราอยากได้ทิ้งเอาไว้ในสิ่งที่เรียกว่า Docker Image ได้ แล้วเมื่อไหร่ที่เพื่อนในทีมหรือตัวเราอยากเอาไปใช้เพื่อให้เครื่องคอมแต่ละคนมี environment เดียวกัน ก็แค่เอา Docker Image ไปใช้ต่อได้นั่นโดยไม่ต้องเสียเวลาติดตั้งโปรแกรมอะไรลงเครื่องเลย

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

🤔 จะแชร์ Image ที่สร้างไว้ยังไง ?

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

🔥 Docker registries

(สำหรับคนที่ไม่รู้จัก Git อาจจะอ่านตรงนี้แล้ว งงๆ ก็ให้เข้าใจแค่มันมีเซิฟเวอร์กลางเอาไว้เก็บ Image ของทุกๆคนบนโลกไว้ก็พอ) ถ้าจะให้พูดให้ถูกคือ docker registries จะเป็นมราเก็บ collection ของ repositories ของ user แต่ละคนไว้ และแต่ละ repository จะเก็บ collection ของ Image ไว้อีกทีนึง ซึ่งเจ้า repository ก็จะเหมือนกับของ GitHub ที่มี version ต่างๆของ Image ที่เรา push ขึ้นมานั่นเอง

โดยปรกติมัน Image ของเราจะถูกเปิดเป็น Public ให้ทุกคนบนโลกสามารถนำ Image เราไปใช้ต่อได้ แต่ถ้าต้องการปิดให้ใช้เฉพาะตัวเองหรือองค์กรเราต้อง push image เราไปที่ Trusted Registry แทน

🔥 Login

อะเคร๊! ก่อนที่เราจะส่ง Image ของเราไปที่ตัว Docker registries เราก็ต้องทำการ Login กันก่อนด้วยคำสั่งด้านล่างนี้เบย

docker login

หากยังไม่มี account ให้ไปสมัครได้จากลิงค์นี้ https://hub.docker.com ฟรีจ้า

ก่อนที่จะไปต่อผมขออธิบายตรงนี้ไว้นิสนึงว่า Docker registries มันจะมีรูปแบบในการเข้าถึง Image ของแต่ละคนเป็นรูปแบบนี้ username/repository:tag ซึ่งตัว Tag จริงๆจะใส่หรือไม่ใส่ก็ได้ แต่ทาง Docker แนะนำว่าให้ใส่ไว้จะดีกว่า เพราะมันเหมือนกับเป็นตัวบอกเวอร์ชั่นของ image ของเรานั่นเอง

🔥 Tag

คราวนี้เราจะลองติด tag ให้กับ image ของเรากันบ้าง ซึ่ง docker จะใช้ลักษณะคำสั่งแบบด้านล่างนี้ (ไม่ได้ให้พิมพ์ตามนะ วางถุงกาวลงก่อน)

docker tag image username/repository:tag

เช่นผมมี image ที่สร้างไว้จากบทก่อนหน้าที่ชื่อว่า python-img ส่วนชื่อผู้ใช้ของผมคือ sakul แล้วก็ผมอยากจะเอา image ของผมไปแชร์โดยใช้ชื่อว่า demo-python ซึ่งผมคิดว่า environment ที่ตั้งไว้มันมีแต่ตัวพื้นฐานดังนั้นผมจะติด tag เป็น simple ละกัน ดังนั้นผมจะใช้คำสั่งในการติด tag image นี้ตัวตามคำสั่งด้านล่าง (คราวนี้จะพิมพ์ตามก็ตามสะดวกเลย)

docker tag python-img sakul/demo-python:simple

หลังจากที่ใช้คำสั่งด้านบนไปละ เราลองดู image ทั้งหมดในเครื่องของเราดูบ้างด้วยคำสั่งนี้

docker images

เราก็จะเห็น image ตัวใหม่ที่มีการติด tag ตามที่เรากำหนดไว้โผล่มา

REPOSITORY TAG IMAGE ID
python-img latest dc76a5395170
sakul/demo-python simple dc76a5395170
python 2.7-slim eb40dcfcbc42

🤔 ส่ง image ขึ้นเซิฟเวอร์ทำไง ?

คราวนี้เราก็จะส่ง image ของเราขึ้นไปที่บนเซิฟเวอร์กันละ ด้วยโดยใช้คำสั่งรูปแบบด้านล่าง (อย่าพิมพ์ตามตรงๆนะ ไปแก้ชื่อเป็นของตัวเองด้วย - บอกแล้วไงวางถุงกาวลงก๊อนนนน!!)

docker push username/repository:tag

ซึ่งในกรณีของผม ก็จะใช้เป็นคำสั่งนี้

docker push sakul/demo-python:simple

🤔 เอา image ที่อยู่บนเซิฟเวอร์มาใช้ยังไง ?

หลังจากที่มันอัพโหลดทุกอย่างไปเสร็จละ ใครอยากจะใช้ image ของเราก็สามารถเอามาลงเครื่องเขาได้เลยด้วยคำสั่งด้านล่าง (ไปแก้ชื่อเป็นของตัวเองด้วย!!)

docker pull username/repository:tag

ซึ่งในกรณีของผม ก็จะใช้เป็นคำสั่งนี้

docker pull sakul/demo-python:simple

เพียงแค่นี้เราก็จะได้ image ที่เคย publish ไว้กลับมาลงที่เครื่องได้แบ๊ว ดังนั้นผมก็จะลองเอา image ที่ได้ไปลองสร้าง container เล่นต่อด้วยคำสั่งนี้ (แก้ชื่อเองด้วย)

docker run -p 4000:80 sakul/demo-python:simple

เห็นมะการแชร์ image นั้นง่ายม๊วก