2 분 소요


Docker는 인프라적인 요소들을 코드로 세팅 할 수 있는 가장 좋은 도구라고 생각한다. Docker를 사용해서 컴퓨터 내에 설치 하기 귀찮은(?) 데이터베이스들을 세팅 해 보려고 한다. 내 컴퓨터를 뭔가 더럽히고싶지 않은 생각에서 한번에 설치하고 깔끔하게 지울 수 있는 것을 찾다보니까 docker-compose로 설치를 하게 되었는데, 좀 더 많은 기능들이나 옵션들을 코드화 하는것은 사용 해 보면서 배워야겠다. 이 글은 M1 맥북을 사용하기 때문에 Docker에서 사용 하는 이미지의 버전이 조금 다를 수 있는데, 각자 환경에 알맞는 이미지를 사용 하면 될 것 같다.

Mysql

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로 지었다
  • image는 arm64v8/mariadb를 사용했는데, 코드를 쓴 시점에서 mysql의 m1버전 이미지가 없었던 것으로 기억한다
  • ports로 포트를 열어주었다
  • environment라는 곳에 데이터베이스에서 인증과 관련 된 환경변수들을 작성했다
  • env_file 도 동일하게 environment 안에 있는 내용들을 추가했는데, 둘중 하나만 작성 해 주어도 된다
  • volumes을 사용해서 가상화컨테이너 내부와 나의 로컬의 저장소를 연동 해 주었다
  • 실행 명령어는 docker-compose -f docker-compose.mysql.yml up -d
  • env_file 혹은 environment 둘 중 하나만 있어도 된다.
  • 아래는 .mysql_env 파일 내애 작성 된 내용이다
      # .mysql_env
      MYSQL_HOST=localhost
      MYSQL_PORT=3306
      MYSQL_ROOT_PASSWORD=qwerqwer123
      MYSQL_DATABASE=paul
      MYSQL_USER=paul
      MYSQL_PASSWORD=qwerqwer123
    

MongoDB

  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

  • 마찬가지로, service 이름을 mongo-docker로 지었다
  • image는 mongo에서 제공하는 arm64v8버전을 사용했다
  • volumes 설정으로 로컬과 데이터를 연동할 수 있게 했다
  • 실행 명령어는 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
    

Redis

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

  • Redis는 기본적으로 image에서 arm64v8를 지원한다
  • command로, redis서버를 시작하게 해주었다. 레디스에 대한 여러가지 실행옵션이 있는데 여기에 적어주면 된다
  • 실행 명령어는 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
  • 각각 .env 파일들은 docker-compose와 동일한 위치에 놓고 사용했다
  • 실행 명령어는 docker-compose -f docker-compose.yml up -d
  • 레디스와 몽고디비는 클러스터 구성을 해서 올리기도 하던데 요거는 조금 더 연구 해 봐야곘다

댓글남기기