번외편으로 ㅋㅋ Docker 를 어떻게 써먹어 볼까 하다
(예전에 발표했던)재미있는 시나리오를 하나 소개해볼까 한다!!
개발자 1명이 팀에서 프로젝트를 2~3개 씩 진행한다고 가정해보자.
그런데 재.수. 가 없게도 각 프로젝트마다 사용하는 MySQL 버전이 다른것이다..
두둥...!!
Docker 가 없었다면 그 개발자는 MySQL 을 버전별로 다 로컬 피씨에 깔고,
다른 프로젝트 개발로 옮겨갈때마다 MySQL 의 Path 설정을 다시 하고,
껐다 키고 ... 영 번거로운 작업을 매번 해야 한다.
이를 도커를 이용해서 MySQL 여러 버전을 피씨에 깔고, 쉽게 실행시켜보자!
docker-machine 을 통해 virtual box 이미지 설치하기
docker-machine create
라고 치면 default 라는 이미지 / virtualbox driver 로 설치가 된다.
확인은 virtualbox 가면 확인이 가능하다.
- 실행화면 ( 나는 default 로 이미 설치한적이 있어 default2 라는 이미지 이름을 줌 )
docker-machine create --driver virtualbox default2 Running pre-create checks... (default2) Default Boot2Docker ISO is out-of-date, downloading the latest release... (default2) Latest release for github.com/boot2docker/boot2docker is v1.11.2 (default2) Downloading /Users/{{username}}/.docker/machine/cache/boot2docker.iso from https://github.com/boot2docker/boot2docker/releases/download/v1.11.2/boot2docker.iso... (default2) 0%....10%....20%....30%....40%....50%....60%....70%....80%....90%....100% Creating machine...
설치된 가상 머신의 환경을 보려면
docker-machine env default2 --shell=zsh export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://192.168.99.101:2376" export DOCKER_CERT_PATH="/Users/{{username}}/.docker/machine/machines/default2" export DOCKER_MACHINE_NAME="default2" # Run this command to configure your shell: # eval $(docker-machine env default2 --shell=zsh)
docker 에 이제 mysql (5.6 버전) 이미지를 이용해서 컨테이너를 띄워보자!
➜ ~ docker run --name mysql5.6 -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 mysql:5.6 Unable to find image 'mysql:5.6' locally 5.6: Pulling from library/mysql 51f5c6a04d83: Already exists a3ed95caeb02: Pull complete 260d7505d8f9: Already exists a65f47c75fe3: Already exists 729d0217f8db: Already exists 6dcf95bf56d1: Pull complete e9e6fbca5bcb: Pull complete ee46e19ab7a2: Pull complete f8c1edcfb009: Pull complete 624b64bce5c0: Pull complete 266b326b31d7: Pull complete 16434515d197: Pull complete Digest: sha256:03646869dfecf96f443640f8b9040fbde78a96269aaf47bbfbb505a4c1adcad9 Status: Downloaded newer image for mysql:5.6 3fd48da6bad0c4259ff88d7b867538605ff0c2c6933e83039903b4e4c773930b
위의 명령어를 해석해 드리면
mysql5.6 라는 컨테이너 이름으로 mysql 의 root 패스워드를 1234로 해서 mysql 5.6 버전의 이미지를 이용해 컨테이너를 띄워라!!!
근데 바깥에서 접속하려면 host 의 port 를 container 의 port 로 포워딩 해줘야 하니 그 옵션이 -p 로 줍니다!
라는 의미 입니다. ㅎㅎ
하나만 더 확인하죠... ㅎㅎ
➜ ~ docker-machine ip default 192.168.99.100
전 워크 벤치로 connection 테스트를 할껀데 지금 도커가 돌고 있는데가
우리 로컬이 아닙니다! 정확하게 말하자면 우리 로컬의 VM 위에서 돌고 있는거죠 +_+
그러니까 mysql 에 connect 할때 정보를 VM 의 ip 정보를 적어주어야 합니다.
다 해놓고 워크 벤치에 가서 connect 테스트를 해보죠!
위와 같이 접속이 되는것을 확인 하실수 있습니다!
끝..... 인줄 알았죠? ㅋㅋㅋ
아까 우리의 목적!! 갑자기 다른 프로젝트에서 5.5 버전의 mysql 로 개발을 해야 하는 상황이 발생합니다!! 이런... J 같은 상황이 발생하면 GRGR 하겠지만... 우린 도커가 있으니 간단히 할 수 있죠 ㅎㅎ
➜ ~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3fd48da6bad0 mysql:5.6 "docker-entrypoint.sh" 10 minutes ago Up 10 minutes 0.0.0.0:3306->3306/tcp mysql5.6 ➜ ~ docker stop 3fd48da6bad0 3fd48da6bad0 ➜ ~ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3fd48da6bad0 mysql:5.6 "docker-entrypoint.sh" 10 minutes ago Exited (0) 2 seconds ago mysql5.6 6ded72fd9ea5 mysql:5.5 "docker-entrypoint.sh" 12 minutes ago Exited (0) 11 minutes ago mysql5.5 ➜ ~ docker start 6ded72fd9ea5 6ded72fd9ea5 ➜ ~ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6ded72fd9ea5 mysql:5.5 "docker-entrypoint.sh" 12 minutes ago Up 5 seconds 0.0.0.0:3306->3306/tcp mysql5.5
화살표의 숫자만큼 명령어를 5개를 친겁니다.
1. docker ps 를 통해 현재 돌고 있는 도커 프로세스를 확인
2. 해당 컨테이너를 stop 시켜줌
3. 모든 컨테이너를 검색 ( -a 옵션을 통해... )
4. 5.5 버전의 mysql 컨테이너 실행!
5. 잘 도나 확인후 workbench 에서 접속!!
하면 아마 잘 될겁니다 ㅋㅋㅋ
아!! 3번 과정에서 저같은 경우 mysql 5.5 이미지를 미리 깔아놔서 그런건데;;
안까신 분들은 3,4 번의 과정 대신에 아래와 같이 5.5 버전을 까시면 됩니다!! ^^
➜ ~ docker run --name mysql5.5 -e MYSQL_ROOT_PASSWORD=1234 -d -p 3306:3306 mysql:5.5 Unable to find image 'mysql:5.5' locally 5.5: Pulling from library/mysql 51f5c6a04d83: Already exists a3ed95caeb02: Pull complete 260d7505d8f9: Already exists a65f47c75fe3: Already exists 729d0217f8db: Already exists 6dcf95bf56d1: Pull complete e9e6fbca5bcb: Pull complete ee46e19ab7a2: Pull complete f8c1edcfb009: Pull complete 624b64bce5c0: Pull complete 266b326b31d7: Pull complete 16434515d197: Pull complete Digest: sha256:03646869dfecf96f443640f8b9040fbde78a96269aaf47bbfbb505a4c1adcad9 Status: Downloaded newer image for mysql:5.6 3fd48da6bad0c4259ff88d7b867538605ff0c2c6933e83039903b4e4c773930b
그럼 이제 진짜 끝!!! ㅎㅎ
'Docker' 카테고리의 다른 글
docker-compose 를 이용한 개발환경 구축하기 ( feat. vagrant ) (0) | 2016.10.26 |
---|---|
[특집] container orchestration 쿠버네티스(Kubernetes) ( 쿠베르네테스 ) (0) | 2016.09.07 |
1. Docker 란? - 장점 위주로! (0) | 2016.06.22 |
0. Docker 설치하기 (0) | 2016.06.22 |