-
[docker] docker volume으로 mysql 서버띄우기docker 2024. 12. 6. 19:10
docker volume으로 mysql 서버띄우기
볼륨
- 도커 컨테이너에서 데이터를 영속적으로 저장하기위한 방법
- 볼륨은 컨테이너 자체의 저장공간을 쓰지않고 호스트 자체의 저장공간을 공유해서 사용한다- 도커 컨테이너는 삭제하면 데이터가 삭제된다.
볼륨을 쓰는 이유- 기존에는 도커를 써서 특정 프로그램을 컨테이너로 띄웠다. 여기서 프로그램의 새로운 버전이 나오면 새로운 이미지를 통해 새로운 컨테이너를 만들게 된다. 이때 만약 이 컨테이너가 mysql 이었다면 mysql내 데이터들도 함께 삭제된다.
- 그래서 데이터의 영속성을 위해서 볼륨을 이용해야한다.
- 이를 통해 새로운 컨테이너를 쓰더라도 기존의 데이터를 유지할 수 있다.
- 볼륨을 이용하면 호스트와 컨테이너에서 연결된 각각의 주소가 공간을 공유한다. 따라서 한쪽에 파일을 추가하거나 지우면 다른쪽에서도 반영되어있다.
볼륨을 사용하는 명령어Docker run -v [호스트 디렉토리 절대경로]:[컨테이너 디렉토리 절대경로] [이미지명]:[태그명]
docker run -d -p 3306:3306 -v /Users/kiju/dev/study_data/docker-volume/docker-practice:/var/lib/mysql mysql
으로 그냥 실행하면 에러나는 이유
-> mysql 서버 컨테이너를 띄울때 환경변수를 설정하지 않으면 에러난다
(다른db들도 마찬가지니 공식문서를 참고한다)
도커허브 mysql에서 공식문서참고
https://hub.docker.com/_/mysql
도커허브 postgresql 공식문서
https://hub.docker.com/_/postgres
도커허브 mongodb 공식문서
https://hub.docker.com/_/mongo
컨테이너 실행시 패스워드를 환경변수로 지정해줘야 에러가 나지 않는다.Docker run -e MYSQL_ROOT_PASSWORD=password123 -d -p 3306:3306 -v /Users/kiju/dev/study_data/docker-volume/docker-practice:/var/lib/mysql mysql mysql
// 옵션 -e: 컨테이너(미니컴퓨터) 내부에 환경변수 설정
이때 -p [로컬호스트 포트]:[컨테이너 포트] 이렇게 연결되는데
mysql은 기본 실행포트가 3306이므로 3306포트를 열어줘야하지만
호스트 컴퓨터에서는 어느 포트번호를 열든지 상관없다.
예시)
docker run -p 1234:3306
하지만 호스트의 포트와 컨테이너의 db 기본실행포트번호를 동일하게해서 헷갈리지않도록하자.
컨테이너내부에서 환경변수 출력해보기Docker exec -it [컨테이너] bash // 컨테이너 들어가기 Echo $MYSQL_ROOT_PASSWORD // 환경변수 출력
*볼륨이용해서 db컨테이너 쓸때 주의할점볼륨을 쓰면 컨테이너를 삭제하고 새로 mysql컨테이너를 만들어도 데이터들은 유지된다.
하지만 Docker run -e 에서 설정한 mysql계정 비밀번호 역시 볼륨에 저장되어있기 때문에, 새로운 컨테이너에서 docker run -e로 설정해도 기존값이 바뀌지않고 기존의 비밀번호가 유지된다.
Docker run 명령어로 mysql비번은 안바뀐다.
따라서 db패스워드를 바꾸기위해서는 볼륨을 지우거나 mysql 내부에서 비밀번호를 바꿔야한다.
볼륨 사용시 주의할점호스트 디렉토리 절대경로에 디렉토리가 이미 존재할 경우, 호스트의 디렉토리가 컨테이너의 디렉토리를 덮어씌운다.
( <호스트 디렉토리-> 컨테이너 디렉토리>로 역으로 복사해온다. )
호스트의 디렉토리 절대경로에 디렉토리가 존재하지않을 경우, 호스트의 디렉토리 절대경로에 디렉토리를 새로만들고 컨테이너의 디렉토리에 있는 파일들을 호스트의 디렉토리로 복사해온다.( <컨테이너 디렉토리 -> 호스트 디렉토리>로 정상적으로 복사해온다 )
따라서 호스트의 디렉토리경로를 설정할때 새로운 디렉토리경로로 설정해야한다. 새로 생성될수있도록.mongodb 서버 띄워보기
mongodb는 설정해줘야할 환경변수와 데이터 저장위치가 mysql과 다르기때문에 공식문서를 잘보는 것이 중요하다
docker run -d -v /Users/kiju/dev/study_data/docker-volume/mongodb_data:/data/db -e MONGO_INITDB_ROOT_USERNAME=root -e MONGO_INITDB_ROOT_PASSWORD=password123 -p 27017:27017 mongo
'docker' 카테고리의 다른 글
[docker] docker compose로 nestJS, postgresql, redis 서버 띄우기 (0) 2024.12.07 [docker] docker compose 로 mysql 서버 띄우기 (0) 2024.12.07 [docker] docker로 nestJS 서버띄워보기 (0) 2024.12.07 [docker] 도커파일 만들기1 (0) 2024.12.07 [docker] 도커, 도커 CLI 알아보기 (0) 2024.12.06