Seongwon Lim

[Docker] 도커를 이용하여 NTP(Chrony) 서버 구축하기 - Linux 본문

Docker

[Docker] 도커를 이용하여 NTP(Chrony) 서버 구축하기 - Linux

limsw 2024. 2. 27. 16:13
반응형

서론

이번 글에서는 서버에서 직접적인 NTP(Chrony) 서비스의 설치 없이 도커를 이용하여 NTP 서버를 구축하는 방법을 알아본다.

NTP(Network Time Protocol)

NTP는 시간 동기화 프로토콜로 서버 시간을 특정 표준 시간대로 동기화 하는 기능을 지원한다.

리눅스 서버에서는 NTP 또는 Chrony를 주로 사용하고 있으며, 둘 중 아무거나 사용해도 되지만 Chrony가 NTP의 단점을 보완하여 만들어진 서비스이므로 Chrony를 많이 사용하는 추세라고 한다.

 

해당 글에서는 NTP 개념을 알고 있다는 가정하에 작성하는 글이므로, 디테일한 개념 설명은 넘어간다.

본론

이미지는 도커 허브(Docker hub)에 있는 cturra/ntp 이미지를 이용했다.

 

 

Docker

 

hub.docker.com

먼저, 해당 이미지를 가져오고 도커 컨테이너를 실행하는 docker-compose.yml 파일을 작성했다.

version: '3'

services:
  ntp:
    image: cturra/ntp:latest
    container_name: ntp
    restart: always
    ports:
      - 123:123/udp
    environment:
      - NTP_SERVERS="time.cloudflare.com"
      - LOG_LEVEL=0
      - TZ=Asia/Seoul
  • NTP_SERVERS를 특정 표준시로 설정하면 해당 서비스는 NTP Client의 역할을 한다.
    위처럼 구성하면 도커 서비스는 time.cloudfare.com 도메인의 시간대로 동기화를 하는 것이다.
  • NTP_SERVERS를 127.127.1.0으로 설정하면 해당 서비스는 NTP Server의 역할을 한다.
    다시 말하면, 해당 서버는 로컬 시간을 유지하며 타 NTP 클라이언트에게 시간을 공유할 수 있다.

구성한 도커 컴포즈 파일을 실행하기 위해 다음 명령어를 입력한다.

// -d 옵션은 백그라운드 실행 옵션이다.
docker-compose up -d ntp

 

다음과 같은 출력이 나오면 성공적으로 도커 컨테이너를 이용한 NTP 서비스가 활성화 된 것이다.

 

정상 동작 확인하기

$ docker exec ntp chronyc sources

$ docker exec ntp chronyc tracking

$ netstat -lnup

123/udp 포트가 리스닝 상태인지 확인한다.

 

$ docker exec ntp cat /etc/chrony/chrony.conf

docker-compose.yml 파일에 설정한 NTP_SERVERS의 값이 제대로 설정되어 있는지 확인한다.

 

$ docker exec ntp date

위 명령어를 입력했을 때 설정한 Timezone에 따라 시간이 현재 시간대로 동기화되어 출력되는지 확인한다.

Comments