[docker] Docker 를 사용한 가상 호스트 (Virtual Host) 구축 및 서브 도메인 연결

Docker 를 사용한 가상 호스트 (Virtual Host) 구축 및 서브 도메인 연결

도메인을 처음으로 구매하여 운영하려다 보니 생소한 점이 많다. 나의 경우 하나의 서버에서 서브 도메인을 활용하여 여러 서비스를 구동하고 싶었다. 예를 들면 blog.youngbin.kim 에는 워드프레스를 설치하고, dev.youngbin.kim 에는 소스 코드 관리를 위해 Gogs 를 구동하는 식이다. 이 글에서는 docker 와 함께 서브 도메인을 사용하기 위하여 네임 서버를 설정하고 docker 환경을 설정하는 방법을 다루었다.

네임 서버(Name server) 설정

먼저 도메인을 관리하는 사이트에 가서 서브 도메인을 등록해 주어야 한다. 사용하는 도메인 업체의 웹페이지 등에서 DNS 관리 페이지를 찾을 수 있는데, 여기서 A 레코드를 추가해 준다. A 레코드는 Address record 로써, 도메인과 실제 ip 주소를 연결해 주는 역할을 한다. 따라서 A 레코드에는 도메인 이름과 IP 주소를 입력하도록 되어 있다. 우리는 서브 도메인을 기존의 서버에서 처리하고 싶은 것이므로, 서브 도메인의 이름을 입력하고 IP 주소는 서버의 IP 주소와 동일하게 입력한다. 입력 후 해당 서브 도메인으로 접속했을 때 루트 도메인으로 접속한 것과 같은 페이지가 나오면 된다.

Reverse Proxy 설정

이제 서브 도메인으로 들어오는 요청이 우리의 서버에 도착하도록 만들었으니, 다음으로는 요청된 주소에 따라 다른 페이지를 서비스하도록 설정해야 한다. 이렇게 하나의 서버에서 여러 개의 도메인을 호스트할 수 있도록 하는 것을 가상 호스트(Virtual host) 라고 부른다. 특히 나는 각각의 서비스를 docker 를 이용하여 실행할 것이므로 웹페이지 요청을 주소에 따라 다른 docker container 로 넘겨주는 기능이 필요하다. 고맙게도 이를 미리 구현해 둔 docker image 가 존재한다(nginx-proxy). 간단하게 살펴보니 nginx 는 프록시 웹 서버의 역할을 하며, docker-gen 으로 새로운 docker container 가 실행되거나 중지될때마다 프록시 서버의 정보를 업데이트해 준다. 다음과 같이 nginx-proxy 를 설치하여 구동할 수 있다.

docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.sock:ro jwilder/nginx-proxy

위와 같이 nginx-proxy 를 실행하고 나서 브라우저에서 루트 도메인에 접속했을 때 503 Service Temporarily Unavailable 메시지가 나오면 정상적으로 설치된 것이다.

Docker Container 설정

마지막으로 어떤 주소를 어떤 container 로 전달할 것인지를 설정해야 한다. 이는 docker run 을 수행할 때 VIRTUAL_HOST 값을 설정해 줌으로써 가능하다. 앞서 설치했던 nginx-proxy 의 docker-gen 이 새로운 container 가 실행 될 때마다 해당 container 의 환경 변수에서 VIRTUAL_HOST 값을 읽은 후 이를 nginx 서버에 반영하는 것이다. 환경 변수는 -e 옵션을 통해서 전달한다. 예를 들어 내가 워드프레스를 blog.youngbin.kim 에 연결하였을 때는 다음과 같은 명령을 사용하였다.

docker run -d -e VIRTUAL_HOST=blog.youngbin.kim wordpress:latest

기타 옵션들 (다른 환경 변수 값이나 데이터베이스와 연결하는 옵션) 은 생략하였다. 위와 같이 수행한 후 서브 도메인 주소에 접속했을 때 올바른 페이지가 나오면 성공!

기타

  • docker 버전의 문제인지는 모르겠지만, 나의 경우 docker-compose 명령을 사용했을 때 VIRTUAL_HOST 가 반영되지 않는 문제가 있었다. docker logs <container> 를 이용하면 docker-gen 이 새로운 환경 변수를 성공적으로 읽어들이는지 확인할 수 있다 (업데이트: Docker-compose 시 virtual host 업데이트가 되지 않는 문제 참고).

참고한 사이트

0
0
이 글을 페이스북으로 퍼가기 이 글을 트위터로 퍼가기 이 글을 카카오스토리로 퍼가기 이 글을 밴드로 퍼가기
captcha
자동등록방지 숫자입력

기타

번호 제목 글쓴이 날짜 조회수
73 [시간] 시간과 관련한 정보가 필요하면 최고관리자 09-18 1,459
72 [Docker compose] Can not find a suitable configuration 에러 원인 최고관리자 09-15 1,483
71 [Docker] CentOS 7 에 Docker를 설치해 보자. 최고관리자 09-14 2,161
70 [소스 컴파일] 컴파일관련 용어를 살펴보자. 최고관리자 09-13 1,610
69 [PHP] 언어 최고관리자 08-18 989
68 [관심] 개발을 오래한 사람이면 공감되는 내용이 많을 것입니다. 최고관리자 08-18 806
67 [VS] code-server를 통해 어디에서든 PC환경으로 개발하자 최고관리자 08-18 775
66 [Mac] Capture Screen Image 폴더 지정 하기 최고관리자 08-02 839
65 [IntelliJ] 여러파일의 이름을 한번에 바꾸는 Plugin 최고관리자 07-29 1,636
64 [모니터] 용도/크기/화질 천차만별! 나한테 맞는 모니터 고르는 법! 최고관리자 07-23 786
63 윈도우 hosts 파일 수정 최고관리자 05-09 977
62 [HTML] image map을 활용한 영역클릭 최고관리자 04-27 879
61 [Linux] CentOS 7에서의 gcc upgrade 최고관리자 08-28 2,773
60 [Linux] wkhtmltopdf error가 해결되지 않을 경우 확인 최고관리자 08-27 1,567
59 [Linux] CentOS7에서 HTML to PDF 실행시 Error 최고관리자 08-27 2,332
58 [Linux] Html to PDF 설치하기 최고관리자 08-27 1,645
57 [Linus] RPM 패키지 관리를 위한 DNF 명령 최고관리자 08-27 1,234
56 [Intellij] 노란줄 Found duplicated code in 해결방법 최고관리자 08-26 1,459
55 [Linux] CentOS sendmail 설치 및 테스트 최고관리자 08-18 3,038
54 [Linux] Console에서 메일보내기 테스트시 EOF(EOT)입력은 어떻게?? 최고관리자 08-18 1,451