Docker는 인프라적인 요소들을 코드로 세팅 할 수 있는 가장 좋은 도구라고 생각한다. Docker를 사용해서 컴퓨터 내에 설치 하기 귀찮은(?) 데이터베이스들을 세팅 해 보려고 한다. 내 컴퓨터를 뭔가 더럽히고싶지 않은 생각에서 한번에 설치하고 깔끔하게 지울 수 있는 것을 찾다보니까 docker-compose로 설치를 하게 되었는데, 좀 더 많은 기능들이나 옵션들을 코드화 하는것은 사용 해 보면서 배워야겠다. 이 글은 M1 맥북을 사용하기 때문에 Docker에서 사용 하는 이미지의 버전이 조금 다를 수 있는데, 각자 환경에 알맞는 이미지를 사용 하면 될 것 같다.
MySQL은 RDB 중 많이 사용하는 데이터베이스 중 하나이다. MySQL 기본설정과 변수들은 .env 파일에서 관리하는 docker-compose 를 작성 해 보았다.
version: "3" services: mysql-docker: image: arm64v8/mariadb ports: - "3306:3306" environment: TZ: Asia/Seoul MYSQL_ROOT_PASSWORD: qwerqwer123 MYSQL_DATABASE: paul MYSQL_USER: paul MYSQL_PASSWORD: qwerqwer123 container_name: "docker-mysql" env_file: .mysql_env volumes: - /Users/wool/Database-docker/data/mysql:/var/lib/mysql
docker-compose.mysql.yml
mysql-docker
로 지었다arm64v8/mariadb
를 사용했는데, 코드를 쓴 시점에서 mysql의 m1버전 이미지가 없었던 것으로 기억한다docker-compose -f docker-compose.mysql.yml up -d
# .mysql_env MYSQL_HOST=localhost MYSQL_PORT=3306 MYSQL_ROOT_PASSWORD=qwerqwer123 MYSQL_DATABASE=paul MYSQL_USER=paul MYSQL_PASSWORD=qwerqwer123
version: "3" services: mongo-docker: image: arm64v8/mongo ports: - "${MONGO_PORT}:27017" volumes: - /Users/wool/Database-docker/data/mongo:/data/db container_name: "docker-mongodb" env_file: - .mongo_env
docker-compose.mongo.yml
mongo-docker
로 지었다docker-compose -f docker-compose.mongo.yml up -d
.mongo_env
에서 가져와서 사용하도록 했다MONGO_HOST=localhost MONGO_PORT=27017 MONGO_INITDB_ROOT_USERNAME=root MONGO_INITDB_ROOT_PASSWORD=qwerqwer123 MONGO_INITDB_DATABASE=mongo-test
version: "3" services: redis-docker: image: redis:latest command: redis-server --port 6379 container_name: "docker-redis" labels: - "name=redis" - "mode=standalone" volumes: - /Users/wool/Database-docker/data/redis:/data ports: - 6379:6379
docker-compose.redis.yml
docker-compose -f docker-compose.redis.yml up -d
위와같이 하나씩만 올려도 되지만, docker-compose으로 여러가지 컨테이너를 한번에 올릴 수 있기 때문에 같이 모아서 작성 해 보았다
version: "3" services: mysql-docker: image: arm64v8/mariadb ports: - "3306:3306" environment: TZ: Asia/Seoul MYSQL_ROOT_PASSWORD: qwerqwer123 MYSQL_DATABASE: paul MYSQL_USER: paul MYSQL_PASSWORD: qwerqwer123 container_name: "docker-mysql" env_file: .mysql_env volumes: - /Users/wool/Database-docker/data/mysql:/var/lib/mysql mongo-docker: image: arm64v8/mongo ports: - "${MONGO_PORT}:27017" volumes: - /Users/wool/Database-docker/data/mongo:/data/db container_name: "docker-mongodb" env_file: - .mongo_env redis-docker: image: redis:latest command: redis-server --requirepass qwerqwer123 --port 6379 container_name: "docker-redis" volumes: - /Users/wool/Database-docker/data/redis:/data labels: - "name=redis" - "mode=standalone" ports: - 6379:6379
docker-compose -f docker-compose.yml up -d