Skip to content

Docker

Mon 01 Jul 2024  
🎉 Hi: ... 🎉

Docker

Docker image

TIP

หลังจาก build image เสร็จแล้ว แนะนำให้ใช้คำสั่งนี้เพื่อลบไฟล์แคชจากการ build ทำให้ลดการใช้เนื้อที่บนเซิรฟเวอร์

bash
docker builder prune

แนวทางการตั้งชื่อ image name และ กำหนด tag ที่ได้มาจากการ build ดังนี้

docker build -t [images name]:[tag] . --no-cache

  • Image name: จะต้องกำหนดชื่อให้บ่งบอกถึงเซอร์วิสที่จะใช้งาน เช่น project1-frontend

  • Tag: จะประกอบไปด้วยเวอร์ชั่นและครั้งที่ build เช่น x.x.x-build.x

    docker
    FROM nginx:1.24.0-alpine
    
    EXPOSE 80
    EXPOSE 443
    
    CMD ["nginx", "-g", 'daenib off;"]
    bash
    docker build -t project1-frontend:v1.0.0-build.3 . --no-cache

Docker compose

จากที่ได้อัพเดท Docker version 26.1.3, build b72abbb ถ้ามีการใช้ไฟล์ docker-compose.yml ไม่จำเป็นต้องใส่ version: "3"

yml
# docker-compose.yml
# version: "3"
networks:
  my-network:
    external: true
services:
  service-name1:
    image: image-name:tag
    container_name: service-name1
    restart: always
    ports:
      - 'xxxx:xxxx'
    environment:
      - NODE_ENV=production
    networks:
      my-network:
        ipv4_address: xx.xx.xx.xx

Docker network

  • วิธีเปลี่ยน default ip docker0

    WARNING

    เปลี่ยน default ip docker0 ก่อนการ Deploy เพราะถ้าไม่เปลี่ยน IP จะทำให้ไม่่สามารถเข้าใช้งานจาก PSU WiFI ได้

    ขั้นตอนนี้ทำเพื่อป้องกันไม่ให้มีการแจก IP 172.0.0.0/8 ในกรณีที่ run docker โดยไม่สร้าง network

  • สร้างไฟล์ daemon.json และตั้งค่าตามนี้

    bash
    vi /etc/docker/daemon.json
    json
    {
      "bip": "10.0.0.1/24",
      "default-address-pools": [{ "base": "10.0.2.0/18", "size": 24 }]
    }
  • คำสั่งการสร้าง Docker network

    WARNING

    ก่อน run docker จะต้องสร้าง docker network และต้องเลือกใช้ docker network ที่สร้างขึ้นมา

    โดยจะต้องกำหนดค่าต่าง ๆ ดังนี้

    driver bridge subnet 10.0.88.0/24 gateway 10.0.88.1

    docker network create [driver] [subnet] [gateway] [network name]

    bash
    docker network create --driver=bridge --subnet=10.0.88.0/24 --gateway=10.0.88.1 my-network
  • คำสั่ง docker run with network name and ip address

    bash
    docker run -d -p PORT:PORT --name portainer_agent \
    --network=[NETWORK_NAME] --ip=[IP_ADDRESS] --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -v /var/lib/docker/volumes:/var/lib/docker/volumes \
    -v /:/host portainer/agent:2.21.1

Built with: VitePress.