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
댓글