Docker volume에 대하여..

이유성·2025년 2월 3일
post-thumbnail

컨테이너가 가진 문제

docker를 활용해 특정 프로그램을 컨테이너에 올릴 수 있다. 여기서 이 특정 프로그램 기능이 추가되어 새로운 이미지를 만들어서 컨테이너를 실행해야 한다면 docker는 기존 컨테이너에서 변경된 부분을 수정하지 않고 새로운 컨테이너를 만들어 통째로 갈아끼우는 방식을 활용한다..
위와 같은 특성 때문에 기존 컨테이너가 새로운 컨테이너로 변경되면 원래 있던 데이터가 사라진다!

Volume~

데이터를 영속적으로 저장하기 위해서 사용하는 것이 바로 dokcer volume이다..
volume은 컨테이너 자체의 저장공간을 사용하지 않고 호스트 내부의 저장공간을 활용한다

docker run -v [Host 디렉토리 절대 경로]:[컨테이너 디렉토리 절대 경로] [이미지명:태그명]

Host 디렉토리 절대 경로에 디렉토리가 이미 존재할 경우 호스트 디렉토리가 컨테이너의 디렉토리를 덮어씌운다
Host 디렉토리 절대 경로에 디렉토리가 없다면 새로 만들고 컨테이너의 디렉터리에 있는 파일들을 Host 디렉토리로 복사해온다.

[실습] Doker로 MySql 실행하기

  1. 이미지 로드, 컨테이너 설치, 포트포워딩, 비밀번호 설정, 볼륨 설정
mkdir docker_MySQL
cd docker_MySQL
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=[비밀번호 설정] -v /~~~/~~/~/docker_MySQL/MySQL_data:/var/lib/mysql mysql

좀 길지만 뭐 없다..

  • -d : 백그라운드로 실행
  • -p : 포트 설정
  • -e : 컨테이너 환경변수 설정, 여기서는 비밀번호를 설정하는 역할을 한다. 이 부분이 없으면 실행이 안되니 주의해라.
  • /~//~/docker_MySQL/MySQL_data : 이 부분은 data를 저장하고 싶은 경로를 절대경로로 설정하면 된다. 그리고 마지막 dir은 굳이 안 만들어도 없으면 알아서 만들어준다.
    하지만!
    미리 만들어둔 dir에 파일이 있다면 저장이 안되니 주의해라 빈 dir을 유지해야한다.
  1. 확인
docker exec -it [컨테이너 ID] bash

위 명령어를 입력하면 실행중인 컨테이너 내부에 접근할 수 있다

echo $MYSQL_ROOT_PASSWORD

리눅스 명령어이다 환경변수의 값을 볼 수 있다.


위 사진을 보면 설정한 비밀번호가 잘 나온 것을 확인할 수 있다

mysql -u root -p

위 명령어를 입력하면 mysql로 접근해서 쿼리문을 작성할 수 있다

DataGrip을 통해서도 확인할 수 있다

TroubleShooting

경로들을 지정하여 올바르게 생성한 후 컨테이너를 삭제했다가 다시 설치할 때 MYSQL_ROOT_PASSWORD를 바꾸면 로그인 못한다. 바꾸지마라...
바꾸고 싶다면 로그인하고 안에서 바꿔야한다.

profile
Cloud Engineer

0개의 댓글