Tuesday, December 31, 2024

Installing nano on MySQL docker container

  • ประเด็นคือจะแก้คอนฟิก MySQL container docker
  • แต่ไม่มี text editor ให้ใช้ทำไงล่ะทีนี้

Solved

  • Mysql build the image with oracle linux, run the commands to install nano:

bash-5.1# microdnf update

bash-5.1# microdnf install nano sudo -y

  • And edit the my.cnf with nano

Ref

  • https://stackoverflow.com/questions/60521151/how-to-install-sudo-and-nano-command-in-mysql-docker-image

Understanding Docker Restart Policies: — restart=no and — restart=always

  • ยังหาสาเหตุไม่พบทำไม  container status restarting บ่อยๆ 
  • ทำให้ parent host เอ๋อเลย cpu load ram หมด
  • แก้ปัญหาเฉพาะหน้าก่อนคือ ปิด restart alway เป็น no

Solved
  • ตรวจสอบค่าปัจจุบันโดย
$ sudo docker inspect my-container-name | grep "restart"
  • อัพเดทไปมาคือ
$ sudo docker update --restart=no my-container-name
$ sudo docker update --restart=always my-container-name
Add
  • ปัญหาอาจเกิดจาก antivirus edr ฝั่ง server ไปเปลี่ยนสิทธิ์ เปลี่ยน owner folder mysql_data เพิ่มความปลอดภัยทำให้ระบบมีปัญหา 
  • แก้ปัญหาโดย ปิด antivirus edr และ เปลี่ยน owner เป็นค่าเริ่มต้นของระบบ
  • และอีกเรื่อง ปิดการใช้งาน binlog ของ mysql container ด้วย เปลืองพื้นที่มากๆ
Ref
  • https://medium.com/@avishek2020/understanding-docker-restart-policies-restart-no-and-restart-yes-c1f8e217f983

Wednesday, December 25, 2024

ปัญหาที่พบในการย้ายฐาน DB จาก server หลัก มา server รอง ด้วย MySQL Workbench

ปัญหาที่พบ db_fn_routines.sql

  • เกี่ยวกับ NO_AUTO_CREATE_USER 
  • /*!50003 SET sql_mode              = 'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' */ ;
  • กับ This function has none of DETERMINISTIC
  • ปัญหาเรื่อง collation charset ไม่มีใน server ที่จะย้ายไป

Solved

  • แก้ปัญหา NO_AUTO_CREATE_USER โดย replace เป็นค่าว่าง
  • แก้ปัญหา function has none of DETERMINISTIC
  • เพิ่มบรรนี้ไว้ด้านบนไฟล์ db_fn_routines.sql

SET GLOBAL log_bin_trust_function_creators = 1;

  • แล้วทำการ import ด้วย MySQL Wordbench




Reset root password For MySQL docker container running

  • ประเด็นคือ จะเปลี่ยนรหัสผ่านใหม่ จากที่เราได้ตั้งไว้ใน docker-compose โดยจะใช้ container ปัจจุบันที่รันอยู่

# docker exec -it mysq-container-name bash

bash-5.1# mysql -uroot -pmyrootpass

--------------------------------------------------

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

  • กรณีต้องการใช้ root ในการ login phpmyadmin

mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'new_password';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

mysql> FLUSH PRIVILEGES;

  • หรือ

mysql> ALTER USER 'root'@'%' IDENTIFIED BY 'new_password';

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

mysql> FLUSH PRIVILEGES;

Ref

  • https://aws.plainenglish.io/reset-the-root-password-for-mysql-in-a-docker-container-8adbc29a0e35
  • https://chatgpt.com/share/676bb376-7888-8010-b1a5-b49fa7129fce

Monday, December 23, 2024

  Limit CPU usage container docker

  • ประเด็นคือ อยู่ linux server ไม่ตอบสนอง
  • คลาดว่า cpu load ไม่ลง
  • ตอนช่วงที่ลง ไล่ปิด service  ต่างๆ
  • สุดท้ายเช็ค container running
  • พบ container 1 ตัวที่เราสั่งสร้างและรันด้วย คำสั่ง docker โดยสิทธิ์ user ทั่วไปที่ไม่ใช่ root 
  • มันพยายาม restart ตัวเอง สั่ง stop และ สั่ง start แล้ว status เค้าก็ยังเป็น Restarting น่าจะทำให้ cpu load ขึ้น
  • เลยสั่งปิดไปก่อน
  • แนวทางแก้ไข คือ มันต้องใช้สิทธิ์ root หรือ sudo หว่า ถึงจะ  start แล้ว status ปกติ
  • แต่พอใช้ sudo start ไปสักพัก 3-4 ชม. ก็ load อีก
  • น่าจะต้องจำกัดการใช้ cpu container ซะแล้ว

Solved

  • สำหรับตอน run container
  • This limits the container to use at most 1.5 CPU cores.

# docker run --cpus="1.5" <image>

  • สำหรับ container running

# docker update --cpus="2" <container_id>

Add

  • คำสั่งดูสถานะการใช้ resource ของ container

# docker stats

Ref

  • https://chatgpt.com/share/67691f97-7a3c-8010-9a21-1cac63c0ea0f

Friday, December 13, 2024

Set time zone for container docker

  • ประเด็นคือ ใหม่กับ container docker เลยพึ่งรู้ว่า container มี timezone ของตัวเองเป็น UTC
  • อยากจะแก้เป็น +07 Asia/Bangkok

Option 1 

  • ตั้งค่าตอนจะรัน container (ถ้า image support TZ environment e.g. Debian,Ubuntu,Alpine)

$ docker run -e TZ=Asia/Bangkok -d your-image

  • หรือ monting จาก host แม่มาใช้

$ docker run -v /etc/localtime:/etc/localtime:ro -v /etc/timezone:/etc/timezone:ro -d your-image

Option 2 
  • ตั้งตอนอัพเดท image ใน Dockfile
FROM ubuntu:22.04

# Install tzdata and set the time zone
RUN apt-get update && apt-get install -y tzdata && \
    ln -fs /usr/share/zoneinfo/Asia/Bangkok /etc/localtime && \
    dpkg-reconfigure -f noninteractive tzdata

  • แล้วก็สั่ง build image จาก Dockfile
$ docker build -t your-image .
Option 3 
  • อัพเดท container  ที่กำลังรันอยู่ 

$ docker exec -it your-container-name /bin/bash

# apt-get update && apt-get install -y tzdata
# ln -fs /usr/share/zoneinfo/Asia/Bangkok /etc/localtime
# dpkg-reconfigure -f noninteractive tzdata
  • ใน option 3 จะทำให้ container หยุดทำงานต้องสั่ง รันใหม่ แต่ถ้าคอนฟิกแล้วจะให้ restart auto ก็อย่าลืม set config container restart: always
Related
  • https://juuier.blogspot.com/2024/12/container-docker-restart-host-restart.html

Ref

  • https://chatgpt.com/share/675b9df0-89b0-8010-afae-159279c71aca

Wednesday, December 4, 2024

Container docker restart เองเมื่อ Host แม่ restart

  • ประเด็นคือ คิดไปเองว่า เมื่อ restart เครื่องแม่แล้ว container docker เราต้องมาสั่ง start ด้วยตัวเอง
  • แต่มัน start auto หว่า ด้วย config นี้ใน docker-compose.yml

restart: always

  • ตอนแรกเข้าใจว่า config นี้คือ เราเข้าไปใน container แล้วแก้คอนฟิกภายใน สั่ง restart service ใน container แล้ว container มันจะ stop ไปเอง ถ้าเราต้องการให้มันมัน restart เองก็ใส่ config อย่างว่า
  • แต่มันได้ประโยชน์อีกอย่างที่พึ่งรู้คือ  restart เครื่อง host มันก็ start auto เองหว่า

เพิ่มเติม

  • ดูว่า container เรา set restart policy เป็นอย่างไรด้วยคำสั่ง

$ docker inspect --format '{{.HostConfig.RestartPolicy.Name}}' <container_name|id>

  • สั่ง update policy restart ของ container ที่ทำงานอยู่โดย

$ docker update --restart always <container_name|id>

  • หรือถ้าจะสั่งรัน container ใหม่คือ

$ docker run -d --restart unless-stopped <container_name|id>

Ex: $ docker update --restart always mysql

Ref

  • https://docs.docker.com/engine/containers/start-containers-automatically/

Popular Posts