도메인으로 서버에 접속시 이에 매핑되는 ip 주소로의 변환이 필요하다. 일반적인 경우 dns 서버를 통해 도메인 주소에 해당하는 ip 주소를 찾아와서 접속한다. dns 서버를 거치지 않고 로컬에서도 변환할 수 있는데, 이때 사용되는 것이 hosts 파일이다.
docker-compose 를 기반으로 서버를 구축하면서 서비스 간의 통신을 위해 hosts 에 도메인을 등록하였다. 그런데 docker 서비스를 재시작 할 때마다 hosts 파일이 초기화 되면서 매번 수정을 해주어야 하는 불편함이 있었다. 이를 해결하기 위해서 docker-compose 의 extra_hosts 옵션을 사용했다.
이 글에서는 extra_hosts 옵션을 사용하면서 찾아본 hosts 파일과 extra_hosts 등의 내용을 정리한다.
1. 도메인 주소와 ip 주소
웹 사이트에 접속하기 위해서는 사이트의 주소를 입력해야 한다. 일반적으로 사이트의 도메인 주소를 입력해서 접속한다. 서버의 실제 주소는 도메인 주소가 아닌 ip 주소이다. 이때문에 도메인 주소가 입력되는 경우 이에 대응되는 ip 주소를 찾아서 해당 주소로 접속해야 한다.
도메인 주소가 입력되는 경우 이에 대응되는 ip 주소를 찾아야 한다. 이를 위해 먼저 DNS cache 를 조회한다. 'ipconfig /displaydns' 명령어를 사용하여 dns cache를 확인할 수 있다. 그 다음 hosts.ics 파일과 조회한다. hosts.ics 파일은 인터넷 연결 공유 시 해당 시스템의 네트워크 주소를 지정하기 위해 자동으로 생성되는 파일이다. 그 다음으로 hosts 파일에 도메인 정보가 있는지 조회한다. 해당 파일들에 도메인이 등록되어 있다면 등록된 ip 주소의 서버로 접근한다. 그렇지 않은 경우, DNS 에 접근하여 주소를 조회한다. 로컬 DNS, 내부 네트워크의 DNS, 외부 네트워크의 DNS 순으로 질의하며, DNS 에서 찾은 ip 주소로 접근한다.
2. hosts 파일
hosts 파일은 위 항목에서 정리한 것과 같이 도메인 주소와 이에 대응하는 ip 주소를 등록하여 서버 주소를 조회할 때 사용된다. 파일 경로는 /etc/hosts 에 위치한다.
# Copyright (c) 1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host
# localhost name resolution is handled within DNS itself.
127.0.0.1 localhost
…
hosts 파일의 형식은 위와 같다. 한 줄에 하나씩 서버 주소 정보가 작성되어 있다. 주소 정보는 ip 주소와 도메인 주소 순서로 작성되어 있고 두 정보는 최소 하나의 공백으로 구분되어야 한다.
3. extra_hosts
docker-compose 를 사용하여 서버를 동작시키는 경우 extra_hosts 옵션을 사용하여 hosts 파일에 추가할 도메인, ip 주소를 지정할 수 있다.
아래와 같이 HOSTNAME=IP 의 형식으로 등록하면 컨테이너 내부의 /etc/hosts 파일에 등록된다.
extra_hosts:
- "somehost=162.242.195.82"
- "otherhost=50.31.209.229"
- "myhostv6=::1"
[Reference]
- https://goddaehee.tistory.com/90
- https://docs.docker.com/reference/compose-file/services/#extra_hosts
- https://whackur.tistory.com/45
[웹개발 기초] 윈도우 Hosts (호스트) 파일이란?
[웹개발 기초] 윈도우 Hosts (호스트) 파일이란? ▶ Hosts (호스트)란 무엇일까? - 호스트 이름에 대응하는 IP 주소가 저장되어 있어서 도메인 이름 시스템(DNS)에서 주소 정보를 제공받지 않고도 서버
goddaehee.tistory.com
Services top-level elements
Explore all the attributes the services top-level element can have.
docs.docker.com
윈도우와 리눅스에서의 DNS 질의 과정 및 우선순위 총정리
윈도우와 리눅스시스템에서 DNS 질의 과정과 우선순위를 총정리해봤습니다.빠트리거나 틀린 내용이 있으면 알려주세요. 인터넷 어딜 찾아봐도 한방에 정리된게 없네요.... 순서의 기준은 'spoofing
whackur.tistory.com
'Tech > Docker' 카테고리의 다른 글
[Docker] Docker Root Directory (도커 스토리지) 변경 (0) | 2023.12.14 |
---|---|
[Docker] Docker vs VM (0) | 2022.07.28 |
[Docker] Docker Compose (0) | 2021.09.05 |
[Docker] Dockerfile 개념 정리 (0) | 2021.09.04 |
[Docker] 도커 개념 정리 (0) | 2021.04.13 |