컨테이너가 가진 문제점
Docker 를 활용하면 특정 프로그램을 컨테이너로 띄울 수 있음
이 프로그램에 기능이 추가되면 새로운 이미지를 만들어서 컨테이너 실행시켜야함
이 때 Docker는 기존 컨테이너에서 변경된 부분을 수정하지 않고, 새로운 컨테이너를 만들어서 통채로 갈아끼움
이때 기존 컨ㄴ테이널르 새로운 컨테이너로 교체되면 기존 컨테이너에서 내부에 있던 데이터도 삭제됨
-> 만약 MySql 을 실행시키는 컨테이너였다면 MySQL 에 저장되어있는 데이터도 삭제됨
따라서 컨테이너 내부에 저장된 데이터가 삭제되면 안되는 경우에는 볼륨이라는 개념을 활용함
Docker Volume이란?
도커 컨테이너에서 데이터를 영속적으로 저장하기 위한 방법
볼륨은 컨테이너 자체의 저장 공간을 사용하지 않고, 호스트 자체의 저장 공간을 공유해서 사용하는 형태
명령어 :
$ docker run -v [호스트의 디렉토리 절대경로]:[컨테이너의 디렉토리 절대경로] [이미지명]:[태그명]
- [호스트의 디렉토리 절대경로] 에 다른 디렉토리가 이미 존재할 경우, 호스트의 디렉토리가 컨테이너의 디렉토리를 덮어씌운다
-

에 디렉토리가 존재하지 않을 경우, 호스트의 디렉터리 절대 경로에 디렉터리를 새로 만들고 컨테이너의 디렉터리에 있는 파일들을 호스트의 디렉터리로 복사해온다.
https://hub.docker.com/_/mysql
mysql - Official Image | Docker Hub
Quick reference Supported tags and respective Dockerfile links 9.2.0, 9.2, 9, innovation, latest, 9.2.0-oraclelinux9, 9.2-oraclelinux9, 9-oraclelinux9, innovation-oraclelinux9, oraclelinux9, 9.2.0-oracle, 9.2-oracle, 9-oracle, innovation-oracle, oracle8
hub.docker.com
-e : 환경변수 설정
MYSQL은 비밀번호를 최초에 설정하지 않으면 에러가 발생함
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag
호스트 컴퓨터의 원하는 경로에 MySql 데이터를 저장한다.
$ cd /Users/jaeseong/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/jaeseong/Documents/Develop/docker-mysql/mysql_data:/var/lib/mysql -d mysql
MySql에 접속해서 데이터 베이스 만들기
$ docker exec -it [MySQL 컨테이너 ID] bash
$ mysql -u root -p
mysql> show databases;
mysql> create database mydb;
mysql> show databases;
컨테이너 종료 후 다시 만들어보기
# 컨테이너 종료
$ docker stop [MySQL 컨테이너 ID]
$ docker rm [MySQL 컨테이너 ID]
# 컨테이너 생성
$ docker run -e MYSQL_ROOT_PASSWORD=password123 -p 3306:3306 -v /Users/jaeseong/Documents/Develop/docker-mysql/mysql_data:/var/lib/mysql -d mysql
$ docker exec -it [MySQL 컨테이너 ID] bash
$ mysql -u root -p
mysql> show databases; # 아까 생성한 데이터베이스가 그대로 존재하는 걸 확인할 수 있다.
컨테이너 삭제 후 다시 만들어보기
# 컨테이너 종료
$ docker stop [MySQL 컨테이너 ID]
$ docker rm [MySQL 컨테이너 ID]
# 비밀번호 바꿔서 컨테이너 생성
$ docker run -e MYSQL_ROOT_PASSWORD=pwd1234 -p 3306:3306 -v /Users/jaeseong/Documents/Develop/docker-mysql/mysql_data:/var/lib/mysql -d mysql
$ docker exec -it [MySQL 컨테이너 ID] bash
$ mysql -u root -p # 접속이 안 됨...
'Docker' 카테고리의 다른 글
Next.js 를 Docker로 배포하기 (1) | 2025.03.22 |
---|---|
DockerFile? (0) | 2025.03.22 |
Docker CLI (0) | 2025.03.16 |
Docker 설치 (0) | 2025.03.15 |
Docker , Container, Image 란? (0) | 2025.03.15 |