본문 바로가기
컴퓨터/Linux

Docker로 MySQL 사용하기

by 신규하 2015. 11. 3.

docker를 사용하면서 처음 사용 해서, mysql을 실행하는 것까지 정리를 해 봤습니다.

docker로 mysql 사용해 보기

먼저 관리자 모드에서 사용을 해야 한다.

sudo -i

docker 명령 실행을 관리자 모드에서 하기 싫다면, 가장 하단에 있는 Tips를 참고 해서 작업 하시면 됩니다.

Ubuntu에 Docker 설치하기

우선 전 우분투 환경에서 설치하고 사용하는 걸 기반으로 했습니다.
아래와 같이 입력해 주시면, 간단하게 실행이 됩니다.

wget -qO- https://get.docker.com/ | sh

Docker 이미지 검색

먼저 mysql을 검새해 봅니다.

docker search <검색어>

$ docker search mysql
docker search mysql
NAME                         DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
mysql                        MySQL is a widely used, open-source relati...   1219      [OK]
mysql/mysql-server           Optimized MySQL Server Docker images. Crea...   56                   [OK]
... 중략 ...
wenzizone/mysql              mysql                                           0                    [OK]

가장 상단에 공식 이미지가 있어서 여기서는 공식 이미지를 사용 했습니다.

테크명 알아 보기

이 글에서는 가장 마지막(latest)이미지를 사용 합니다.
하지만, 난 꼭 이번의 MySQL을 써야만 돌아가는 데이터를 가지고 있거나, 어플이 있다고 한다면, tag를 검색해서 해당 버전을 설치 하시면 됩니다.

$ wget -qO- https://registry.hub.docker.com/v1/repositories/mysql/tags | jq '.[].name'
"latest"
"5"
.... 중략 ...
"5.7.8-rc"
"5.7.9"

혹시 관리가 길어지거나 특정 버전을 고정해야 할 경우에는 tag의 특정 번호를 찍어서 사용하는 것도 생각해 보셔야 할 것 같네요.

Docker 이미지 받기

태그 중에서 가장 최근은 latest입니다.
하지만, 고정 버전을 원한다면, tag중에서 골라서 사용 하시면 됩니다.

docker pull <이미지이름>:

사용 하시면서 오랜 기간 사용해야 하거나, 패키지 관리자의 버전에 따른 영향을 덜 받고 싶다면, tag를 고정해서 받아서 사용해 주시면 됩니다.

docker pull mysql:latest

전 마지막 tag로 받습니다. :latest는 기본 값이라서 생략해도 괜찮습니다.

이미지 목록 출력

이미지가 잘 받았는지 출력해 봅니다.

$ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
mysql               latest              04c9038fd2f2        7 days ago          359.8 MB

MySQL 환경변수 (-e)

MYSQL_ROOT_PASSWORD

이 변수는 필수이며, MySQL의 root 암호를 지정 합니다.

MYSQL_DATABASE

컨테이너의 이미지를 시작 하면서 지정한 데이터베이스를 생성합니다.

MYSQL_USER, MYSQL_PASSWORD

MySQL 사용자 아이디와 암호

MYSQL_ALLOW_EMPTY_PASSWORD

yes로 설정해 놓으면 root의 패스워드가 비어서 실행이 된다. 권장하진 않음.

환경 변수 설정 하기

MYSQL_USER="mysql_user"
MYSQL_DATABASE="sample_db"
MYSQL_CONTAINER_NAME="mysql"
MYSQL_ROOT_PASSWORD="MY_PASSWORD"
MYSQL_PASSWORD="MY_PASSWORD"

실행

docker \
  run \
  --detach \
  --env MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \
  --env MYSQL_USER=${MYSQL_USER} \
  --env MYSQL_PASSWORD=${MYSQL_PASSWORD} \
  --env MYSQL_DATABASE=${MYSQL_DATABASE} \
  --name ${MYSQL_CONTAINER_NAME} \
  --publish 3306:3306 \
  mysql;

설정 변수

  • --name : 이미지의 이름
  • -e, --env=[] : 설정값
  • -d, --detach=false : 컨테이너를 백그라운드 실행, 이 옵션을 안 넣어 주면 실행상태에서 바로 꺼진 상태로 들어 가게 됨
  • -p, --publich=[] : 컨테이너의 포트를 호스트로 사용 합니다.

MySQL을 접속해 보면, 사용자에는 mysql_user가 추가 되고, sample_db라는 db가 추가된 상태로 이미지가 시작 됩니다.
접속 IP는 host pc의 IP를 사용 합니다.

데이터베이스 저장 위치를 host로 사용하기

데이터베이스를 띄우지만, 그냥 사용하게 되면, 컨테이너 이미지 안에 파일을 저장합니다.
호스트파일에 저장 할려면, --volume이라는 옵션을 사용해야 합니다.

사용중인 컨테이너 끄고 지우기

docker stop mysql:latest
docker rm mysql:latest

Volume을 지정해서 실행하기

docker \
  run \
  --detach \
  --volume /opt/mysql:/var/lib/mysql \
  --env MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} \
  --env MYSQL_USER=${MYSQL_USER} \
  --env MYSQL_PASSWORD=${MYSQL_PASSWORD} \
  --env MYSQL_DATABASE=${MYSQL_DATABASE} \
  --name ${MYSQL_CONTAINER_NAME} \
  --publish 3306:3306 \
  --name mysql-volume \
  mysql:latest;

설정 변수

  • -v, --volume=[] : 호스트의 파일을 컨테이너 위치로 연결 합니다.

/opt/mysql 경로에 mysql의 db가 생성 된 것을 확인 할 수 있습니다.


Tips

모든 컨테이너를 중단 시키고 지우기

docker stop $(docker ps -a -q)
docker rm $(docker ps -a -q)

마지막 컨테이너 ID 가져 오기

alias dl='docker ps -l -q'
dl

사용자에게 docker 권한 주기

docker 권하는 root 권한과 같다. 주의해서 주자.

# docker 그룹에 추가하기
sudo groupadd docker
# 자신의 아이디를 docker 그룹에 넣기
sudo gpasswd -a ${USER} docker
# docker 재시작
sudo service docker restart
# 다시 로그인 하기
exit


댓글