Traefik, Portainer, Registry 를 위한 Docker Compose

docker-compose.yml 파일 내용은 다음과 같다.

version: "3.2"

services:
  registry:
    image: 'registry:latest'
    ports:
      - '5000:5000'
    volumes:
      - /var/lib/registry:/var/lib/registry
      - ./.htpasswd:/etc/docker/registry/.htpasswd
    environment:
      REGISTRY_AUTH: 'htpasswd'
      REGISTRY_AUTH_HTPASSWD_REALM: 'systemv'
      REGISTRY_AUTH_HTPASSWD_PATH: '/etc/docker/registry/.htpasswd'
    deploy:
      restart_policy:
        condition: any
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]
      update_config:
        delay: 2s

  portainer:
    image: portainer/portainer
    networks:
      - frontend
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data
    deploy:
      restart_policy:
        condition: any
      mode: replicated
      replicas: 1
      placement:
        constraints: [node.role == manager]
      update_config:
        delay: 2s
      labels:
        - "traefik.enable=true"
        - "traefik.backend=portainer"
        - "traefik.docker.network=frontend"
        - "traefik.port=9000"
        - "traefik.frontend.rule=PathPrefixStrip: /portainer"

  loadbalancer:
    image: traefik
    command: --docker \
      --docker.swarmmode \
      --docker.watch \
      --web
    ports:
      - 80:80
      - 8080:8080
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    deploy:
      restart_policy:
        condition: any
      mode: replicated
      replicas: 1
      update_config:
        delay: 2s
      placement:
         constraints: [node.role == manager]
    networks:
      - frontend

networks:
  frontend:
    external:
      name: frontend
volumes:
  portainer_data:

위와같이 내용을 작성하고 YAML 파일로 저장한다. 저장한 파일 이름이 docker-frontend.yml 이라고 한다면 이것을 이용해서 다음과 같이 docker stack 을 deploy 한다.

$ docker stack deploy --compose-file=docker-frontend.yml dockerInfra

stack 이 생성 정상적으로 생성되면 3개의 Service가 생성된다. 각각 Traefik, Portainer, Registry 이며 Portainer 는 Traefik 에 URI Reverse 로 연결된다. Portainer 의 URL 은 http://<IP>/portainer 이다.

Registry 에 .htpasswd 파일은 다음과 같이 생성하면 된다.

docker run --entrypoint htpasswd registry:latest -Bbn admin 1234 > .htpasswd

위 내용은 Traefik 를 앞에 두고 뒤에 Portainer 를 /portainer URI 로 접속하도록 한다. registry 서비스는 Traefik 와 별도로 작동되도록 하였다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다