컨테이너가 가진 문제점
- 프로그램에 기능이 추가되면 새로운 이미지를 만들어서 컨테이너를 실행시켜야 한다. 이 때, Docker는 기존 컨테이너에서 변경된 부분을 수정하지 않고, 새로운 컨테이너를 만들어서 통째로 갈아끼우는 방식으로 교체를 한다. 이런 특징 때문에 기존 컨테이너를 새로운 컨테이너로 교체하면, 기존 컨테이너 내부에 있던 데이터도 같이 삭제된다.
Docker Volume(도커 볼륨) - 도커 컨테이너에서 데이터를 영속적으로 저장하기 위한 방법이다.
- 볼륨은 컨테이너 자체의 저장 공간을 사용하지 않고, 호스트 자체의 저장 공간을 공유해서 사용하는 형태이다.
볼륨을 활용해 MySQL 컨테이너 띄우기
1. MySQL 컨테이너 띄우기
$ cd /Users/zoaseo/Documents/Develop
$ mkdir docker-mysql # MySQL 데이터를 저장하고 싶은 폴더 만들기
# docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v {호스트의 절대경로}/mysql_data:/var/lib/mysql -d mysql
$ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v /Users/zoaseo/Documents/Develop/docker-mysql/mysql_data:/var/lib/mysql -d mysql
- pwd 명령어로 볼륨으로 사용하고자 하는 경로를 확인한 뒤 입력해주자.
※ mysql_data 디렉토리를 미리 만들어 놓으면 안된다. 미리 만들어 놓은 경우, 기존 컨테이너의 /var/lib/mysql 파일들을 전부 삭제한 뒤에 mysql_data로 덮어씌워 버린다.
2. MySql 컨테이너에 접속해서 데이터베이스 만들기
$ docker exec -it [MySQL 컨테이너 ID] bash
$ mysql -u root -p
mysql> show databases;
mysql> create database mydb;
mysql> show databases;
3. 컨테이너 종료 후 다시 생성해보기
# 컨테이너 종료
$ docker stop [MySQL 컨테이너 ID]
$ docker rm [MySQL 컨테이너 ID]
# 컨테이너 생성
$ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v /Users/zoaseo/Documents/Develop/docker-mysql/mysql_data:/var/lib/mysql -d mysql
$ docker exec -it [MySQL 컨테이너 ID] bash
$ mysql -u root -p
mysql> show databases; # 아까 생성한 데이터베이스가 그대로 존재하는 걸 확인할 수 있다.
- 생성한 데이터베이스가 그대로 존재한다.
※ MySQL 컨테이너 삭제하고 다시 띄워보기
# 컨테이너 종료
$ docker stop [MySQL 컨테이너 ID]
$ docker rm [MySQL 컨테이너 ID]
# 비밀번호 바꿔서 컨테이너 생성
$ docker run -e MYSQL_ROOT_PASSWORD=pwd1234 -p 3306:3306 -v /Users/zoaseo/Documents/Develop/docker-mysql/mysql_data:/var/lib/mysql -d mysql
$ docker exec -it [MySQL 컨테이너 ID] bash
$ mysql -u root -p # 접속이 안 됨...
- 비밀번호를 바꿨지만 접속이 안된다. 그 이유는 초기에 저장된 비밀번호가 계속 저장이 되기 때문이다.
'개발이 좋아서 > Docker가 좋아서' 카테고리의 다른 글
Docker Compose를 활용해 2개 이상의 컨테이너 관리하기 (1) | 2025.01.23 |
---|---|
Docker Compose를 활용해 컨테이너 관리하기 (0) | 2025.01.23 |
Dockerfile 활용해 이미지 직접 만들기 (0) | 2025.01.23 |
Docker CLI 익히기 (0) | 2025.01.22 |
Docker란? (0) | 2025.01.22 |