การสร้าง images บน docker ทำยังไง แล้ว push , pull images ยังไงจาก repo ที่สร้าง
การสร้าง images บน docker ทำยังไง จากลิ้งนี้ อธิบายไว้อย่างชัดเจนทีเดียวครับ
https://docs.docker.com/engine/tutorials/dockerimages/
ผมขออธิบายเพิ่มเติมเป็นภาษาไทยในการ build วิธีที่สอง แล้วกันนะครับ
วิธีการสร้างนั้นทำได้ด้วยกัน สองแบบ คือ
1. สามารถ pull images ที่มีคนสร้างไว้อยู่แล้ว มา แล้วก็ทำการ tag เป็นชื่อ repo ของที่เราสร้างขึ้น เพื่อไว้ใช้งานในระบบของเราเอง เช่นถ้าใช้งานจาก repo ของ sinatra เขาจะสร้างเป็น images ubuntu ไว้อยู่ละ ถ้าจะนำมาใช้งานก็
$docker run -t -i training/sinatra /bin/bash
รอสักครู่ มันจะทำการ download images มาเพื่อเข้าไป ubuntu images
หลังจากนั้นถ้าโหลดเสร็จก็จะขึ้น shell prompt ครับ
ผมจะลองทำการติดตั้ง apache 2.0 ละกัน กับ ruby2.0-dev
root@442616b0e5a8:/# apt-get install -y ruby2.0-dev apache2.0
แล้วทำการเพิ่ม json ลงไป
root@442616b0e5a8:/# gem2.0 install json
ถ้าเสร็จแล้วก็ออกมาจาก ubuntu images โดยการ exit
หลังจากนั้นทำการ commit เป็น images ไว้ใช้งานใน repo ของเราเอง
$ docker commit -m “Added json gem” -a “Test Packetlove” \
442616b0e5a8 yourrepo/sinatra:v2
4f177bd27a9ff0f6dc2a830403925b5360bfe0b93d476f7fc3231110e7f71b1c
2. คือการเขียนไฟล์ Dockerfile เพื่อ build เอง แต่ก็อาศัย images ต้นแบบอยู่ดี ส่วน syntax ในไฟล์ Dockerfile จะใส่เป็นตัวใหญ่เสมอถ้าเป็นคำสั่ง ใน docker เช่น FROM,MAINTAINER,RUN
ก่อนอื่นต้องการสร้าง folder เพื่อลิ้ง images ต้นแบบมาก่อน
เช่น
$ mkdir sinatra
$ cd sinatra
$ vi Dockerfile
# This is a comment
FROM ubuntu:14.04
MAINTAINER Test Packetlove <packetlove@example.com>
RUN apt-get update && apt-get install -y ruby ruby-dev
RUN gem install sinatra
เสร็จแล้วทำการ build ครับ ต้องใส่ . ด้วยนะครับ
$docker build -t packetlove/testdev:version2 .
Removing intermediate container 6b81cb6313e5
Successfully built 97feabe5d2ed
หลังจากเสร็จแล้วก็มี output ออกมามาลักษณะคล้ายๆ สองบันทัดบนครับผม
ถ้าในกรณีเราต้องการทำ images แยกเป็นอีก version ก็สามารถทำการ tag
ทำการเชค tag_id จาก $docker images
$docker images packetlove/testdev
หลังจากนั้นทำการ tag ตัว images ที่เราสร้างเป็นอีก version ไว้ ให้ตามกับหมายเลขที่ tag_id แสดงขึ้นมาจากคำสั่งด้านบนครับ
$docker tag tag_id packetlove/testdev:version3
เท่านี้ก็จะได้ version3 มาละครับ
หลังจากนั้นทำการ push images ตัวนี้ขึ้นไปยัง repo ของเรา ใน https://hub.docker.com
ตอนที่ push ขึ้นไปเสร็จแล้ว สังเกตได้ว่าจะมีเลข digest ขึ้นมาให้เลยนะครับ
ซึ่งเราสามารถ ใช้เลขตัวนี้ อ้างอิงตอนดึง images มาใช้งานจากคำสั่ง pull ได้ครับ
ถ้าในกรณีใช้ PC หรือ เครื่องอื่นเข้า เราก็ดึง pull images มาได้ดังนี้
$ docker pull packetlove/testdev@sha256:cbbf2f9a99b47fc460d422812b6a5adff7dfee951d8fa2e4a98caa0382cfbdbf
ถ้าจะทำการลบ images ก็ใช้คำสั่ง
rmi ตามด้วยเลขimage_idที่ต้องการลบ หรือชื่อ repo ได้เลยครับ
เช่น ชื่อ repo ผมเป็น packetlove/testdev
$docker rmi packetlove/testdev
ลองเล่นกันดูนะครับ : )