[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
자동등록방지 숫자입력

기타

번호 제목 글쓴이 날짜 조회수
13 [DICOM] 정보 최고관리자 11-20 2,093
12 [개발툴] Cross Platform UART Monitor 최고관리자 11-11 1,177
11 익명화 최고관리자 11-05 1,246
10 [KT Cloud] Linux 계열 서버 Data Disk Mount -LVM 구성 최고관리자 11-03 1,557
9 [의료영상솔루션] 의료영상솔루션에서 빅데이터로 'PACS의 진화' 최고관리자 10-26 1,339
8 [Firmware] STM8 Linker: text size overflow 최고관리자 10-26 1,599
7 [STM8] ST Visual Studio 프로젝트 셋팅 최고관리자 10-22 1,507
6 [Firmware] SMT32 HTTP Client 코드 작성을 위한 lwIP Library 최고관리자 10-15 2,638
5 [Firmware] STMF4 시리즈 부트로더, iap 개발 팁 최고관리자 10-15 1,599
4 [특허] 한국, 미국, 일본, 유럽연합, 중국의 디자인보호제도 비교 최고관리자 10-14 1,850
3 [주식] 현재가 창에서 매도. 매수 총잔량으로 파악 하는법 상승시점 파악: 매수시점 최고관리자 09-09 13,129
2 [리눅스] BASH 쉘 설정 최고관리자 09-08 1,844
1 가비아 - Google 도메인 소유자 확인 최고관리자 08-25 1,239