Mount Volume to Container

Mount Volume to Container

เนื่องจาก container เวลาที่เราสร้าง และลบไปข้อมูลต่าง ๆ ที่เคยเกิดขึ้นในนั้นจะหายไปด้วย หากเราต้องการให้ข้อมูลใน container ยังคงอยู่เหมือนเดิมเมื่อเราสร้างมันขึ้นมา หรือเมื่อเราลบ container ออกไปแล้วเราต้องการให้ข้อมูลใน container ยังคงอยู่เหมือนเดิม เราจะต้องทำการ mount volume ของเครื่อง host ไปยัง container ด้วย

AtlasX Web Service

ซึ่ง AtlasX Web Service เองเดิมทีจะมีการเก็บข้อมูลต่าง ๆ ที่ FileLocalStorage ซึ่งเป็นการเก็บข้อมูลในรูปแบบของไฟล์ และเมื่อเราลบ container ออกไปแล้ว ข้อมูลทั้งหมดที่เก็บไว้ใน FileLocalStorage ก็จะหายไปด้วย ดังนั้นเราจะทำการ mount volume ของเครื่อง host ไปยัง container ด้วย

ให้ทำการสร้าง volume ด้วยคำสั่ง

docker volume create <volume-name>

เช่น

docker volume create atlasx-webservice-data

จากนั้นให้เพิ่มการ mount volume ของเครื่อง host ไปยัง container ในไฟล์ docker-compose.yml ดังนี้

version: '3.4'

webservice:
  image: '${WEBSERVICE_IMAGE}:${WEBSERVICE_VERSION}'
  container_name: atlasx-webservice
  networks:
    - frontend
  labels:
    - 'traefik.enable=true'
    # HTTP
    - 'traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.entrypoints=web'
    # HTTPS
    # - 'traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.entrypoints=websecure'
    # - 'traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.tls=true'
    - 'traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.rule=Host(`${WEBSERVICE_URL}`) && PathPrefix(`/${WEBSERVICE_BASEPATH}`)'
    - 'traefik.http.routers.${WEBSERVICE_PROJECT_NAME}.middlewares=${WEBSERVICE_PROJECT_NAME}-stripprefix'
    - 'traefik.http.middlewares.${WEBSERVICE_PROJECT_NAME}-stripprefix.stripprefix.prefixes=/${WEBSERVICE_BASEPATH}'
    - 'traefik.http.services.${WEBSERVICE_PROJECT_NAME}.loadbalancer.server.port=8080'
  environment:
    - ASPNETCORE_BASEPATH=/${WEBSERVICE_BASEPATH}
  volumes:
    - atlasx-webservice-data:/app/FileLocalStorage
  restart: unless-stopped

volumes:
  atlasx-webservice-data:
    external: true

เพียงเท่านี้เราก็สามารถทำการสร้างและลบ container ได้โดยที่ข้อมูลทั้งหมดที่เก็บไว้ใน FileLocalStorage จะยังคงอยู่เหมือนเดิม