Upload
others
View
4
Download
0
Embed Size (px)
Citation preview
เปลี่ยนผานจาก Application สู
Docker containerInternet Innovation Lab
NECTEC , Thailand Science Parkhttp://bit.ly/WUNCA36
วิธีลงโปรแกรมบนคอมพิวเตอร
Setup.exe , Setup.dmg
วิธีลงโปรแกรมบนคอนเทนเนอร
docker run “name image”
Docker Image มาจากที่ไหน https://hub.docker.com/explore/
วันนี้มีอะไร ---> มาสราง Docker image กันเถอะ
พื้นฐานตองรู● มีพื้นฐานเกี่ยวกับ shell ( ใชคําสั่ง command line)
● มีความรูพื้นฐานเกี่ยวกับ docker
● มีประสบการณ การใช docker run
● ใช image จาก https://hub.docker.com/
● เคยพัฒนา หรือติดตั้ง software บน server
● เคยใช docker build, Dockerfile
ทบทวน docker กอนเริ่มใชงาน
http://www.siamhtml.com/getting-started-with-docker/
ทบทวน docker กอนเริ่มใชงาน
เริ่มตนที่ Developer● เริ่มตนที่…...Developer
○ สนับสนุนให Developer ใช Docker ○ App จะ run ไดอยางยั่งยืน Code ตองมีสวนเอื้อ
● ผลพลอยได….ชวยทั้ง ○ Dev พัฒนางาย อยูใน container dependencies ไมตีกัน สราง environment ของแตละ app ได ○ Ops ไดรับการสงมอบ docker image จาก dev deploy ขึ้นไดทันที ไมตองมี ติดตั้ง จุกจิก
● แกไขใหม...Migrate App เกาๆ
https://en.wikipedia.org/wiki/DevOps
การไดมาของ Docker image (..ที่ดี..)
● การใช Docker Image ที่มีอยูแลว● Build จาก Dockerfile● จัดการ Dependencies อยางเหมาะสม ของแตละ Applications● สามารถ Config ขณะ Runtime ได● แยก Application แลวผูกเขาดวยกันดวย link● เก็บขอมูลไวใน Persistent volume ภายนอก● จัดการ Log/Monitoring อยางเหมาะสม
การใช Docker image ที่มีอยูแลว● มองหา software ใน https://hub.docker.com/● ดูจาก official + vendor + pull + last push + git● นํามาใชเลย แบบ config ขณะ run● นํามาเปน base ใน Dockerfile
Build จาก Dockerfile● แนะนํามากกวา docker commit● องคความรู อยูในรูปแบบของ text เปนเอกสารไดในตัว● ทําซํ้า และปรับแตงได● ใช version control ได● ใชงาน automate build
จัดการ Dependencies อยางไร● แยก lib ออกจาก code● ภาษาสมัยใหมมักจะมีตัวจัดการ Dependencies
○ เชน PHP:Composer, Java:Maven, Python:pip, JS:npm○ รายการของ dependencies จะอยูในรูปแบบของไฟล○ สะดวกใชเวลา build
Code
Base Environment
(PHP, Python, JAVA)
Copy Build
Application Image
Library Repository
Config at runtime● ควรแยก Config ออกจาก code เชน DB Access Credential ● ผาน Environment Variable [docker run -e XXX=xxx]● ผาน config file [docker run -v /myconfig:/etc/app/conf]● Customized at runtime
Application Image
Default config Running Instance
Run
Runtime config
Linked Container หลายอันเขาดวยกัน● แยกการทํางาน ระหวาง application กับ backend service เชื่อมกันผาน --link● หลักการ “หนึ่งอัน ทําหนึ่งอยาง-Do one thing at a time”● หากตองการ scale สามารถ scale ไดเฉพาะบาง container
Application
MySQL
Application
แยกขอมูลไวโดย Persistent volume● ผานการใช -v <host path>:<container path>● ควรแยก User data ออกจาก application
○ ลบ container แลว data ยังอยู○ สะดวกในการยาย Application○ เหมาะกับทํางานบน cluster (Kubernetes, Docker)
จัดการ Log/monitoring อยางเหมาะสม● Log สําคัญมาก เพราะ เราไมสามารถ ssh เขาไปเพื่อตรวจสอบได ตองอาศัยขอมูลจาก
Log● Log ผาน STDOUT แทนที่ Log file● ชวยใหจัดการเรื่อง Log ไดงายขึ้น ดูผาน docker logs หรือ ใช log shipper ไดงาย
ลดการจัดการไฟล Log ทํา centralize log ได● มี health check สําหรับ process ที่ทํางานเคียงขางกัน ทําใหเรานํา monitoring tools
ไป check การทํางานได
ตัวอยางการสราง Image
ศึกษา Image อยางเขาใจ
Dockerfile quick reference Keyword Description
FROM Base image สําหรับเริ่มตน
MAINTAINER ขอมูลผูเขียน Dockerfile
RUN รัน command ใน container แลวบันทึกลงใน image
CMD Command ที่จะทํางานเมื่อเริ่ม container
EXPOSE ขอมูลเกี่ยวกับการ bind port
ENV ตั้งคา environment variable
ADD Copy file, folder, URL ไปยัง image
COPY Copy file, folder ไปยัง image
Keyword Description
ENTRYPOINT Command ที่จะทํางานเมื่อเริ่ม container ทํางานกอน CMD
VOLUME ขอมูลเกี่ยวกับโฟลเดอรที่สามารถ จัดเก็บภายนอกได
USER เปลี่ยน user ที่ทํางาน
WORKDIR เปลี่ยน folder ที่ทํางาน
ARG ตัวแปรที่อนุญาตใหสงผาน --build-arg ขณะ build image
เรียนรูจากมืออาชีพ Wordpresshttps://github.com/docker-library/wordpress/blob/43d32697c6862dcb48ca520e87e1e0fb585aee03/php5.6/apache/Dockerfile
การใช base image จาก image ที่ใกลเคียง
การใช RUN แบบหลายๆ command ชวยเรื่อง image layers
การแกไขไฟลโดยใช echo
Enable apache module
เตรียม Volume สําหรับ mount จากภายนอก
ใช shell script ชวยเชนเรื่อง permission และการ set คาจาก ENV
บางโปรแกรมตองใชคําสั่งเฉพาะเพื่อ run เปน foreground
คุณก็สราง docker image ของคุณได
Q&A