Docker Compose 기반, 격리된 개발 환경을 손쉽게!
Coasts는 Git worktree를 기반으로 여러 Docker Compose 환경을 격리하여 실행할 수 있도록 지원한다.
Coastfile을 통해 프로젝트의 런타임을 정의하고, DinD(Docker-in-Docker)를 활용하여 각 환경을 독립적으로 관리한다.
macOS를 우선 지원하며, Caddy를 활용한 로컬 HTTPS 설정을 제공한다.
커뮤니티에서는 Docker의 Mac 환경 문제 해결 및 MCP 서버 배포에 대한 활용 가능성을 언급한다.
DinD(Docker-in-Docker) 기반 격리 환경
Coasts는 각 개발 환경을 위해 DinD(Docker-in-Docker)를 활용하여 데이터 격리 아키텍처(Data Isolation Architecture)를 구현한다. 이는 각 컨테이너가 독립적인 Docker 데몬을 가지도록 하여, 서로 간섭 없이 개발 환경을 운영할 수 있게 한다. DinD는 이미지 캐싱, 네트워크 네임스페이스(Network Namespace), 빌드 레이어(Build Layer)를 제공하지만, 오버헤드가 발생할 수 있다는 단점이 있다. Coasts는 Podman 런타임 지원을 통해 이러한 오버헤드를 줄이려는 노력을 하고 있다. 200MB 정도의 오버헤드가 발생할 수 있다.
Worktree 기반 환경 관리
Coasts는 Git worktree를 활용하여 개발 환경을 관리한다. `coast assign` 명령어를 통해 특정 worktree에 coast 인스턴스를 할당하고, `coast checkout` 명령어를 통해 해당 인스턴스의 포트를 호스트 머신에 바인딩할 수 있다. Worktree 전환 시, `/workspace` 디렉토리를 `umount`하고, 새로운 worktree의 루트 디렉토리를 `mount --bind`하여 변경 사항을 반영한다. 이러한 방식은 개발자가 코드 변경 사항을 격리된 환경에서 테스트하고, 여러 worktree 간의 전환을 용이하게 한다.
포트 관리 및 공유 서비스
Coasts는 각 coast 인스턴스에 동적 포트를 할당하여 호스트 머신에서 접근할 수 있도록 한다. `Coastfile`에서 노출할 포트를 정의하고, `coast checkout` 명령어를 통해 해당 포트를 호스트에 바인딩한다. 또한, 공유 서비스(Shared Services) 기능을 통해, 격리된 환경에서 중복 실행될 필요가 없는 서비스를 호스트 Docker 데몬에서 실행하여 리소스를 절약할 수 있다. 예를 들어, PostgreSQL이나 Redis와 같은 서비스를 공유 서비스로 설정할 수 있다.
macOS 환경에서의 Caddy 활용
Coasts는 macOS 환경에서 Caddy를 사용하여 로컬 HTTPS 설정을 지원한다. 각 Coast 설치마다 하나의 로컬 Caddy 루트 인증 기관(Root CA)을 재사용하여, 워크스페이스를 다시 생성해도 동일한 인증서를 사용할 수 있도록 한다. Caddy를 통해 HTTPS 설정을 간소화하고, 개발 환경에서 보안 연결을 쉽게 구성할 수 있도록 돕는다. `coast cert info` 및 `coast cert export` 명령어를 통해 인증서 정보를 확인하고, 필요한 경우 내보낼 수 있다.