- https://github.com/docker/awesome-compose/tree/master/django
- https://github.com/pitimon/dockerswarm-inhoure
-
สร้าง VM
- Ubuntu 22.04
- 2 core CPU
- 2 GB of ram
- 32 GB HDD
-
Clone VM to template
-
ทำการสร้าง VM จาก template มาทั้งหมด 3 node
- manager
- worker1
- worker2
-
ทำการเปลี่ยนค่าชื่อ hostname ทุกโหนด
hostnamectl set-hostname "name"
- รีเซ็ทค่า machine-id ทุกโหนดเพื่อไม่ให้ ip ชนกัน
cp /dev/null /etc/machine-id
rm /var/lib/dbus/machine-id
ln -s /etc/machine-id /var/lib/dbus/machine-id
- ทำการกำหนดเครื่อง manager
docker swarm init
- โดยจะได้คำสั่งและคีย์มาเพื่อนำไปสร้าง worker
-
นำคำสั่งที่ได้มาไปรันบนเครื่อง worker
-
ทำการติดตั้ง Portainer ทั้ง 3 node เพื่อใช้เป็นตัว monitoring และทำให้ง่ายต่อการจัดการ
curl -L https://downloads.portainer.io/ce2-17/portainer-agent-stack.yml -o portainer-agent-stack.yml
docker stack deploy -c portainer-agent-stack.yml portainer
-
ทำการแก้ไขไฟล์ host บนเครื่องคอมพิวเตอร์
- Windows C:\Windows\System32\drivers\etc\hosts
- Linux/Mac /etc/hosts โดยเพิ่ม
172.31.1.xxx portainer.cpedemo.local 172.31.1.xxx traefik.cpedemo.local 172.31.1.xxx swarmpit.cpedemo.local
-
ทำการติดตั้ง traefik เพื่อใช้ในการ dashboard ดู http routers
docker network create --driver=overlay traefik-public export NODE_ID=$(docker info -f '{{.Swarm.NodeID}}') echo $NODE_ID docker node update --label-add traefik-public.traefik-public-certificates=true $NODE_ID export EMAIL=<email> export DOMAIN=<domain> export USERNAME=admin export PASSWORD=<password> export HASHED_PASSWORD=$(openssl passwd -apr1 $PASSWORD) echo $HASHED_PASSWORD docker stack deploy -c traefik-host.yml traefik
-
ตรวจสอบการใช้งานโดยเข้าไปที่ https://traefik.cpedemo.local/
-
ทำการติดตั้ง swarmpit เพื่อใช้ในการ dashboard ดูรายละเอียดของ node
export DOMAIN=swarmpit.cpedemo.local กำหนดค่า lable ให้กับ db-data export NODE_ID=$(docker info -f '{{.Swarm.NodeID}}') docker node update --label-add swarmpit.db-data=true $NODE_ID กำหนดค่า lable ให้กับ influx-data export NODE_ID=$(docker info -f '{{.Swarm.NodeID}}') docker node update --label-add swarmpit.influx-data=true $NODE_ID docker stack deploy -c swarmpit.yml swarmpit
-
ตรวจสอบการใช้งานโดยเข้าไปที่ http://swarmpit.cpedemo.local/
-
ทำการ Clone ไฟล์จาก github url: https://github.com/docker/awesome-compose/tree/master/django มาเก็บไว้ในโฟลเดอร์ swarm02
-
ใช้คำสั่ง
docker compose up
- เพื่อทำการสร้าง image ขึ้นมา
- เช็คว่า image ได้ถูกสร้างขึ้นมาและเปิดใช้งานได้หรือไม่ด้วยคำสั่ง
docker ps
-
ทำการล็อกอินบัญชี docker ที่ node
docker login
-
ตรวจสอบชื่อ images ทั้งหมดที่มีเพื่อใช้ในการ push ลง docker hub
docker images
-
สร้าง image ใหม่โดยใช้ image ตัวเดิม
docker tag swarm02-web-django:latest centurynine/swarm02-web-django:0311
-
push image เข้าสู่ docker hub
docker push centurynine/swarm02-web-django:0311
-
เข้าไปที่หน้าเว็บ https://portainer.ipv9.me
-
ทำการ Add stack โดยใช้ image ที่ได้ push ลงไปยัง docker
version: '3.7' services: web-django: image: centurynine/swarm02-web-django:0311 networks: - webproxy logging: driver: json-file options: "max-size": "10m" "max-file": "5" deploy: replicas: 1 labels: - traefik.docker.network=webproxy - traefik.enable=true - traefik.http.routers.${APPNAME}-https.entrypoints=websecure - traefik.http.routers.${APPNAME}-https.rule=Host("${APPNAME}.xops.ipv9.me") - traefik.http.routers.${APPNAME}-https.tls.certresolver=default - traefik.http.services.${APPNAME}.loadbalancer.server.port=8000 volumes: app: networks: webproxy: external: true
-
กำหนด environment variables
-
ตรวจสอบว่าทำการ deply ได้ไหมที่ลิ้งค์ https://spcn05-django.xops.ipv9.me/