Apple M1 칩셋의 macOS 환경에서 Colima 활용하여 Testcontainers 실행하는 방법

Docker Desktop의 유료화에 따른 대안 방법으로 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에서 의존성으로 아래 라이브러리가 포함되어 있는지 확인하면 된다. JNA 버전

혹시 버전이 낮다면 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를 다시 시작해야 한다.




최종 수정 : 2023-08-24