0️⃣ 개요
[문제 상황]
⚒️ Docker 컨테이너의 파일 시스템은 해당 컨테이너의 격리된 환경 내에 존재하며, 컨테이너가 삭제되면 해당 데이터도 함께 삭제됩니다.
⚒️ Docker 컨테이너는 각각 독립적인 파일 시스템을 가지고 있기 때문에, 서로 다른 컨테이너 간에는 파일 시스템을 직접 공유할 수 없습니다.
이를 해결하기 위해, Docker 컨테이너 간에 데이터를 공유할 수 있고 영속적으로 저장하는 Docker Volume에 대해 알아보겠습니다.
docker volume이란 컨테이너 내부의 데이터를 외부로 링크를 걸어주는 기능입니다.
외부의 데이터가 변경되면 컨테이너 내부의 데이터도 수정됩니다. 또한 컨테이너가 삭제되어도 외부의 데이터는 삭제되지 않습니다.
1️⃣ Docker Hub에서 이미지 가져오기
docker pull {이미지명}
# docker pull httpd
2️⃣ 컨테이너 실행하기
docker run -p {외부포트}:{내부포트} --name {컨테이너명} -v {컨테이너에 매핑할 파일 경로}:{컨테이너의 디렉토리 경로} {이미지}
# docker run -p 8888:80 --name study -v /Users/Docker:/usr/local/apache2/htdocs httpd
- -p: 포트포워딩
- --name: 컨테이너 이름 설정
- -v: 볼륨 설정
마운트된 볼륨을 통해 컨테이너 내에서 파일을 읽고 쓸 수 있습니다. 이렇게 작업한 데이터는 도커 호스트의 파일 시스템에 저장되므로 컨테이너가 종료되더라도 보존됩니다!
3️⃣ 컨테이너 내 명령어 실행
docker exec -it {컨테이너명} /bin/sh
cat htdocs/index.html
# docker exec -it study /bin/sh
- docker exec: 도커 컨테이너에 접속하는 명령어
- -i: STDIN 표준 입출력
- -t: 가상 tty를 통해 접속
htdocs/index.html(컨테이너 내부 데이터)의 내용이 /Users/Docker/index.html (마운트된 경로) 과 같은 것을 확인해볼 수 있다.
localhost 접속