Docker 앱이 내부적으로 무슨 일을 하는지 알고 싶으신가요? 컨테이너의 모든 동작을 기록하는 창인 로그에 대해 알아보겠습니다. 로그는 문제를 진단하는 데 매우 유용합니다. 시작하기 전에 Docker와 Docker Compose가 무엇인지 간단히 살펴보겠습니다.
Docker를 사용하면 애플리케이션을 작은 컨테이너로 패키징하여, 별도의 의존성 없이 대부분의 운영체제에서 실행할 수 있습니다. 앱을 컨테이너라는 작은 상자에 담아두면, 어디서든 동일하게 동작하는 방식입니다. Docker Compose를 배우기 전에 컨테이너의 개념을 이해하는 것이 중요합니다. 먼저 다음 블로그 글을 읽어보시길 권장합니다: 컨테이너화의 장점.
Docker Compose는 Docker에 포함되어 있으며, 여러 컨테이너 기반 애플리케이션의 서비스, 네트워크, 스토리지를 연결해 개발을 단순화합니다. Docker 컨테이너 로그와 Docker Compose 로깅을 통해 개발자는 각 컨테이너의 동작을 파악할 수 있습니다.
Docker Compose 로그가 궁금하신가요? 잘 찾아오셨습니다. 이 블로그에서는 Docker Compose 로그의 기본 개념부터 심화 내용까지 다룹니다. Docker Compose를 프로젝트에 효과적으로 활용하는 방법을 알아보세요.
Docker Compose 로그의 중요성
어느 개발자가 Docker로 앱을 배포했지만 로그 설정을 건너뛰었다고 가정해봅시다. 처음에는 별문제 없어 보입니다. 하지만 곧 사용자들이 오류를 발견하고 앱이 느려지기 시작합니다. Docker 로그가 없으면 개발자는 Docker 컨테이너 내부에서 무슨 일이 벌어졌는지 파악할 수 없습니다. Docker Compose 로그는 이러한 컨테이너의 상세 기록입니다. 발생하는 모든 이벤트를 기록하기 때문에, 문제를 추적하고 해결하는 데 필수적입니다.
개발자나 시스템 관리자라면 멀티 체인 애플리케이션의 내부와 서비스 간에 어떤 일이 일어나는지 파악해야 합니다. 바로 이 지점에서 Docker Compose 로그가 유용한 도구로 활용됩니다. 이 로그가 왜 필요한지 살펴보겠습니다.
-
문제 해결 및 디버깅
애플리케이션이 정상적으로 동작하지 않거나 오류가 발생하면 docker logs를 먼저 확인하세요. Docker 로그는 문제를 추적할 때 가장 먼저 참고할 수 있는 자료입니다. docker logs를 분석하면 코드 버그, 잘못된 설정, 리소스 문제 등 근본 원인을 정확히 파악할 수 있습니다.
-
애플리케이션 상태 모니터링
애플리케이션 로그를 정기적으로 모니터링하면 서비스의 전반적인 상태를 파악할 수 있습니다. 로그에는 반복되는 오류나 응답 지연 같은 초기 경고 신호가 나타납니다. 이러한 패턴을 일찍 발견하면 잠재적인 문제를 사전에 예방할 수 있습니다.
-
감사 및 컴플라이언스
특정 기준을 준수해야 하는 애플리케이션의 경우, docker logs는 애플리케이션이 지침을 따르고 있는지 보여주는 첫 번째 근거 자료가 됩니다. 또한 인가된 활동과 비인가 활동을 모니터링하는 데도 중요한 역할을 합니다.
-
최적화
로그는 성능 데이터를 제공하여 소프트웨어 최적화에 유용한 자료가 됩니다. 예를 들어 개발자는 느린 쿼리, 비효율적인 코드 경로, 활용되지 않는 리소스 등을 식별할 수 있습니다.
Docker 레시피 작성: 웹 서버 배포하기
이 섹션에서는 Docker 레시피를 함께 만들어보겠습니다. Docker Compose 로그를 살펴보기 위해 먼저 실습 환경을 구성해야 합니다. 이를 위해 웹 서버를 배포해봅시다. Dockerfile을 생성하려면, VPS의 원하는 폴더에서 다음 명령어를 실행하세요. nano Dockerfile 아래 내용을 입력한 후 저장하세요:
FROM nginx:alpine RUN rm /usr/share/nginx/html/index.html EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]
각 코드 라인은 어떤 역할을 하나요?
- 먼저 가벼운 베이스 이미지로 시작합니다, nginx:alpine.
- 다음으로 Nginx의 기본 웰컴 페이지를 삭제합니다.
- 그리고 웹 서버가 다음 포트에서 수신 대기하도록 설정합니다. 80.
- 마지막으로, 다음 명령어로 Nginx 서버를 실행합니다. CMD.
이제 Docker 파일이 준비되었으니, 다음 단계인 Docker Compose 파일 작성으로 넘어가겠습니다. 파일 구조는 다음과 같습니다. docker-compose.yml 파일:
version: '3.8' services: web: build: . ports: - "8080:80" volumes: - ./index.html:/usr/share/nginx/html/index.html
각 부분을 하나씩 살펴보겠습니다.
- 버전을 사용 중입니다 3.8.
- 다음 줄에서 서비스 이름을 "web“.
- 그런 다음, Docker가 현재 폴더를 기준으로 웹 서버를 빌드하도록 지정합니다.
- 호스트의 8080 포트를 컨테이너의 80 포트에 연결하여 웹 서버가 통신할 수 있도록 합니다.
- 마지막으로, volumes 설정은 index.html 호스트 디스크의 경로를 컨테이너에 마운트합니다. 이후 원하는 내용으로 index.html 파일을 만들어 해당 경로에 배치하면 됩니다. Dockerfile 및 docker-compose.yml 파일이 존재합니다.
이제 Docker Compose로 Docker 컨테이너를 실행할 차례입니다. 아래 명령어를 실행하세요. docker-compose up.

명령어를 실행하면, docker-compose up Docker가 인터넷에서 필요한 이미지를 다운로드하고, 설정 파일에 정의된 대로 구성합니다.
웹 서버가 정상적으로 실행 중인지 확인하려면 브라우저를 열고 VPS의 IP 주소를 입력한 뒤 8080 포트로 접속하세요.

참고로, docker-compose up -d 옵션을 사용하면 컨테이너를 백그라운드에서 실행할 수 있습니다.
Docker Compose로 로그 확인하기
웹 서버가 준비되어 정상 실행 중입니다. 이미 로그를 생성하며 나중에 활용할 수 있도록 저장하고 있습니다. Docker Compose 로그는 문제 해결과 모니터링에 꼭 필요합니다. 이 로그를 확인하려면 docker-compose 로그 명령어를 사용하세요. 설정 파일이 있는 폴더로 이동한 뒤 해당 명령어를 실행하세요.

로그가 실시간으로 출력되는 것을 확인하고 싶다면, 이전 명령어 끝에 -f를 추가하여 실행하세요. docker-compose logs -f.

일부 Docker 기반 애플리케이션은 로그에 타임스탬프를 포함하지 않을 수 있습니다. 이 경우 docker-compose logs -t 를 사용하면 각 로그 줄에 기록 시간을 추가할 수 있습니다.

Docker 로그는 최근 항목만 표시할 수도 있습니다. 이를 위해 docker-compose logs --tail 10 을 사용하면 최근 10개의 로그 항목을 확인할 수 있습니다. compose logs tail과 마찬가지로 docker logs tail은 전체 로그 기록을 스크롤하지 않고 최근 활동을 빠르게 확인하고 싶을 때 특히 유용합니다.

Docker Compose의 주요 목적은 멀티 컨테이너 애플리케이션을 구성하는 것입니다. 따라서 특정 서비스의 로그만 확인해야 할 경우가 있습니다. 이때는 docker-compose logs -f SERVICE, 기억하면서 바꾸기 SERVICE 에서 SERVICE 자리에 실제 서비스 이름을 입력하세요.

Docker 로깅
Docker 생태계는 특히 대규모 환경에서 통합 애플리케이션을 다룰 때 더욱 복잡해질 수 있습니다. 이미 알고 있듯이 각 컨테이너는 로그를 생성합니다. 이 로그를 수신, 전달, 저장하는 역할을 담당하는 것이 바로 Logging Driver입니다. 기본적으로 Docker는 Logging Driver에 JSON 파일을 사용하지만, 각각 장단점이 있는 다양한 드라이버도 지원합니다.
로그가 문제 해결과 시스템 성능 개선 등 다양한 영역에서 중요하다는 점은 누구나 동의합니다. 아래에서는 컨테이너 로그 활용의 두 가지 핵심 측면을 다룹니다.
- 모니터링: 로그의 주요 목적은 모니터링입니다. 로그를 통해 컨테이너화된 애플리케이션의 전반적인 상태를 파악할 수 있습니다.
- 문제 해결: 문제가 발생했을 때 로그는 애플리케이션의 오류를 감지하는 데 도움이 됩니다.
docker logs와 docker compose logs는 지속적으로 생성되므로 VPS 스토리지를 모두 채울 수 있습니다. 따라서 Log Rotation Policy라는 디스크 공간 관리 전략이 필요합니다. 이 정책을 설정하려면 docker-compose.yml 파일로 돌아가 여세요. 그런 다음 아래 설정으로 logging 섹션을 추가하세요.
version: '3.8' services: web: build: . ports: - "8080:80" volumes: - ./index.htm:/usr/share/nginx/html/index.htm logging: driver: json-file options: max-size: "200k" max-file: "10"
필요에 따라 max-size 및 max-file 을 언제든지 조정할 수 있습니다.
Docker 로그 전달 방식
고급 환경에서는 기본 JSON 드라이버 대신 Syslog, fluentd 등 다른 로깅 모델을 선택하는 엔지니어도 있습니다. 다만 JSON-file 드라이버는 대부분의 로깅 시나리오에 적합하므로, 기본 모드에서 벗어날 필요가 없는 경우도 많습니다.
애플리케이션 아키텍처나 조직 요건에 따라 Log Aggregator라고 불리는 중앙 로깅 솔루션을 사용해야 할 수도 있습니다. 이러한 서비스들은 Elasticsearch, Logstash, Kibana 등이 있으며, 다양한 소스에서 로그를 수집해 단일 중앙 위치에서 통합, 저장, 분석하도록 설계되었습니다.
반면 로그는 더 비용 효율적인 스토리지 솔루션에 저장하는 것이 좋습니다. VPS가 고속의 고가 스토리지를 사용하는 경우를 생각해보면, 나중에 참조할 수도 있는 로그를 저장하는 데 그런 고비용 자원을 쓰는 것은 경제적이지 않을 수 있습니다.
사용 가능한 로깅 모델은 다양하며, 각각 장단점이 있습니다. 각 모델을 신중하게 평가하고 구체적인 요구 사항에 맞는 것을 선택하는 것이 중요합니다.
저렴한 가격으로 웹사이트 호스팅이나 원격 데스크톱에 사용할 수 있는 일반 또는 프리미엄 Linux VPS를 지금 바로 이용해 보세요. Linux KVM 기반으로 효율성을 높이고, NVMe SSD 스토리지가 탑재된 고성능 하드웨어로 빠른 속도를 제공합니다.
더 보기결론
Docker Compose 로그를 이해하는 것은 Docker 애플리케이션을 효과적으로 관리하고 디버깅하는 데 핵심입니다. 로그에 접근하고 모니터링하는 방법을 익히면 문제 해결 능력이 향상되고 앱의 성능과 보안도 강화됩니다. 개발 중이든 시스템을 운영 중이든 Docker Compose 로그는 필수입니다. 컨테이너 관리를 실질적으로 효율적으로 만들어 줍니다.
자주 묻는 질문
Docker Compose 로그를 시간 기준으로 필터링하는 방법은?
Docker Compose는 시간 기준으로 로그를 직접 필터링하는 기능을 제공하지 않습니다. 하지만 로그를 grep에 파이프로 연결해 패턴 매칭으로 필터링할 수 있습니다. 예를 들어 docker-compose logs | grep "2023-04-06"을 사용하고, "2023-04-06" 자리에 원하는 날짜나 시간 패턴을 입력하면 됩니다.
Docker Compose로 시작한 컨테이너를 중지하는 방법은?
docker-compose.yml 파일이 있는 디렉토리로 이동한 후 docker-compose down 명령어를 실행하세요.
로그 파일을 수동으로 삭제하는 방법은?
docker-compose.yml 파일에서 log rotation을 설정하는 대신, /var/lib/docker/containers/<container_id>/ 경로에서 Docker JSON 로그 파일을 직접 삭제할 수 있습니다. 삭제하기 전에 docker ps -a 명령어로 Docker 컨테이너 ID를 먼저 확인하세요.
Docker 로그를 실시간으로 추적할 수 있나요?
네, 가능합니다. docker logs 명령어에 -f 또는 --follow 옵션을 함께 사용하면 됩니다. 이렇게 하면 Docker 로그를 실시간으로 확인할 수 있습니다.