Apple M1 칩셋의 macOS 환경에서 Colima 활용하여 Testcontainers 실행하는 방법
Docker에서 Docker Desktop의 사용 약관을 변경하므로써, 대기업에서 일하는 개발자는 Docker Desktop를 더 이상 무료로 사용할 수 없게 되었다. macOS 환경에서 무료로 사용하기 위해 대체할 dirver가 필요한데 hyperkit, VirtualBox 여러 대안이 나왔지만, 아직까지는 Apple M1 칩셋의 macOS 환경에서는 사용이 쉽지 않은듯 하다.
2023년 8월 기준으로 상황은 아래와 같다.
- hyperkit : Apple M1 칩셋 환경에서 동작 안함 (homehrew로 설치를 시도하면 에러남)
- virsalbox : Apple M1 칩셋 환경에서 동작가능한 버전이 Beta임
여기서는 Docker Desktop 사용하지 않고, Colima 활용하여 Apple M1 환경에서 Testcontainers를 실행하는 가장 간단한 방법을 소개한다.
Docker 설정
먼저, Homebrew를 사용하여 docker를 설치한다.
brew install docker
Colima 설정
그리고, Homebrew를 사용하여 Colima를 설치한다.
brew install colima
그런 다음 지정된 CPU와 메모리로 Colima를 실행한다.
colima start --cpu 4 --memory 8
위 명령은 VM을 4CPU와 8GiB 메모리로 실행하고 있다.
Colima 서버는 sock 주소로 사용 가능해 졌다.
unix:///Users/${HOME}/.colima/default/docker.sock.
docker 클라이언트를 사용하여 Colima 서버에 연결할 수 있다.
docker context ls
명령어롤 사용하여 모든 컨텍스트를 확인할 수 있고, docker context use colima
명령으로 Colima로 전환할 수 있다.
% docker context ls
NAME DESCRIPTION DOCKER ENDPOINT ERROR
colima * colima unix:///Users/user/.colima/default/docker.sock
default Current DOCKER_HOST based configuration unix:///var/run/docker.sock
desktop-linux unix:///Users/user/.docker/run/docker.sock
Colima를 중지하는 방법은 아래와 같다.
colima stop
Testcontainers 설정
Apple M1
Apple M1 칩에서 macOS를 사용하는 경우에는 최소한 JNA(Java Native Acces)가 5.7.0 버전 이상으로 사용되고 있는지 확인해야 한다.
IntelliJ IDEA에서 의존성으로 아래 라이브러리가 포함되어 있는지 확인하면 된다.
혹시 버전이 낮다면 5.7.0으로 올리면 된다.
Testcontainers 환경 변수
Colima를 사용하여 Testcontainers를 실행하려면 다음 환경 변수가 필요하다.
DOCKER_HOST=unix://${HOME}/.colima/default/docker.sock
TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE=/var/run/docker.sock
TESTCONTAINERS_RYUK_DISABLED=true
이러한 환경 변수가 필요한 이유는 다음과 같다.
DOCKER_HOST
: Colima의 sock 주소를 지정한다.TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE
: 컨테이너 내부의 sock 주소를 지정한다.TESTCONTAINERS_RYUK_DISABLED
: Ryuk을 비활성화한다. 그렇지 않으면 컨테이너가 종료되지 않고, 테스트가 시간 초과할 수 있다.
Bash/Zsh 셸에서는 다음과 같이 환경 변수를 선언하여, Docker 호스트를 재정의할 수 있다.
~/.bashrc
or ~/.zshrc
export TESTCONTAINERS_DOCKER_SOCKET_OVERRIDE=/var/run/docker.sock
export DOCKER_HOST="unix://${HOME}/.colima/docker.sock"
export TESTCONTAINERS_RYUK_DISABLED=true
변경한 이후에는 환경 변경을 반영하기 위해 IntelliJ IDEA를 다시 시작해야 한다.