Traefik, Portainer, Registry 를 위한 Docker Compose
docker-compose.yml 파일 내용은 다음과 같다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
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 한다.
1 |
$ 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 파일은 다음과 같이 생성하면 된다.
1 |
docker run --entrypoint htpasswd registry:latest -Bbn admin 1234 > .htpasswd |
위 내용은 Traefik 를 앞에 두고 뒤에 Portainer 를 /portainer URI 로 접속하도록 한다. registry 서비스는 Traefik 와 별도로 작동되도록 하였다.