Article

9 ตุลาคม 2564


การใช้งาน Docker


docker

 

Docker ประกอบด้วย 2 ส่วนหลักๆคือ

  1. Images คือ blueprint หรือ template ที่เก็บ Code หรือ Application ที่ต้องการรันไว้ สามารถ share package กันได้
  2. Containers ที่เก็บซอฟแวร์ที่จะใช้รันโค้ดใน Image อาจมีได้หลาย Container รัน image เดียวกัน

การสร้าง image ของ Docker จะต้องทำการ pull หรือดึงมาจาก Docker Hub แล้วนำมาแก้ไขเท่านั้น ไม่สามารถสร้างไฟล์ image ขึ้นเองโดยไม่ใช้ image จาก Docker Hub  มาเป็น template ได้ ซึ่งใน Docker Hub มีระบบให้ดาวน์โหลดเกือบครบทุกอย่าง

 

การติดตั้ง Docker

ดูได้จากเว็บไซต์  https://docs.docker.com/get-docker/

 

สำหรับ Window เมื่อติดตั้งเสร็จแล้วตรวจสอบ Version โดยใช้ Power Shell คำสั่ง

docker --version

 

การดูคำสั่งจาก help

docker run –help

 

การตรวจสอบ Container

docker ps  ดู Container ที่กำลัง run

docker ps –a  ดู Container ทั้งหมด

 

การหยุด Container

docker stop <ชื่อ container>

 

 

 

การเข้าไปแก้ไขไฟล์ลภายใน Container โดยใช้ Shell

docker exec –it <ชื่อ Container> sh

การออกจาก shell ของ Container ใช้คำสั่ง exit

 

การดูว่ามี image อะไรบ้าง

docker images

 

การดูข้อมูลจาก image

docker image inspect <ชื่อ image>

 

การลบ image

docker image rm <ชื่อ image>

 

การดู log

docker log <docker id>

docker log –f <docker id>  คือให้ follow สามารถดู log ได้แบบ Real time

 

การสร้าง image จาก Project

ติดตั้ง docker extension ใน Visual Studio Code

สร้างไฟล์ชื่อ Dockerfile ใน Project จากนั้นวางคำสั่ง Docker ที่ต้องการ execute ตอนที่ build image ใน Dockerfile แล้วรันคำสั่ง docker build . ใน terminal โดย . หมายถึงหรือ Dockerfile ที่อยู่ในโฟลเดอร์เดียวกัน

 

คำสั่งใน Dockerfile

FROM <ใช้ชื่อ image เดียวกับที่มีในเครื่องหรือที่โหลดมาจาก Docker Hub>

WORKDIR /app  คือให้คำสั่ง RUN ด้านล่างรันในโฟลเดอร์นี้

บอก Docker ว่าไฟล์อะไรบ้างที่จะใช้สร้าง image โดยใช้คำสั่ง

COPY . .  คือ copy ทั้ง 2 path โดย . แรกคือในโฟลเดอร์เดียวกันกับ Dockerfile และ . ที่ 2 คือโฟลเดอร์ปลายทางใน image หรือสามารถ copy แค่ sub folder ก็ได้ เช่น  COPY . /app คือ copy โฟลเดอร์ทั้งหมดไปยัง /app ถ้าไม่มีมันจะสร้างให้อัตโนมัติ หรือใช้ COPY . / หมายถึง copy ไปยัง directory ที่กำลังทำงานอยู่ใน WORKDIR ซึ่งก็คือ /app

รันคำสั่งที่ต้องการให้ทำงานใน Container เช่น

RUN npm install 

จากนั้นเมื่อ setup ทุกอย่างเรียบร้อยแล้วทำการ start server โดยใช้คำสั่ง

RUN <ชื่อ image> <ไฟล์ที่ต้องการรัน>

EXPOSE 80 คือประกาศว่าจะใช้ port 80

ถ้าต้องการรัน image เดียวกันในหลายๆ Container

CMD [ชื่อ image, ไฟล์ที่ต้องการรัน] คือให้รับเมื่อ Container เริ่มทำงาน

 

ตัวอย่างการสร้าง Dockerfile สำหรับรัน Python

FROM python

WORKDIR /app

COPY . /app

CMD [“python”, “ชื่อไฟล์โปรแกรม.py”]

เมื่อสร้าง Dockerfile เรียบร้อยแล้วให้ทำการ build image ด้วยคำสั่ง docker build .

 

การรัน Docker

สามารถรันด้วย id เช่น docker run <รหัส id container>

คำสั่ง docker run ประกอบไปด้วย 3 คำสั่งคือ

docker pull <ชื่อ image>

docker create <ชื่อ Container>

docker start <ชื่อ Container>

 

การรันโดยมีการประกาศ port

docker run –p <Publish พอร์ต>:<เลขพอร์ตที่เชื่อมต่อจริงใน Containner>  <รหัส id container>

 

การรันโดยมีการตั้งชื่อ

docker run –name <ชื่อที่ต้องการ>

 

การรันแบบแบ็คกราวด์หรือ detach

docker run –d <ชื่อ image>

 

การตั้งค่า environment variable

docker run -e MYSQL _ROOT_PASSWORD=1111 ใช้ –e ตามด้วย variable ที่ต้องการกำหนดค่า

การใช้ Pre-build image

ค้นหา image จาก docker hub ตัวอย่างการรัน nginx ใช้คำสั่ง

docker run nginx ถ้าไม่มี image จะทำการโหลดจาก Docker Hub ให้โดยอัตโนมัติ

docker run –i -t nginx  หรือสามารถเขียนเป็น docker run –it nginx ก็ได้คือการรันแบบมีการ Interactive และ -t (pseudo-TTY) คือให้แสดงผลจากคำสั่งที่พิมพ์ไปด้วย

 

Network ใน Docker

Network ใน Docker ไม่ใช้การตั้งค่า ip address แต่ใช้สำหรับให้ Container แต่ละตัวสามารถสื่อสารกันได้

 

การสร้าง Network ใช้คำสั่ง

docker network create <ชื่อ Network>

 

การดู Network ที่อยู่ในเครื่อง

docker network ls

 

การเพิ่ม Container เข้าไปที่ Network

docker network connect <ชื่อ Network> <ชื่อ Container>

การรันพร้อมกับเพิ่มลงใน Network

docker run --name <ตั้งชื่อ Container> –network <ชื่อ Network>

 

การตรวจสอบ Network

docker network inspect <ชื่อ Network>

 

การเก็บข้อมูลใน Volume

การเก็บข้อมูลใน Volume มีข้อดีคือ backup ได้ง่าย

docker volume ls  ใช้ list volume

docker volume create <ตั้งชื่อ Volume>  ใช้สร้าง volume

docker volume rm <ชื่อ volume>  ใช้ลบ volume

 

การ mount path ไปยัง volume

docker run –name <ชื่อ Container> -v <ชื่อ volume ที่สร้าง>:<path ดูจากคำสั่ง inspect เช่น /var/www/html>

 

ตัวอย่างการใช้ Docker กับ Wordpress, MySQL และ phpMyadmin

  1. ทำการ pull ดังนี้ ถ้าต้องการกำหนดเวอร์ชั่นให้ใช้ docker pull ชื่อแอพ:เลขเวอร์ชั่น

docker pull wordpress

docker pull mysql

docker pull phpmyadmin/phpmyadmin

 

  1. สร้าง Network ชื่อ wordpress โดยใช้คำสั่ง

docker network create wordpress

 

  1. รัน image พร้อมกับตั้งชื่อและกำหนดค่าต่างๆให้กับ mysql และ phpmyadmin

docker run --name mysql -e MYSQL _ROOT_PASSWORD=1111 –d mysql

                docker run –name pma –p 8888:80 –e PMA_ARBITRARY=1 –d phpmyadmin/phpmyadmin

  1. เพิ่มลงใน Network

docker network connect wordpress mysql

docker network connect wordpress pma

เมื่อ login phpmyadmin ไปยัง MySQL ที่ช่อง Server ให้ใช้ชื่อ Container แทน

  1. กำหนดค่าให้ Wordpress พร้อมกับเพิ่มลง Network

docker run --name wordpress –p 888:80 --network wordpress -e WORDPRESS_DB_HOST=mysql -e WORDPRESS_DB_USER=root -e WORDPRESS_DB_PASSWORD=1111 -d wordpress

 

Docker Compose

                ใช้สำหรับรวบรวมไฟล์คำสั่งในการทำงานกับ Container ให้อยู่ในไฟล์ docker-compose.yml จะได้ไม่ได้พิมพ์คำสั่งที่ละบรรทัด การใช้งานให้สร้างไฟล์ docker-compose.yml ที่โฟลเดอร์ Project

ตัวอย่างการเขียนไฟล์ docker-compose.yml

version: ‘<เลขเวอร์ชั่นของ docker compose>’

services:  ใช้บอกว่าใน compose มี container อะไรบ้าง

db:

                image: mysql

                networks:   กำหนดได้มากกว่า 1 ตัว

                                - wordpress   มาจากคำสั่ง docker run --network wordpress

                volumes:

                                - db_data:/var/lib/mysql  มาจากคำสั่ง docker run –v db_data:/var/lib/mysql

restart: always    ให้รีสตาร์ททุกครั้งเมื่อเกิดปัญหาหรือ error

                environment:

                                MYSQL_ROOT_PASSWORD: 1111

                               

 

wordpress:

                depends_on:

                                - db  กำหนดให้ทำงานหลังจาก db ทำงานแล้ว

                image: wordpress

                networks:

                                - wordpress

                Ports:

                                - 888:80

restart: always    ให้รีสตาร์ททุกครั้งเมื่อเกิดปัญหาหรือ error

                environment:

                                WORDPRESS_DB_HOST: db:3306

                                WORDPRESS_DB_USER: root

                                WORDPRESS_DB_PASSWORD: 1111

 

phpmyadmin:

                depends_on:

                                - db  กำหนดให้ทำงานหลังจาก db ทำงานแล้ว

                image: phpmyadmin/phpmyadmin

                networks:

                                - wordpress

                restart: always    ให้รีสตาร์ททุกครั้งเมื่อเกิดปัญหาหรือ error

ports:

                - 8888:80

 

volumes:  ถ้ามีการประกาศใช้ volume ให้ใส่ที่นี่

                db_data:

               

networks:  ใส่ชื่อ network

                wordpress:

 

เมื่อเสร็จแล้วให้เปิด terminal แล้วไปที่โฟลเดอร์ Project

 

การเช็คความถูกต้องของ docker-compose.yml

docker-compose config

 

การสั่งให้ Docker compose ทำงาน

docker-compose up

หรือ docker-compose up –d ถ้าต้องการรันแบบแบคกราวด์

 

 

การปิด Docker compose

ถ้ายังเปิดอยู่ให้กด Ctrl+C ก่อนแล้วพิมพ์คำสั่ง

docker-compose down

เมื่อปิดแล้วมันจะทำการลบ Container และ Network ออกด้วยแต่จะไม่ลบ Volume เพราะอาจมีข้อมูลที่สำคัญเก็บอยู่

 

การดู Docker compose

ใช้ได้ทั้ง docker ps และ docker-compose ps

 

การ Rebuild Docker compose

docker-compose up -d --build   ใส่ --build คือให้ Rebuild ใหม่ ไม่ใช้ image เดิม

 

ตัวอย่างการใช้งานร่วมกับ PHP + Apache

  1. สร้างโฟลเดอร์เก็บ Project ชื่อ php -> php-apache-mysql -> php
  2. ในโฟลเดอร์ php สร้าง Dockerfile เขียนคำสั่งดังนี้

 

FROM php:7.2-apache  ใช้ image ตัวนี้

RUN docker-php-ext-install mysqli  ติดตั้ง mysqli

 

  1. สร้างโฟลเดอร์ site ภายใน php-apache-mysql ใช้เก็บไฟล์ php
  2. สร้างไฟล์ docker-compose.yml ใน php-apache-mysql เขียนคำสั่งดังนี้

version : “3”

services:

                php:

                                build:

                                                context: ./php  การ build ต้องเลือกโฟลเดอร์ที่มีไฟล์ Dockerfile

                                ports:

                                                - “8080:80”

                                volumes:

  • ./site:/var/www/html ไฟล์เว็บของ php จะอยู่โฟลเดอร์นี้

database:

                image: mysql:5.7    ใช้เวอร์ชั่น 5.7

                environment:

                                MYSQL_ROOT_PASSWORD: 1111

 

  1. docker-compose up

 

Portainer

                ใช้คำสำหรับจัดการ image รวมทั้ง monitor ดูการทำงานได้ ยกเว้นสร้างไฟล์ image ไม่ได้




กรุณา Login ก่อนถึงจะสามารถแสดงความคิดเห็นได้
Please login for comment
ตรวจสอบสถานะการจัดส่งสินค้า