컨테이너가 가진 문제점
Docker를 활용하면 특정 프로그램을 컨테이너로 띄울 수 있다.
이 프로그램에 기능이 추가되면 새로운 이미지를 만들어서 컨테이너를 실행시켜야 한다.
이 때, Docker는 기존 컨테이너에서 변경된 부분을 수정하지 않고, 새로운 컨테이너를 만들어서 통째로 갈아끼우는 방식으로 교체를 한다.-> 이런 특징 때문에 기존 컨테이너를 새로운 컨테이너로 교체하며ㅛㄴ 기존 컨테이너 내부에 있던 데이터도 같이 삭제된다.
만약 이 컨테이너가 MySQL을 실행시키는 컨테이너였다면 MySQL에 저장된 데이터도 같이 삭제됨.
도커는 컨테이너 기반 가상화 기술로 애플리케이션을 어디서든 실행 가능하게 만들어준다.
하지만 컨테이너는 기본적으로 "휘발성"이다.
즉, 컨테이너가 삭제되면 그 안에 저장된 모든 데이터도 같이 사라진다.
이 특성은 다음과 같은 문제를 낳는다:
이러한 문제를 해결하기 위해 도커는 컨테이너 외부에 데이터를 저장하는 방식, 즉 "볼륨(Volume)"이라는 개념을 도입했다.
도커의 볼륨(Volume) 이란, 도커 컨테이너에서 데이터를 영속적으로 저장하기 위한 방법이다.
볼륨(Volume)은 컨테이너 자체의 저장 공간을 사용하지 않고, 호스트 자체의 저장 공간을 공유해서 사용하는 형태다.
기술적으로는 볼륨은 호스트의 특정 디렉토리에 저장되며, 도커가 이 위치를 관리한다.
다음과 같은 상황에서 Docker Volume은 필수적으로 사용된다:
데이터베이스를 컨테이너로 실행할 때
업로드 파일이 존재하는 서비스
로그 분석이나 로컬 저장소가 필요한 경우
컨테이너 간의 파일 공유
해당 방식으로 연결해주는 명령어 >
$ docker run -v [호스트의 디렉토리 절대경로]:[컨테이너의 디렉토리 절대경로] [이미지명]:[태그명]
(docker run -e MYSQL_ROOT_PASSWORD=비밀번호 -p 3306:3306 -v /내컴퓨터디렉토리경로:/var/lib/mysql -d mysql
) 이런식으로 작성된다.
/내컴퓨터디렉토리경로
-> [호스트의 디렉토리 절대경로]/var/lib/mysql
-> [컨테이너의 디렉토리 절대경로] mysql 경로-e MYSQL_ROOT_PASSWORD=비밀번호
-> 환경변수 설정-p 3306:3306
-> 포트설정(외부에서 MySQL 접속 가능하게 포트 3306 개방)-d
-> 백그라운드 실행즉, MySQL 데이터 저장소(/var/lib/mysql)를 내 컴퓨터의 디렉토리와 연결.
+외부에서 MySQL 접속 가능하게 포트 3306 개방.
+루트 비밀번호 환경 설정 해줌
해주고있음 ㅇ
https://hub.docker.com/_/mysql
사용하는 명령어 종류에 따라서MySQL 컨테이너 실행 옵션이 바뀜
[호스트의 디렉토리 절대경로]
에 디렉토리가 존재하는 경우호스트의 디렉터리가 컨테이너의 디렉터리를 덮어씌운다.
[호스트의 디렉토리 절대경로]
에 디렉토리가 존재하지 않는 경우호스트의 디렉터리 절대 경로에 디렉터리를 새로 만들고 컨테이너의 디렉터리에 있는 파일들을 호스트의 디렉터리로 복사해온다.
출처 >
https://velog.io/@psi7218/Docker-%EB%8F%84%EC%BB%A4-%EB%B3%BC%EB%A5%A8-%EB%B0%8F-DB%EC%97%B0%EA%B2%B0
https://velog.io/@haeny01/Docker-데이터-관리1-Volume-과-Bind-mounts
https://hub.docker.com/_/mysql
https://youtu.be/XQ_jdJ8jSNk?si=gHmRvDI6MnzWNMJF <시리즈임
볼륨 내용을 찾는데 BindMount라는 용어가 같이 묶여서 설명되는것이 많다.
Bind Mount는 도커에서 데이터를 공유할 때 사용하는 볼륨의 한 종류인데, 특히 개발할 때 로컬 파일을 컨테이너 안에서 바로 반영하고 싶을 때 많이 쓴다고함.
호스트(로컬 컴퓨터)의 특정 디렉토리를 컨테이너 내부 경로에 연결(mount) 시켜주는 방식
즉 , 내 컴퓨터 디렉토리와 컨테이너 안의 디렉토리가 그대로 연결돼 있어서
내가 VSCode에서 수정한 코드가 즉시 컨테이너 안에서도 반영됨
나머진 나중에
출처 >
https://velog.io/write?id=7c3d36be-33bd-4e9b-a61c-6afa3aee00d2
너무 유익한 글이에요 꼼꼼히 읽어보겠습니다