M 시리즈 칩 맥에서 도커 데스크톱을 설치하고 컨테이너 이미지의 아키텍처를 확인하는 순서를 안내합니다. 이어서 컴포즈로 MySQL, Redis, 웹 프로젝트를 구성하고 접속, 상태, 데이터 보존을 점검하는 방법을 다룹니다.
판단: 적합합니다. M 시리즈 칩 맥에서도 도커 데스크톱으로 컨테이너를 실행하고, 컴포즈로 MySQL·Redis·웹 프로젝트를 함께 구성할 수 있습니다. 시작 전에 애플 실리콘용 설치 조건과 이미지의 arm64 지원 여부를 확인하고, 포트·환경 변수·데이터 볼륨을 올바르게 연결해야 합니다.
이 글은 M 시리즈 칩 맥에서 처음 개발 환경을 만드는 개발자에게 적합합니다. MySQL과 Redis를 웹 프로젝트와 함께 실행하려는 개발자, 로컬과 원격 맥 중 어떤 환경이 맞을지 살피는 팀도 따라 할 수 있습니다.
설치 전 확인할 항목
맥에서 도커를 실행할 때는 리눅스 서버에 도커 엔진을 직접 설치하는 방식과 다릅니다. 도커 데스크톱은 맥에서 리눅스 가상 환경을 마련해 그 안에서 컨테이너를 실행합니다. 애플의 가상화 프레임워크 안내는 맥에서 리눅스 가상 머신을 구동하는 방식을 설명합니다. 애플의 리눅스 가상 머신 안내와 도커 데스크톱 설치 문서에서 현재 맥 운영 체제 지원 조건과 설치 방법을 확인한 뒤 진행합니다.
애플 실리콘 맥에서는 이미지 아키텍처도 확인해야 합니다. 이미지가 arm64를 제공하면 해당 아키텍처로 실행할 수 있습니다. 지원하지 않는 이미지를 만났을 때 플랫폼 옵션부터 바꾸지 말고, 이미지 제공자의 지원 정보와 매니페스트를 먼저 확인합니다. 도커의 다중 플랫폼 이미지 설명에서 아키텍처 표기를 확인할 수 있습니다.
이 실습에서 확인할 결과는 세 가지입니다. 도커 엔진이 실행됩니다. MySQL과 Redis가 웹 앱에서 연결됩니다. 웹 앱이 맥 브라우저에서 열리고, 데이터 볼륨을 사용하면 컨테이너를 다시 만들어도 저장 데이터가 남습니다.
도커 데스크톱 설치와 엔진 확인
도커 공식 설치 문서에서 애플 실리콘용 설치 파일과 현재 운영 체제의 지원 조건을 확인합니다. 설치 파일을 내려받고 앱을 설치한 다음, 처음 실행할 때 나타나는 권한 요청을 검토해 승인합니다. 데스크톱 앱에서 엔진이 실행 중인지 확인한 뒤 터미널을 엽니다.
docker version
docker compose version
docker run --rm hello-world
docker version에는 클라이언트와 서버 정보가 함께 표시되어야 합니다. 클라이언트 정보만 나오거나 엔진 연결 오류가 발생하면 도커 데스크톱의 실행 상태부터 확인합니다. docker compose version은 컴포즈 명령을 사용할 수 있는지 검사합니다. 마지막 명령은 테스트 컨테이너를 실행하고 종료합니다. 완료 메시지를 확인하면 이미지 내려받기와 컨테이너 실행 경로를 기본 수준에서 점검한 것입니다.
이미지의 지원 아키텍처는 내려받기 전에 다음처럼 확인할 수 있습니다.
docker buildx imagetools inspect mysql:8.4
결과의 플랫폼 항목에서 linux/arm64 지원 여부를 확인합니다. 내려받은 이미지의 로컬 아키텍처는 다음 명령으로 살핍니다.
docker image inspect mysql:8.4 --format '{{.Os}}/{{.Architecture}}'
이미지 이름 뒤의 태그는 사용할 이미지 버전을 정하는 값입니다. 이 예시의 MySQL 이미지 정보는 공식 이미지 안내와 MySQL 도커 시작 문서를 기준으로 확인합니다. Redis 이미지도 공식 이미지 안내에서 지원 정보를 확인합니다. 실행 로그에 아키텍처 오류가 보이면 로그와 이미지 매니페스트를 대조하고, 확인 전에는 임의로 플랫폼을 강제하지 않습니다.
컴포즈로 데이터베이스와 웹 앱 구성
프로젝트 루트에 다음 예시를 compose.yaml로 저장합니다. mysql:8.4와 redis:7은 이미지 태그입니다. ./web에는 맥에서 개발 중인 웹 앱이 있어야 하며, 앱은 컨테이너 안에서 8080 포트를 열도록 설정합니다. 데이터베이스 연결 정보는 예시 앱의 설정과 맞춰야 합니다.
services:
mysql:
image: mysql:8.4
environment:
MYSQL_ROOT_PASSWORD: dev_only_change_me
MYSQL_DATABASE: appdb
MYSQL_USER: appuser
MYSQL_PASSWORD: dev_only_change_me
ports:
- "3306:3306"
volumes:
- mysql_data:/var/lib/mysql
healthcheck:
test:
[
"CMD-SHELL",
"mysqladmin ping -h 127.0.0.1 -uroot -p\"$$MYSQL_ROOT_PASSWORD\" --silent"
]
redis:
image: redis:7
command: ["redis-server", "--appendonly", "yes"]
ports:
- "6379:6379"
volumes:
- redis_data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
web:
build: ./web
environment:
DB_HOST: mysql
DB_PORT: "3306"
DB_NAME: appdb
DB_USER: appuser
DB_PASSWORD: dev_only_change_me
REDIS_HOST: redis
REDIS_PORT: "6379"
ports:
- "8080:8080"
depends_on:
mysql:
condition: service_healthy
redis:
condition: service_healthy
volumes:
mysql_data:
redis_data:
이 설정은 개발용 예시입니다. dev_only_change_me는 문서의 자리 표시자일 뿐이며 실제 서비스나 운영 환경에서 사용하면 안 됩니다. 운영에 필요한 비밀 값은 안전한 별도 관리 방식을 적용해야 합니다.
컴포즈는 서비스 이름을 기본 네트워크의 주소로 사용할 수 있습니다. 따라서 웹 컨테이너의 데이터베이스 주소는 localhost가 아니라 mysql, Redis 주소는 redis입니다. ports는 맥과 컨테이너 사이의 접근 경로를 지정합니다. volumes는 컨테이너 파일 시스템과 별도로 데이터를 보존하도록 구성합니다. 서비스, 네트워크, 볼륨의 동작은 컴포즈 서비스 설정 문서에서 확인할 수 있습니다.
depends_on은 웹 서비스가 데이터베이스와 Redis보다 먼저 시작되지 않도록 의존 관계를 표현합니다. service_healthy 조건을 쓰면 대상 서비스의 상태 확인이 통과한 뒤 의존 서비스가 시작됩니다. 다만 앱 자체의 연결 재시도까지 대신하지는 않으므로, 웹 앱에서도 연결 실패를 처리하도록 구성합니다. 자세한 동작은 컴포즈 시작 순서와 상태 확인 안내를 참고합니다.
실행, 접속, 데이터 보존 확인
프로젝트 루트에서 서비스를 시작합니다.
docker compose up -d --build
docker compose ps
docker compose logs --tail=50 mysql redis web
컨테이너 상태를 확인하고, 시작에 실패한 서비스가 있으면 로그를 먼저 읽습니다. 서비스가 실행 중이어도 앱 연결이 성공했다는 뜻은 아닙니다. 아래처럼 웹 화면과 각 데이터 저장소를 따로 점검합니다.
curl -i http://localhost:8080
docker compose exec mysql mysql -uappuser -pdev_only_change_me appdb
docker compose exec redis redis-cli SET compose-check ok
docker compose exec redis redis-cli GET compose-check
웹 앱은 브라우저에서 http://localhost:8080으로 엽니다. 앱이 실행되는 컨테이너 안에서는 데이터베이스 주소를 서비스 이름으로 사용합니다. 반대로 맥에서 실행하는 도구는 포트 매핑을 통해 localhost로 접근합니다. 도커 데스크톱의 맥 네트워크 동작과 포트 전달은 공식 네트워킹 안내를 참고합니다. 위의 포트 예시는 MySQL과 Redis의 공식 이미지 설정에 맞춘 값이며, 앱 포트는 프로젝트의 실제 수신 포트와 일치시켜야 합니다.
MySQL 명령은 데이터베이스에 로그인할 수 있는지 확인합니다. Redis 명령은 값을 기록한 뒤 되읽어 연결과 기본 쓰기 동작을 살핍니다. 명령에 인증 정보가 포함되므로 셸 기록과 공유 환경에 남지 않도록 주의합니다.
데이터 보존은 볼륨 설정으로 확인합니다. Redis에 값을 기록한 상태에서 서비스를 내리고 다시 올립니다.
docker compose down
docker compose up -d
docker compose exec redis redis-cli GET compose-check
예시 설정은 docker compose down 뒤에도 이름 있는 볼륨을 삭제하지 않으므로 Redis 데이터를 다시 읽을 수 있습니다. docker compose down -v는 볼륨까지 제거하므로 개발 데이터도 사라질 수 있습니다. MySQL도 mysql_data 볼륨을 사용합니다. 데이터가 남아야 하는 환경에서는 볼륨을 제거하는 명령을 실행하기 전에 대상과 백업 여부를 확인합니다.
자주 묻는 내용
M 시리즈 칩 맥에 도커 데스크톱을 설치한 뒤 무엇을 확인하나요?
공식 설치 안내에서 애플 실리콘용 설치 방법과 맥 운영 체제 지원 조건을 먼저 확인합니다. 설치 후 도커 데스크톱에서 엔진이 실행 중인지 살피고, 터미널에서 클라이언트와 서버 정보를 확인합니다. 간단한 컨테이너까지 실행하고 종료해 보면 앱 설치, 엔진 연결, 컨테이너 실행을 각각 점검할 수 있습니다.
컴포즈에서 웹 앱의 MySQL과 Redis 연결 주소는 무엇인가요?
컴포즈 네트워크 안의 웹 컨테이너는 mysql과 redis라는 서비스 이름으로 각각 연결합니다. 컨테이너 안에서 localhost를 쓰면 웹 컨테이너 자신을 가리키므로 데이터베이스 주소로 적합하지 않습니다. 맥의 브라우저나 별도 도구에서는 포트가 공개된 경우 localhost와 설정한 호스트 포트를 사용합니다.
이미지 아키텍처가 애플 실리콘과 맞는지 어떻게 확인하나요?
실행하기 전에 이미지 제공자의 공식 안내나 매니페스트에서 arm64 지원 여부를 확인합니다. 내려받은 뒤에는 docker image inspect로 로컬 이미지의 운영 체제와 아키텍처를 볼 수 있습니다. 컨테이너 시작이 실패하면 상태와 로그도 함께 확인합니다. 공식 지원이 확인되기 전에는 플랫폼을 강제하는 옵션으로 오류를 가리지 않습니다.
웹 프로젝트를 데이터베이스와 연결할 때 무엇을 맞춰야 하나요?
웹 앱의 환경 변수에서 데이터베이스 이름, 사용자, 비밀번호와 서비스 호스트를 컴포즈 설정과 일치시킵니다. 앱은 컨테이너 안에서 mysql과 redis를 호스트로 사용합니다. 상태 확인이 통과했는지 살핀 다음 웹 화면을 열고, MySQL 질의와 Redis 쓰기·읽기를 별도로 시험합니다. 운영 비밀번호를 예시 값으로 두지 않습니다.
오류 확인과 선택 기준
아키텍처 오류는 이미지 매니페스트와 컨테이너 로그를 함께 확인합니다. 포트 충돌은 docker compose ps와 도커 데스크톱의 포트 오류로 점검하고, 이미 다른 앱이 사용 중이라면 호스트 쪽 포트만 바꿉니다. 변경한 뒤에는 브라우저나 클라이언트도 새 포트로 접속해야 합니다.
환경 변수 오류는 docker compose config로 컴포즈 구성이 해석되는지 확인한 다음, 앱과 데이터베이스가 같은 데이터베이스 이름과 인증 정보를 쓰는지 대조합니다. 시작 순서나 상태 확인이 문제라면 docker compose ps에서 상태를 보고, 해당 서비스 로그에서 초기화 오류를 찾습니다. 데이터가 사라졌다면 볼륨 이름과 실행한 종료 명령을 확인합니다. 볼륨이 설정되어 있지 않거나 직접 제거했다면 컨테이너를 다시 만드는 것만으로 데이터를 복구할 수 없습니다.
| 선택 | 적합한 경우 | 먼저 확인할 점 |
|---|---|---|
| 로컬 맥에서 도커 데스크톱 실행 | 개발 중 빠르게 코드를 바꾸고 로컬 도구와 함께 시험할 때 | 맥이 실행 중이어야 하는지, 이미지가 arm64를 지원하는지 확인합니다 |
| 원격 맥 환경 검토 | 로컬 맥을 계속 켜 두기 어렵거나 원격 개발 접속이 필요한 경우 | 필요한 접속 방식과 실제 제공되는 환경 조건을 서비스 안내에서 확인합니다 |
| 로컬 컨테이너를 운영 환경으로 사용 | 권장하지 않습니다 | 개발용 비밀 값과 설정을 운영에 그대로 옮기지 말고 운영 배포 요구를 별도로 검토합니다 |
아래 항목을 모두 확인하면 로컬 개발용 구성이 갖춰진 것입니다.
- [ ] 도커 데스크톱에서 엔진이 실행 중이며
docker version에 서버 정보가 나옵니다. - [ ] MySQL과 Redis 이미지의 아키텍처 지원을 공식 안내나 매니페스트에서 확인했습니다.
- [ ]
docker compose ps에서 서비스 상태를 확인하고, 오류가 있으면 로그를 검토했습니다. - [ ] 웹 앱에서 서비스 이름으로 MySQL과 Redis에 연결했습니다.
- [ ] 맥에서 설정한 포트로 웹 앱에 접속하고 데이터베이스 연결을 확인했습니다.
- [ ] 데이터 볼륨을 지정하고, 컨테이너를 다시 만든 뒤 데이터가 남는지 시험했습니다.
- [ ] 예시 비밀번호를 교체하고 개발 환경과 운영 환경의 설정을 분리했습니다.
| 구성 항목 | 예시에서 맡는 역할 | 점검 방법 |
|---|---|---|
mysql과 redis | 컴포즈 내부 서비스 주소 | 웹 앱의 호스트 설정과 서비스 이름을 대조합니다 |
3306, 6379 | 데이터베이스와 Redis의 호스트·컨테이너 포트 연결 | 공식 이미지 안내와 실제 포트 매핑을 확인합니다 |
8080 | 예시 웹 앱의 맥 접근 포트 | 앱이 컨테이너 안에서 듣는 포트와 매핑을 맞춥니다 |
mysql_data, redis_data | 컨테이너를 다시 만들 때 사용할 데이터 볼륨 | 볼륨 목록과 재기동 뒤 읽기 결과를 확인합니다 |
로컬 맥에서 개발과 테스트를 모두 할 수 있다면 도커 데스크톱이 단순한 선택입니다. 다만 맥을 계속 켜 두기 어렵거나 다른 위치에서 개발 환경에 접속해야 한다면, 로컬 실행만으로는 가동 상태와 원격 접근을 동시에 맞추기 번거로울 수 있습니다. 이 경우 원격 개발용 맥 환경을 검토하면 작업 장소와 로컬 장비 상태에 덜 얽매일 수 있습니다. 실제 제공 조건을 확인하려면 ZekVPS의 클라우드 맥 대여 안내와 한국 지역 클라우드 맥 안내를 살펴보세요. 원격 접속이나 지속 실행이 필요하지 않다면 현재 맥에서 계속 개발하는 편이 낫습니다.
맥 도커 개발을 원격 클라우드 맥에서 이어가세요
도커 기반 웹 프로젝트를 실행하고 테스트할 전용 맥이 필요하다면 ZekVPS 클라우드 맥을 이용해 보세요.
애플 엠포 베어메탈 장비와 완전한 맥 운영 체제로 개발 환경을 유연하게 구성할 수 있습니다.
MCP나 Agent를 데모에서 일상 운영으로 옮길 때는 스냅샷 가능한 클라우드 Mac 노드를 먼저 고정하는 편이 낫습니다. ZekVPS 클라우드 Mac mini 플랜 보기 — 실험 환경과 생산 데스크톱을 분리하면 배포가 안정됩니다.