본문 바로가기
내일배움캠프

내일배움캠프TIL-Docker를 활용해 MySQL을 컨테이너로 띄워 사용하자

by Kiwimel0n 2024. 3. 13.

프로젝트 과제를 하면서 개발환경에서 MySQL을 쓰게 되고 컴퓨터를 시작하면서 계속해서 MySQL서버가 필요하지 않을때도 프로세스가 점유되는 것이 불편하여 이번에는 Docker라는 것을 이용해서 원하는 때에만 MySQL을 사용할 수 있게 만들도록 만들려고 한다.

 

기본적으로 Docker를 사용하여 컨테이너를 띄워 사용하기위해 기본적인 지식이 필요로한다.

 

Docker란 무엇인가?

 

Docker는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼입니다. Docker는 소프트웨어를 컨테이너 라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있습니다. Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다.

 

 

Docker 작동방식코드를 실행하는 표준방식으로 제공한다. Docker는 컨테이너를 위한 운영체제로 , 가상머신이 서버 하드웨어를 가상화 하는 방식과 비슷하게 컨터에너는 서버 운영 체제를 가상화한다. Docker는 각 서버에 설치되면 컨테이너를 구축, 시작 또는 중단 하는 간단한 명령어를 제공.

 

 

https://captcha.tistory.com/49

 

Docker 명령어 정리

Docker 사용법 CentOSDocker는 OS의 자원을 사용하기 때문에 기본적으로 Root 사용자에서 명령어를 사용해야한다 1. search (image 검색)# docker search centos- Docker Hub로부터 사용가능한 image를 찾는 명령어- Dock

captcha.tistory.com

 

먼저 도커를 사용하기위해 도커 데스크톱을 설치를 해주었다.
https://www.docker.com/products/docker-desktop/

 

Docker Desktop: The #1 Containerization Tool for Developers | Docker

Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.

www.docker.com

 

설치 를 해준 뒤 윈도우는 cmd를 통하여 환경변수를 설정하면 바로 도커에 관한 명령어를 사용하여 이미지를 다운로드 그리고 컨테이너를 올릴 수 가 있다.

docker pull mysql
을 명령어로 적어 mysql의 최신버전의 이미지를 dockerHub에서 받아와


 

 

 

docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=(root 비밀번호) -d -p 3306:3306 

명령어를 통하여 컨테이너를 올려준다. 나는 3번 시도를 했지만 처음 시도 했을 때는 이미 MySQL서버가 설치되어서 외부포트를 3306을 가지고 있어서 오류가 걸려 외부포트를 3305로 변경후 시도를 하였지만 이미 첫 명령어로 컨테이너가 생성되어 있었다. 그래서 생성된 컨테이너를 삭제후 3번째 시도를 한 뒤에 정상적으로 컨테이너를 올리게 되었다.


docker ps -a
라는 명령어를 통하여 모든 컨테이너의 상태를 알 수 가 있다 생성된mysqlcontainer 외에 강의를 들으면 생성한 postgres 컨테이너가 있고  이것은 작동을 중지 시켜놓은 상태라 exited라고 되어 있다.

 

 

docker exec -it mysql-container(컨테이너 이름) bash 를통하여
컨테이너에 접속할 수있고 그뒤로는 mysql에 접속하는 것과 다름이 없었다.



 

db에 TodoList라는 db를 생성시켜주고


 

유저를 생성 해 준뒤에


권한 설정을 해주고

권한 설정을 해주면된다. 

 

더보기
spring:
  profiles:
    active: dev
  datasource:
    url: jdbc:mysql://localhost:3305/TodoList
    username: user
    password: 사용자 비밀번호
    driver-class-name: com.mysql.cj.jdbc.Driver

  jpa:
    hibernate:
      ddl-auto: update
    properties:
      hibernate:
        show_sql: true
        format_sql: true
        use_sql_comments: true

jwt:
  secret:
    key:


하지만 application.yml을 설정한뒤 application을 실행 시켰을때는 
java.sql.SQLException: Access denied for user 'user'@'172.17.0.1' (using password: YES)
이러한 오류가 떠서

해결할 방법을 물색해 봤을때 해결 법은 도커는 기본적으로 172.17.0.1이라는 ip를 가지고 있어서 유저라는 사용자는 localhost로 설정해 둬서 컨테이너안의 localhost임으로 유저를 생성 해 주었을때 localhost가 아닌 
 '%'을 이용하여 접속을 바꾸어 주어야 했었다.

CREATE USER 'user'@'%' IDENTIFIED BY 'your_password';
GRANT ALL PRIVILEGES ON TodoList.* TO 'root'@'%';
FLUSH PRIVILEGES;

 

 다시 유저를 생성해주고 application을 실행 시켰을때 정상적으로 동작하는 것을 확인 했다.

 

 

기본적으로 만들어진 회원가입 api를 이용하여 도커 컨테이너의 데이터베이스에 정상적으로 데이터가 저장되는지 확인해 보았다.

 


그 결과 정상적으로 컨테이너 db에 데이터가 정상적으로 작동하는 것을확인 하였다.


이 시도를 토대로 나중에는 redis를 사용하여 휘발성 데이터를 저장하는 용도로 mysql과 같이 이중으로 db를 사용하는 것과 컨테이너에 springboot 빌드 파일과 mysql redis를 같이 도커에 올려서 사용해 보는 것을 해보려고 한다.

 

 


참고 글

 

https://aws.amazon.com/ko/docker/


https://hipopatamus.tistory.com/109

 

Docker란 무엇입니까? | AWS

Q: Docker로 어떤 작업을 할 수 있습니까? Docker를 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포 및 확장할 수 있으며 코드가 문제없이 실행될 것임을 확신할 수 있습니다. 이는 Doc

aws.amazon.com

 

Docker에 MySQL 띄우기

Docker에 MySQL 띄우기 Docker에 MySQL이 담긴 Container를 띄운다. 1. Docker란? 도커는 컨테이너 기반의 가상화 플랫폼이다. 여기서 컨테이너란 컨테이너가 실행되고 있는 호스트 os의 기능을 그대로 사용

hipopatamus.tistory.com