Skip to content

Docker

Monday, 01 Jul 2024
       

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 ในบางกรณีจะทำให้ไม่สามารถเข้าใช้งานได้

    ขั้นตอนนี้ทำเพื่อป้องกันไม่ให้มีการแจก 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.