도커로 도메인 서비스 여러개 제공하기
오늘은 기존의 너의 하루는 프로젝트가 무르익은 것 같아, 배포를 위한 발판을 마련하고자 했다. 배포는 연구실에 있는 서버용 컴퓨터를 사용하기로 했다. 해당 서버는 도커가 깔려있어, 하나의 컴퓨터에서 여러개의 프로젝트를 배포운영할 수 있을 것 같았다.
아래 에서 아파치 서버를 이용하여 하나의 컴퓨터로 여러 프로젝트를 운영하는 것을 알려주었고, 도커를 이용한 방법 또한 언급을 했다. 참고한 블로그들은 아래와 같다.
- https://tyson.tistory.com/133
- reverse proxy 를 사용하는 이유
- https://jungin.tistory.com/4
- docker reverse proxy 의 개념과 **nginx.conf** 에 대한 설명이 있었다.
- https://blog.youngbin.kim/2017/07/10/docker-를-사용한-가상-호스트virtual-host-구축-및-서브-도메인-연결/
- docker reverse proxy 의 동작 방식을 알 수 있었다.
- https://graycha.tistory.com/213
- 이 곳에서는 새로운 서비스를 VIRTUAL_HOST와 함께 추가하면, 기존의 reverse proxy 컨테이너를 재시작 하는 것 같다. 하지만 위 블로그의 동작방식으로 보면, 굳이 재시작을 안 해줘도 될 것 같기도 하다.
Docker Reverse Proxy
https://hub.docker.com/r/jwilder/nginx-proxy
위 도커 이미지를 이용해서 진행을 하였다. 도커의 공식 이미지는 아니라, 이미지 관련 보안 문제에서 자유로울 수는 없지만, 프로젝트 규모가 작고, 리스크가 크지 않고, 직접 이미지르 만들어서 하는 것 보다는 리소스가 적게 들 것 같아서 그냥 사용하기로 했다.
그리고, docker-compose 에서 공식 사용 법을 아래와 같이 제공해주었다.
version: '2'
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
whoami:
image: jwilder/whoami
environment:
- VIRTUAL_HOST=whoami.local
위 컴포즈 파일을 분석하자면, container network를 따로 설정해주지 않았지만, default network로 묶여 있기 때문에, 두 가지 서비스 컨테이너 간의 연결이 구성된다. nginx-proxy 서비스 컨테이너는 proxy를 위한 컨테이너이고, 이 곳으로 80번 포트로 들어온 요청이 모두 들어간다. whoami 서비스 컨테이너는 실험용 컨테이너이고, whoami.local라는 도메인으로 들어온 요청을 받겠다는 설정이다.
하지만 나는 조금 다르게 사용하고자 했다. 위와 같이 구성하면, 서비스를 추가하고자할 때마다, 새로이 docker-compose 파일을 수정해주어야 하는 번거로움이 있다. 그래서 아래와 같이 바꾸어서 사용해보았다.
Docker-compose file
version: '3'
services:
nginx-proxy:
image: jwilder/nginx-proxy
ports:
- "80:80"
volumes:
- /var/run/docker.sock:/tmp/docker.sock:ro
restart: always
networks:
- proxy
networks:
proxy:
driver: bridge
nginx-proxy 컨테이너로, proxy를 위한 컨테이너만을 실행시키도록 하고, network를 proxt라는 이름으로 구성했다. 컨테이너를 하나만 실행하기에 command만으로 실행할 수도 있지만, 문서로 관리하는 것이 나중을 위해 나을 것 같기도 해서 굳이 그대로 compose로 사용한다.
그리고 서비스를 추가할 때는 아래와 같이 사용한다.
Run Project Container
docker run -dit --name nginx-test -e VIRTUAL_HOST=yourday.kro.kr --network reverseproxy_proxy nginx:alpine
이 두 옵션을 사용해서 yourday.kro.kr 도메인을 nginx-test라는 이름의 컨테이너로 요청을 보내게 할 수 있다.
VIRTUAL_HOST=yourday.kro.kr
—network reverseproxy_proxy
도커의 network들을 확인하고자 하면 아래와 같이 입력하면 된다.
docker network ls
위와 같이 command 로 입력해서 실행할 수 있지만, 아래와 같이 compose file로도 실행할 수 있을 것으로 기대한다. 하지만 되지 않을 지도 모르겠다
version: '2'
services:
frondEnd:
image: jwilder/whoami
backEnd:
image: jwilder/whoami
environment:
- VIRTUAL_HOST=yourday.kro.kr
networks:
- reverseproxy_proxy
아래와 같이 잘 실행되고 있음을 알 수 있다.
글을 마무리하며 종합적으로, 이렇게 구성하면, 굳이 서비스마다 서버의 http 포트를 열어주지 않아도 될 것 같아, 보안적으로도 괜찮지 않을까 하는 생각이 든다.
Author And Source
이 문제에 관하여(도커로 도메인 서비스 여러개 제공하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@dongkan9/도커로-도메인-서비스-여러개-제공하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)