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

기타

번호 제목 글쓴이 날짜 조회수
33 [docker] Docker Compose 커맨드 사용법 최고관리자 01-14 1,204
32 [docke] 도커 컴포즈 설치 및 사용 최고관리자 01-14 1,189
31 [docker] CentOS7 docker로 설치하기. 최고관리자 01-14 1,091
30 [docker] Docker 를 사용한 가상 호스트 (Virtual Host) 구축 및 서브 도메인 연결 최고관리자 01-13 3,556
29 [docker] 네트워크 이해하기. 최고관리자 01-13 1,157
28 [C++] 장치관리자 정보 최고관리자 12-28 2,324
27 [C#] 장치관리자 목록 추출하기 최고관리자 12-17 2,550
26 [모니터링] 그라파이트와 그라파나로 메트릭스 모니터링 시스템 구축하기 최고관리자 12-02 1,882
25 [docker] 도커 컴포즈를 활용하여 완벽한 개발 환경 구성하기 최고관리자 12-02 1,238
24 [docker] MariaDB + 로컬에 데이터저장소 연결 최고관리자 12-02 1,209
23 [docker] mysql 설치 및 활용 최고관리자 12-02 11,824
22 [네트워크] KT HomeHub SSH접속 설정 최고관리자 11-30 1,163
21 [Linux] 리눅스 포트 명령어 최고관리자 11-30 2,911
20 [Ubuntu] Google Chrome 웹브라우저에서 크롬원격접속 설정오류 고치기 최고관리자 11-24 3,290
19 [Ubuntu] deb, rpm 파일 설치하기 최고관리자 11-24 1,927
18 [Ubuntu] ifconfig가 안될 때 최고관리자 11-24 1,619
17 [Ubuntu] 영문버젼에 한글입력기 설치 최고관리자 11-24 2,233
16 [Ubuntu] Remote Desktop 최고관리자 11-24 1,219
15 [Ubuntu] NVDIA Graphic Driver Install 최고관리자 11-24 1,218
14 [SSL 인증서] 종류와 가격 최고관리자 11-24 1,164