ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Docker compose를 이용하여 GCP VM에 MySQL 서버 구축하기
    카테고리 없음 2024. 2. 6. 19:56

    현재 구글에서 주최하는 솔루션챌린지에 참여중인데, 크레딧을 준다고했는데 5달러주고,, 그냥 크레딧 받기 전에 내 계정에서 CloudSQL 사용하고있었는데 하루에 9000원씩 나가던데 5달러가지고뭘하라고!!! 하루 컷하고도 부족한 금액.. 첨에 들었을때 잘못들은줄,,,

     

    근데 Compute Engine은 그나마 비용이 엄청나게 덜하길래 스프링부트 배포하고 있는 서버에서 원래 docker compose 를 사용했어서 컨테이너 하나를 더 만들어주려고한다. 이 글은 이미 서버에 docker와 docker compose가 설치되어있다는 가정하에 작성하는 것이다. 

     

    우선 서버 터미널에 접속하여 mysql image 를 pull  받는다. 나는 8.0 버전을 사용할 것이라서

    docker pull mysql:8.0

    와같이 풀받았는데 뒤에 버전을 명시하지 않으면 가장 최신 버전이 받아와진다고한다. 

     

    docker images

    를 통해서 image가 잘 받아와졌는지 확인한다. 

     

    그리고 다시 docker compose up을 하더라도 데이터베이스가 날라가지 않도록 하기 위해서 volume을 생성해준다. 

    docker volume create [생성할 볼륨 이름]

    volume을 마운트해준다. 그리고 volume 이 잘 생성되었는지 확인하기 위해 볼륨 리스트를 확인해준다.

    docker volume ls

     

    근데 나는 mysql이란 이름의 볼륨을 생성해서 넣어주었는데 compose up을 하면 그런 볼륨은 없다고 뜨길래 아래의 명령어를 통해 volume의 상세정보를 확인해주었다. 그리고 저기 Mountpoint에 적혀 있는 부분을 볼륨 이름 대신 마운트해주었다. 

    docker volume inspect [volume name]

     

     

    docker-compose.yml을

    name: prodiction
    version: '3'
    services:
    
    	server:
    		container_name: server
    		image: [서버 이미지 이름]
    		restart: always
    		ports:
    			- "8080:8080"
    
    	database:
    		container_name: database
    		image: mysql:8.0
    		restart: always
    		ports:
    			- "3306:3306"
    		environment:
    			MYSQL_DATABASE: prodictiondb
    			MYSQL_ROOT_PASSWORD: 비밀번호
    			MYSQL_USER: admin
    			MYSQL_PASSWORD: 비밀번호
    			TZ: Asia/Seoul
    		command:
                        - --character-set-server=utf8mb4
                        - --collation-server=utf8mb4_unicode_ci
    		volumes:
    			- /var/lib/docker/volumes/mysql/_data:/var/lib/mysql

    이와 같이 수정해준다. 나는 원래 스프링부트 서버도 이 vm인스턴스에서 돌려서 데베만 생성하려면 아래 부분만 참고하면 된다. 

     

    후에 mysql 관련 설정을 해주기 위해서

    docker exec -it [container name] mysql -u root -p

    를 통해 루트계정으로 mysql에 접속한다.

    password가 나오면 그냥 엔터를 입력한다 

     

    여기서부터 sql문으로 권한을 가진 유저 생성하고, 테이블 생성해주면 된다. 

Designed by Tistory.