Thursday, December 23, 2021

ทดสอบสร้าง docker base on LAMP

Env HOST

  • Ubuntu 21.10
  • MySQl 8
  • PHP 8

Step

  • ติดตั้ง docker service และ docker-compose ให้เรียบร้อย

$ sudo apt install docker docker-compose

  • start docker service และ กำหนดมันให้เป็น service จะได้ start ตอนบูตระบบทุกครั้ง ด้วยคำสั่ง

$ systemctl enable --now docker

  • เตรียม folder project เราจะไปสร้างไว้ที่ home ของ user เราใช้งานปัจจุบันโดย

  • สร้าง directory ใหม่แบบ พาธเลย โดยใช้ option p (ในที่นี้เรายังไม่มี linuxconfig และ www folder ถ้าเราไม่ใช้ -p มันจะบอกว่าไม่พบ folder linuxconfig แบบนี้แหละ)

$ cd ~ && mkdir -p linuxconfig/www

  • จากนั้นสร้างไฟล์ docker-compose ไว้พาธนี้

$ nano linuxconfig/docker-compose.yml

  • เพิ่มประมาณนี้ในไฟล์

  • จากนั้นสร้าง Dockerfile อีกอันเอาไว้แก้ปัญหา php mysql driver การเชื่อมต่อระหว่าง php กับ mysql

$ nano linuxconfig/Dockerfile

  • จากด้านบน เราสร้าง container 3 อัน (services 3 ชื่อ www, database, phpmyadmin) โดยทำ link ให้ container เห็นกันได้เลย
  • สร้างไฟล์ทดสอบ phpinfo โดย

$ echo "<?php phpinfo();" > ~/linuxconfig/www/index.php

  • จากนั้นสั่งให้ build container ทั้งหมดผ่าน docker-compose โดยคำสั่ง

$ cd linuxconfig && sudo docker-compose up -d

  • เพิ่มเติมใส่ -d เพราะทำให้มันเป็น daemon (background service สั่งรันคำสั่งนี้แล้วสามารถ รับคำสั่งอื่นต่อไปด้าน โดยไม่แสดง output ของ service นี้)
  • รันได้ไม่มีปัญหาก็จะแสดง done ประมาณนั้น
  • ทดสอบโดยเข้า http://host_ip:8001/index.php

Note

  • คำสั้งสำหรับ stop project ของเรา

$ sudo docker-compose stop

  • คำสั่งในกรณีเราแก้ docker-compose.yml หรือ แก้ Dockerfile เราต้อง build container ใหม่ด้วยคำสั่ง

$ sudo docker-compose up -d --build
  • อธิบายคอนฟิกที่สำคัญ

command: --default-authentication-plugin=mysql_native_password 

  • เอาไว้แก้ไขปัญหานี้

the server requested authentication method unknown to the client [caching_sha2_password]

  • ส่วนที่เราต้องมี Dockfile เอาไว้เพิ่มคำสั่ง load library ที่จำเป็นสำหรับ php library mysql pdo
  • ในไฟล์ docker-compose เราจะเห็น build: . คือ ตัว service www เราจะมีการเรียก Dockerfile ใน path ปัจจุบันที่มันทำงานอยู่ด้วย 
  • อีกเรื่องใน dockerfile มีคำสั่งแบบนี้ RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini" 
  • เอาไว้แก้ปัญหาเรื่อง json response มี php warning ออกมาด้วย มันจะ ajax error เป็นการใช้ php.ini ด้วย production config ไปเลย คล้ายกับ php framework ที่เปิดใช้งาน production env นั่นแหละคับ

Ref

  • https://linuxconfig.org/how-to-create-a-docker-based-lamp-stack-using-docker-on-ubuntu-20-04
  • https://blog.devgenius.io/docker-php-pdo-mysql-how-to-8c0aee437539 
  • https://javakoon.blogspot.com/2020/11/docker-compose-lamp-stack-linux-apache.html
  • https://arnondora.in.th/docker-tip-lamp-stack-docker/
  • https://medium.com/touch-technologies/%E0%B8%97%E0%B8%B3%E0%B8%84%E0%B8%A7%E0%B8%B2%E0%B8%A1%E0%B8%A3%E0%B8%B9%E0%B9%89%E0%B8%88%E0%B8%B1%E0%B8%81-docker-compose-b6688fc98c6f
  • https://medium.com/@somprasongd/docker-compose-%E0%B8%84%E0%B8%B7%E0%B8%AD-fc8b35e0c8bc
  • https://sysadmin.psu.ac.th/2017/09/19/get-started-with-docker-part-11-docker-compose-ldap-services/


No comments:

Post a Comment