เปลี่ยนผ านจาก Application สู NECTEC , Thailand Science ... ·...

Preview:

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

Recommended