Docker Compose를 사용해 Docker‑Capable Agent와 함께 TeamCity 실행

발행: (2025년 12월 18일 오후 06:00 GMT+9)
5 min read
원문: Dev.to

Source: Dev.to

Prerequisites

  • Docker가 설치되어 실행 중이어야 함
  • Docker Compose가 설치되어 있어야 함
  • 호스트에서 Docker 명령을 실행할 수 있는 충분한 권한
  • 터미널/명령줄 인터페이스

Directory layout

mkdir -p teamcity/{data,logs,agent}
cd teamcity

디렉터리 구조는 다음과 같습니다:

teamcity/
├── docker-compose.yml
├── data/       # 서버 영구 데이터
├── logs/       # TeamCity 로그
└── agent/      # 에이전트 설정

docker-compose.yml

version: "3.8"

services:
  teamcity-server:
    image: jetbrains/teamcity-server:2023.11.4
    container_name: teamcity-server
    ports:
      - "8111:8111"
    volumes:
      - ./data:/data/teamcity_server/datadir
      - ./logs:/opt/teamcity/logs
    restart: unless-stopped

  teamcity-agent:
    image: jetbrains/teamcity-agent:2023.11.4
    container_name: teamcity-agent
    user: root
    environment:
      - SERVER_URL=http://teamcity-server:8111
    volumes:
      - ./agent:/data/teamcity_agent/conf
      - /var/run/docker.sock:/var/run/docker.sock
    depends_on:
      - teamcity-server
    restart: unless-stopped

Explanation

  • Server volumes

    • ./data는 TeamCity 서버 데이터와 빌드 히스토리를 저장합니다.
    • ./logs는 컨테이너 재시작 시에도 유지되는 서버 로그를 보관합니다.
  • Agent setup

    • 호스트 Docker 소켓에 접근할 수 있도록 root 사용자로 실행합니다.
    • /var/run/docker.sock를 마운트하여 에이전트가 호스트 Docker 데몬에 접근할 수 있게 합니다.
    • SERVER_URL은 에이전트를 서버에 연결하도록 지정합니다.

Starting the stack

docker compose up -d
  • -d 옵션은 컨테이너를 백그라운드에서 실행합니다.
  • 서버는 . 에서 접근할 수 있습니다.
  • 에이전트 컨테이너는 자동으로 서버에 연결을 시도합니다.

Initial web setup

  1. 브라우저에서 를 엽니다.
  2. 마법사를 따라 진행합니다:
    • 데이터 디렉터리(./data에 매핑됨)를 확인합니다.
    • 데이터베이스를 선택합니다(테스트용이라면 내부 DB가 충분합니다).
    • 라이선스를 수락합니다.
    • 초기 관리자 계정을 생성합니다.

Authorizing the agent

  1. TeamCity UI에서 Agents → Unauthorized 로 이동합니다.
  2. 에이전트 옆의 Authorize 버튼을 클릭합니다.

이제 에이전트가 ConnectedCompatible 상태로 표시됩니다.

Verify Docker access inside the agent

docker exec -it teamcity-agent docker version

Docker 클라이언트와 서버 버전이 모두 표시되어야 하며, 이는 에이전트가 Docker 이미지를 빌드할 수 있음을 확인시켜 줍니다.

Building Docker images

명령줄 또는 Docker runner 빌드 스텝을 사용할 수 있습니다. 예시:

docker build -t my-app:%build.number% .
docker push my-app:%build.number%

UI에서:

  1. Docker build step을 추가합니다.
  2. Dockerfile 경로와 이미지 이름을 설정합니다.

TeamCity는 에이전트의 Docker 접근 권한을 사용해 이미지를 빌드하고 푸시합니다.

Best practices

  • /data 폴더는 빠르고 영구적인 스토리지에 두세요.
  • TeamCity 서버 데이터를 정기적으로 백업하세요.
  • TeamCity 서버와 Docker 소켓에 대한 접근을 제한하세요; 에이전트를 root로 실행하면 호스트 Docker에 대한 전체 제어 권한을 얻게 됩니다.
  • 운영 환경에서는 격리를 강화하기 위해 Docker‑in‑Docker 설정이나 원격 Docker 호스트 사용을 고려하세요.

Stopping and restarting

docker compose down          # 중지
docker compose up -d         # 시작 (에이전트가 자동으로 재연결)

Summary

  • Docker 안에서 완전하게 동작하는 TeamCity 서버.
  • Docker‑capable TeamCity 에이전트가 호스트 Docker 데몬을 이용해 이미지를 빌드할 수 있음.
  • 데이터와 로그가 재시작 간에 지속되며, 추가 에이전트를 통해 확장이 가능함.
  • 테스트, 개발 및 소규모 운영 환경에 이상적임.
Back to Blog

관련 글

더 보기 »