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은 에이전트를 서버에 연결하도록 지정합니다.
- 호스트 Docker 소켓에 접근할 수 있도록
Starting the stack
docker compose up -d
-d옵션은 컨테이너를 백그라운드에서 실행합니다.- 서버는 . 에서 접근할 수 있습니다.
- 에이전트 컨테이너는 자동으로 서버에 연결을 시도합니다.
Initial web setup
- 브라우저에서 를 엽니다.
- 마법사를 따라 진행합니다:
- 데이터 디렉터리(
./data에 매핑됨)를 확인합니다. - 데이터베이스를 선택합니다(테스트용이라면 내부 DB가 충분합니다).
- 라이선스를 수락합니다.
- 초기 관리자 계정을 생성합니다.
- 데이터 디렉터리(
Authorizing the agent
- TeamCity UI에서 Agents → Unauthorized 로 이동합니다.
- 에이전트 옆의 Authorize 버튼을 클릭합니다.
이제 에이전트가 Connected 및 Compatible 상태로 표시됩니다.
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에서:
- Docker build step을 추가합니다.
- 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 데몬을 이용해 이미지를 빌드할 수 있음.
- 데이터와 로그가 재시작 간에 지속되며, 추가 에이전트를 통해 확장이 가능함.
- 테스트, 개발 및 소규모 운영 환경에 이상적임.