본문 바로가기
Infra, Cloud/Docker

[Docker] MySQL 환경 구축

by J4J 2022. 1. 24.
300x250
반응형

안녕하세요. J4J입니다.

 

이번 포스팅은 MySQL 환경 구축하는 방법에 대해 적어보는 시간을 가져보려고 합니다.

 

 

 

MySQL 환경 구축 방법

 

[ 1. 도커 설치 ]

 

 

 

 

해당 글에서는 Window에서 테스트를 진행할 예정이어서 Window Docker를 다운로드 해주시면 됩니다.

 

 

 

[ 2. 데이터를 담아둘 폴더 생성 ]

 

root위치에 간단하게 data라는 폴더를 생성해줍니다.

 

data라는 폴더를 생성하는 이유는 이전에 동작되었던 MySQL 컨테이너에서 사용한 데이터를 유지하기 위해서입니다.

 

Docker를 이용하여 만든 컨테이너는 한번 생성하여 사용한 뒤 컨테이너를 삭제할 경우 컨테이너에서 저장되어 있던 데이터들도 같이 삭제가 됩니다.

 

이를 방지하고자 volume이란것을 이용하여 Docker 컨테이너 내부의 폴더와 Docker 컨테이너 외부의 폴더를 연결함으로 써 컨테이너 내부에서 저장되는 데이터들이 컨테이너 외부에 쌓이도록 할 수 있습니다.

 

이렇게 쌓이는 데이터들은 기존 컨테이너를 삭제하고 새로운 컨테이너를 생성할 때 가져다 사용할 수 있기 때문에 기존 데이터를 유지시킬 수 있습니다.

 

 

 

[ 3. Dockerfile 작성 ]

 

root위치에 Dockerfile이라는 이름으로 파일 하나를 생성해줍니다.

 

Docker는 Dockerfile을 기준으로 만들어진 환경을 이미지화 시켜줍니다.

 

그리고 이렇게 만들어진 이미지를 기반으로 컨테이너를 동작되도록 합니다.

 

 

 

MySQL 환경을 구축하기 위해 필요한 것은 간단하게 환경 변수 정도가 될 수 있습니다.

 

MySQL 접속 계정 및 비밀번호, 데이터베이스 등을 설정하기 위해 Dockerfile에 다음과 같이 작성해줍니다.

 

# MySQL 이미지 불러오기
FROM mysql:5.7

# 환경 변수 설정: MySQL 접속 사용자 계정을 dockeradm으로 설정
ENV MYSQL_USER dockeradm
# 환경 변수 설정: MySQL 접속 사용자 비밀번호를 dockeradm!01로 설정
ENV MYSQL_PASSWORD dockeradm!01
# 환경 변수 설정: MySQL root 계정 비밀번호를 rootadm!01로 설정
ENV MYSQL_ROOT_PASSWORD rootadm!01
# 환경 변수 설정: MySQL에서 사용할 데이터베이스를 blog로 설정
ENV MYSQL_DATABASE blog

 

 

반응형

 

 

[ 4. Dockerfile로 이미지 만들기 ]

 

현재 저의 폴더 구성은 다음과 같습니다.

 

폴더 구성

 

 

 

터미널에서 db폴더로 접근한 뒤 다음의 명령어를 통해 Dockerfile로 만들어질 이미지를 생성해줍니다.

 

$ docker build -t db-img . // .경로에 있는 Dockerfile을 이용하여 db-img라는 이름의 이미지로 빌드하기

 

 

 

명령어를 입력할 경우 여러 설치 작업을 거치게 됩니다.

 

모든 작업이 완료되었다면 다음 명령어를 이용하여 db-img라는 이미지가 만들어졌는지 확인해줍니다.

 

$ docker images

 

 

 

[ 5. 이미지 실행하기 ]

 

다음 명령어를 이용하여 만들어진 이미지로 컨테이너를 생성하여 실행해보겠습니다.

 

$ docker run --name db-con -v ${pwd}/data:/var/lib/mysql -p 3306:3306 -d db-img
// --name db-con: 컨테이너 이름을 db-con으로 지정
// -v ${pwd}/data:/var/lib/mysql: 볼륨 설정, 컨테이너 외부의 (현재 경로/data)와 컨테이너 내부의 (/var/lib/mysql)를 연결
// -p 3306:3306: 포트 설정, 컨테이너 외부에서 3306포트로 들어오는 것은 컨테이너 내부의 3306포트가 동작
// -d: 데몬으로 실행 (컨테이너에게 실행하라고 명령만 보내기)
// db-img: db-img라는 이름의 이미지를 이용하여 컨테이너 생성 및 실행

 

 

 

기존에 MySQL을 사용하던 분들이라면 포트 충돌로 인해 에러가 발생될 수 있습니다.

 

이런 경우에는 기존 MySQL을 잠시 종료해주시길 바랍니다.

 

종료하는 방법은 우측 하단 실행 중인 프로그램 정보에서 해줄 수 있습니다.

 

기존 MySQL 종료

 

 

 

[ 6. 컨테이너 상태 확인 ]

 

$ docker ps -a

 

 

 

모든 과정이 정상적으로 수행되었을 경우 위의 명령어를 이용하면 db-con이라는 이름의 컨테이너를 확인할 수 있습니다.

 

 

728x90

 

 

[ 7. MySQL 접속 테스트 ]

 

MySQL 워크벤치에 접속하여 다음과 같이 New Connection 정보를 입력해줍니다.

 

워크벤치 정보 입력

 

 

 

Password의 Store in Value ... 까지 클릭하여 비밀번호까지 입력해준 뒤 Test Connection을 누르면 다음과 같이 접속이 되는 것을 확인할 수 있습니다.

 

MySQL Test Connection

 

 

 

또한 접속까지 해보면 다음과 같이 Dockerfile에 설정했던 blog라는 데이터베이스도 확인할 수 있습니다.

 

MySQL 접속 화면

 

 

 

환경 변수 파일 사용

 

위의 설정을 하다가 한 가지 느끼실만한 부분은 보안성입니다.

 

보통 Dockerfile이 그대로 Git과 같은 저장소에 올라가게 될 텐데 그럴 경우 다른 사람들에게 데이터베이스 접속 정보들이 모두 노출이 될 수 있습니다.

 

이런 상황을 대비하기 위해 대부분의 개발 작업에서 환경 변수 파일을 사용합니다.

 

또한 Dockerfile도 환경 변수 파일을 사용할 수 있습니다.

 

 

 

 

Dockerfile 환경 변수 파일은 .env파일을 사용해주면 됩니다.

 

root경로에 .env파일을 생성해주고 다음과 같이 내용을 입력해줍니다.

 

MYSQL_USER=dockeradm
MYSQL_PASSWORD=dockeradm!01
MYSQL_ROOT_PASSWORD=rootadm!01
MYSQL_DATABASE=blog

 

 

 

그리고 아까 작성했던 Dockerfile을 다음과 같이 수정해줍니다.

 

# MySQL 이미지 불러오기
FROM mysql:5.7

# 환경 변수 설정: MySQL 접속 사용자 계정을 dockeradm으로 설정
ENV MYSQL_USER ${MYSQL_USER}
# 환경 변수 설정: MySQL 접속 사용자 비밀번호를 dockeradm!01로 설정
ENV MYSQL_PASSWORD ${MYSQL_PASSWORD}
# 환경 변수 설정: MySQL root 계정 비밀번호를 rootadm!01로 설정
ENV MYSQL_ROOT_PASSWORD ${MYSQL_ROOT_PASSWORD}
# 환경 변수 설정: MySQL에서 사용할 데이터베이스를 blog로 설정
ENV MYSQL_DATABASE ${MYSQL_DATABASE}

 

 

 

수정을 완료했다면 다음 명령어를 이용하여 기존에 만들어둔 컨테이너와 이미지를 삭제해줍니다.

 

$ docke rm -f db-con // db-con이라는 이름의 컨테이너 삭제
$ docker rmi db-img // db-img라는 이름의 이미지 삭제

 

 

 

그리고 이미지는 위와 동일하게 다음 명령어를 이용하여 생성해줍니다.

 

$ docker build -t db-img . // .경로에 있는 Dockerfile을 이용하여 db-img라는 이름의 이미지로 빌드하기

 

 

 

이미지가 생성되면 컨테이너도 동일하게 생성해줘야 하는데 환경 변수 파일을 사용하기 때문에 다음과 같이 환경 변수에 관한 것도 같이 입력하여 컨테이너 생성 및 실행을 해주면 위와 동일하게 동작하는 것을 확인할 수 있습니다.

 

$ docker run --name db-con -v ${pwd}/data:/var/lib/mysql -p 3306:3306 --env-file ./.env -d db-img
// --name db-con: 컨테이너 이름을 db-con으로 지정
// -v ${pwd}/data:/var/lib/mysql: 볼륨 설정, 컨테이너 외부의 (현재 경로/data)와 컨테이너 내부의 (/var/lib/mysql)를 연결
// -p 3306:3306: 포트 설정, 컨테이너 외부에서 3306포트로 들어오는 것은 컨테이너 내부의 3306포트가 동작
// --env-file ./.env: 환경 변수 파일 설정, (./.env)에 있는 파일을 환경 변수 파일로 등록
// -d: 데몬으로 실행 (컨테이너에게 실행하라고 명령만 보내기)
// db-img: db-img라는 이름의 이미지를 이용하여 컨테이너 생성 및 실행

 

폴더 구성

 

 

 

 

 

 

 

 

이상으로 MySQL 환경 구축하는 방법에 대해 간단하게 알아보는 시간이었습니다.

 

읽어주셔서 감사합니다.

 

 

 

728x90
반응형

댓글