Docker on Windows
ในคู่มือนี้ คุณจะได้เรียนรู้วิธีปรับใช้ MyEMS ด้วย Docker บนระบบ Windows
ข้อกำหนดเบื้องต้น
- ได้ติดตั้ง docker และ npm บนเครื่องโ ฮสต์แล้ว
- ได้ติดตั้งเซิร์ฟเวอร์ MySQL แล้ว
- สามารถเชื่อมต่อฐานข้อมูล MySQL จากเครื่องโฮสต์ที่ทำงานด้วย Docker Engine ได้
- ข้อกำหนดด้านฮาร์ดแวร์: หน่วยความจำ (RAM) อย่างน้อย 8GB พื้นที่จัดเก็บอย่างน้อย 20GB (สำหรับฐานข้อมูลและคอนเทนเนอร์ Docker)
Clone source code:
cd ~
git clone https://github.com/myems/myems
Step 1 Database
ดูที่ Database
Step 2 myems-api
ในส่วนนี้ คุณจะติดตั้ง myems-api บน Docker
- คัดลอกโค ้ดต้นฉบับไปยังไดเรกทอรีรูท
cp -r myems/myems-api c:\
cd c:\myems-api
- สร้างไฟล์ .env จากไฟล์ example.env
แทนที่ 127.0.0.1 ด้วยที่อยู่ IP ของเครื่องโฮสต์ (HOST) จริงด้วยตนเอง
cp example.env .env
- สร้างอิมเมจ (Image) จากโค้ดต้นฉบับ
docker build -t myems/myems-api .
หากต้องการสร้างอิมเมจสำหรับหลายแพลตฟอร์ม ไม่ใช่แค่สถาปัตยกรรมและระบบปฏิบัติการที่ผู้ใช้เรียกใช้การสร้างอิมเมจอยู่ คุณสามารถใช้ buildx และตั้งค่าฟล래็ก --platform เพื่อระบุแพลตฟอร์มเป้าหมายสำหรับผลลัพธ์การสร้าง (ตัวอย่าง: linux/amd64, linux/arm64, หรือ darwin/amd64)
docker buildx build --platform=linux/amd64 -t myems/myems-api .
- เรียกใช้คอนเทนเนอร์ Docker
บนเครื่องโฮสต์ สร้างโฟลเดอร์ที่ c:\myems-upload และทำ bind-mount ไปยังคอนเทนเนอร์ และยังทำ bind-mount ไฟล์ .env ไปยังคอนเทนเนอร์ด้วย:
docker run -d -p 8000:8000 -v c:\myems-upload:/var/www/myems-admin/upload -v c:\myems-api\.env:/app/.env:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-api myems/myems-api
-
-d : เรียกใช้คอนเทนเนอร์ในเบื้องหลังและพิมพ์ ID ของคอนเทนเนอร์
-
-p : ประกาศพอร์ตของคอนเทนเนอร์ไปยังเครื่องโฮสต์ 8000:8000 (Host:Container) จะผูกพอร์ต 8000 (ด้านขวา) ของคอนเทนเนอร์ กับพอร์ต TCP 8000 (ด้านซ้าย) ของเครื่องโฮสต์
-
-v : หากคุณใช้ -v หรือ --volume เพื่อทำ bind-mount ไฟล์หรือไดเรกทอรีที่ยังไม่มีอยู่บน Docker host -v จะสร้าง endpoint สำหรับคุณโดยอัตโนมัติ และจะถูกสร้างเป็นไดเรกทอรีเสมอ ตัวเลือก ro (หากมี) จะทำให้ bind mount ถูกเมาท์เข้าสู่คอนเทนเนอร์ในโหมดอ่าน-only สำหรับเวอร์ชัน v4.7.0 หรือเวอร์ชันก่อนหน้านั้น ให้ใช้ '/code/.env' แทน '/app/.env'
-
--log-opt max-size=2m : ขนาดสูงสุดของล็อกก่อนที่จะถูกหมุน (roll) เป็นจำนวนเต็มบวกพร้อมตัวแก้ไขที่แสดงหน่วยวัด (k, m, หรือ g)
-
--log-opt max-file=2 : จำนวนสูงสุดของไฟล์ล็อกที่สามารถมีอยู่ได้ หากการหมุนล็อกสร้างไฟล์เกินขีดจำกัด ไฟล์ที่เก่าที่สุดจะถูกลบออก เป็นจำนวนเต็มบวก
-
--restart : นโยบายการรีสตาร์ทที่จะใช้เมื่อคอนเทนเนอร์ออกจากระบบ
-
--name : กำหนดชื่อให้คอนเทนเนอร์
เส้นทางสัมบูรณ์ก่อนเครื่องหมายคอลอน (:) คือเส้นทางบนเครื่องโฮสต์ ซึ่งอาจแตกต่างกันไปตามระบบของคุณ เส้นทางสัมบูรณ์หลังเครื่องหมายคอลอน (:) คือเส้นทางบนคอนเทนเนอร์ ซึ่งไม่สามารถเปลี่ยนแปลงได้ โดยการส่ง .env เป็นพารา มิเตอร์ bind-mount คุณสามารถเปลี่ยนค่าการกำหนดค่าในภายหลังได้ หากคุณเปลี่ยนไฟล์ .env ให้รีสตาร์ทคอนเทนเนอร์เพื่อให้การเปลี่ยนแปลงมีผล
หากคุณต้องการย้ายอิมเมจไปยังคอมพิวเตอร์อื่น
- ส่งออกอิมเมจเป็นไฟล์ tarball
docker save --output myems-api.tar myems/myems-api
- คัดลอกไฟล์ tarball ไปยังคอมพิวเตอร์อื่น แล้วโหลดอิมเมจจากไฟล์ tarball
docker load --input .\myems-api.tar
Step 3 myems-admin
ในส่วนนี้ คุณจะติดตั้ง myems-admin บน Docker
- คัดลอกโค้ดต้นฉบับไปยังไดเรกทอรีรูท
cp -r myems/myems-admin c:\
cd c:\myems-admin
แทนที่ 127.0.0.1:8000 ในไฟล์ nginx.conf ด้วยที่อยู่ IP และพอร์ตจริงของ myems-api บน เครื่องโฮสต์ (HOST) ด้วยตนเอง
notepad nginx.conf
proxy_pass http://127.0.0.1:8000/;
- สร้างอิมเมจ (Image) จากโค้ดต้นฉบับ
docker build -t myems/myems-admin .
หากต้องการสร้างอิมเมจสำหรับหลายแพลตฟอร์ม ไม่ใช่แค่สถาปัตยกรรมและระบบปฏิบัติการที่ผู้ใช้เรียกใช้การสร้างอิมเมจอยู่ คุณสามารถใช้ buildx และตั้งค่าฟล래็ก --platform เพื่อระบุแพลตฟอร์มเป้าหมายสำหรับผลลัพธ ์การสร้าง (ตัวอย่าง: linux/amd64, linux/arm64, หรือ darwin/amd64)
docker buildx build --platform=linux/amd64 -t myems/myems-admin .
- เรียกใช้คอนเทนเนอร์ Docker
บนเครื่องโฮสต์ สร้างโฟลเดอร์ที่ c:\myems-upload และทำ bind-mount ไปยังคอนเทนเนอร์ และยังทำ bind-mount ไฟล์ nginx.conf ไปยังคอนเทนเนอร์ด้วย: พารามิเตอร์ -v สำหรับโฟลเดอร์ upload ต้องเหมือนกับที่ใช้ใน myems-api
docker run -d -p 8001:8001 -v c:\myems-upload:/var/www/myems-admin/upload -v c:\myems-admin/nginx.conf:/etc/nginx/nginx.conf:ro --log-opt max-size=1m --log-opt max-file=2 --restart always --name myems-admin myems/myems-admin
-
-d : เรียกใช้คอนเทนเนอร์ในเบื้องหลังและพิมพ์ ID ของคอนเทนเนอร์
-
-p : ประกาศพอร์ตของคอนเทนเนอร์ไปยังเครื่องโฮสต์ 8001:8001 (Host:Container) จะผูกพอร์ต 8001 (ด้านขวา) ของคอนเทนเนอร์ กับพอร์ต TCP 8001 (ด้านซ้าย) ของเครื่องโฮสต์
-
-v : หากคุณใช้ -v หรือ --volume เพื่อทำ bind-mount ไฟล์หรือไดเรกทอรีที่ยังไม่มีอยู่บน Docker host -v จะสร้าง endpoint สำหรับคุณโดยอัตโนมัติ และจะถูกสร้างเป็นไดเรกทอรีเสมอ ตัวเลือก ro (หากมี) จะทำให้ bind mount ถูกเมาท์เข้าสู่คอนเทนเนอร์ในโหมดอ่าน-only สำหรับเวอร์ชัน v4.7.0 หรือเวอร์ชันก่อนหน้านั้น ให้ใช้ '/code/.env' แทน '/app/.env'
-
--log-opt max-size=2m : ขนาดสูงสุดของล็อกก่อนที่จะถูกหมุน (roll) เป็นจำนวนเต็มบวกพร้อมตัวแก้ไขที่แสดงหน่วยวัด (k, m, หรือ g)
-
--log-opt max-file=2 : จำนวนสูงสุดของไฟล์ล็อกที่สามารถมีอยู่ได้ หากการหมุนล็อกสร้างไฟล์เกินขีดจำกัด ไฟล์ที่เก่าที่สุดจะถูกลบออก เป็นจำนวนเต็มบวก
-
--restart : นโยบายการรีสตาร์ทที่จะใช้เ มื่อคอนเทนเนอร์ออกจากระบบ
-
--name : กำหนดชื่อให้คอนเทนเนอร์
หากคุณต้องการย้ายอิมเมจไปยังคอมพิวเตอร์อื่น
- ส่งออกอิมเมจเป็นไฟล์ tarball
docker save --output myems-admin.tar myems/myems-admin
- คัดลอกไฟล์ tarball ไปยังคอมพิวเตอร์อื่น แล้วโหลดอิมเมจจากไฟล์ tarball
docker load --input .\myems-admin.tar
Step 4 myems-modbus-tcp
ในส่วนนี้ คุณจะติดตั้ง myems-modbus-tcp บน Docker