작성
·
101
0
- 본 강의 영상 학습 관련 문의에 대해 답변을 드립니다. (어떤 챕터 몇분 몇초를 꼭 기재부탁드립니다)
- 이외의 문의등은 평생강의이므로 양해를 부탁드립니다
- 현업과 병행하는 관계로 주말/휴가 제외 최대한 3일내로 답변을 드리려 노력하고 있습니다
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
안녕하세요, 강사님. 항상 좋은 강의 잘 듣고 있습니다.
강의에서 docker-compose 작성해서 테스트하는 방법을 배웠습니다.
version: "3"
services:
db: image: mysql:5.7
restart: always
volumes: - ./mysqldata:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=funcoding
- MYSQL_DATABASE=fundb
ports: - "3306":"3306"
이런식의 docker-compose.yml을 작성을 했고,
볼륨 부분 설명중에 mysqldata 볼륨을 생성한 적이 없지만
이 docker-compose를 up하게 되면 실행되면서 /var/lib/mysql -> ./mysqldata 로 생성을 해준다고 설명을 해주신 것까진 이해가 됩니다.
앞선 강의에서도 -v 옵션을 통해서 배웠구요. 여기서 제가 궁금한건... 음.. 일단,
volumes를 작성할 때 순서는 hostPC의 볼륨:docker container 내의 볼륨 순서로 되는 것으로 이해를 했구요, 이거는 -v 옵션도 마찬가지인거일 테구요.
그렇다면, 방향은 어떻게 설정이 되는건가요? 지금같은 경우엔 mysqldata볼륨이 없어서 오른쪽에서 왼쪽으로 이동을 해준건 이해를 했습니다. 하지만, 처음 저희가 /home/ubuntu/2021_DEV_HTML 에서 /usr/local/apahce2/htdocs 로 파일을 옮겨줄 때에는 둘 다 볼륨이 있는 상태였었는데 호스트pc에서 컨테이너 경로로 복사를 해줬습니다. 그래서 좀 혼돈이 오는 것 같습니다. 볼륨 옵션을 사용할 때의 복사의 from 과 to는 어떻게 설정이 되는 것인지 궁금합니다. 감사합니다.
답변 1
0
안녕하세요. 답변 도우미입니다.
안녕하세요! 강의 잘 들어주셔서 감사합니다.
해당 기능이 폴더의 상태에 따라서, 다르게 동작하는 케이스가 있어서, 그 중에 정확히 동작하고, 활용에 도움이 되는 형태를 중심으로 이야기드리긴 했는데요. 여러 케이스가 있을 수 있긴 합니다. 다음과 같이 관련 케이스에 대해 상세히 기재를 해드립니다. 참고가 되면 좋을 것 같습니다.
Docker에서 볼륨을 설정할 때 볼륨 옵션을 사용할 때 데이터를 복사하는 방향과 관련된 몇 가지 개념을 정리해 드리겠습니다.
### Docker 볼륨의 기본 개념
1. 볼륨 마운트 순서: host_path:container_path
형태로 작성됩니다.
- host_path
: 호스트 머신의 경로
- container_path
: 컨테이너 내의 경로
2. 데이터 복사의 방향: 일반적으로는 호스트 머신의 데이터를 컨테이너로 마운트하지만, 초기에는 복사되는 데이터의 방향이 상황에 따라 다를 수 있습니다.
### 데이터 복사 규칙
1. 호스트 디렉토리가 비어 있는 경우:
- docker run
이나 docker-compose up
을 처음 실행할 때, 호스트 디렉토리가 비어 있다면, 컨테이너의 디렉토리 내의 기본 데이터가 호스트 디렉토리로 복사됩니다.
- 예: /home/ubuntu/2021_DEV_HTML
이 비어 있고 /usr/local/apache2/htdocs
에 기본 파일이 있을 때, /usr/local/apache2/htdocs
의 내용이 /home/ubuntu/2021_DEV_HTML
로 복사됩니다.
2. 호스트 디렉토리가 비어 있지 않은 경우:
- 호스트 디렉토리에 이미 파일이 있는 경우, 그 파일들이 컨테이너 내의 디렉토리에 마운트됩니다.
- 이 경우, 호스트 디렉토리의 내용이 컨테이너 내의 디렉토리 내용을 덮어쓰게 됩니다.
### 요약
- 볼륨 마운트의 방향: host_path:container_path
로 마운트됩니다.
- 데이터 복사:
- 호스트 디렉토리가 비어 있으면, 컨테이너의 디렉토리 내용이 호스트 디렉토리로 복사됩니다.
- 호스트 디렉토리가 비어 있지 않으면, 호스트 디렉토리의 내용이 컨테이너 디렉토리를 덮어씁니다.
### 예시 설명
1. 첫 번째 예시:
- volumes: - ./mysqldata:/var/lib/mysql
- ./mysqldata
가 비어 있다면, mysql:5.7
이미지 내의 /var/lib/mysql
디렉토리 내용이 ./mysqldata
로 복사됩니다.
- 이후에는 ./mysqldata
가 컨테이너 내 /var/lib/mysql
디렉토리로 마운트되므로, 호스트에서 변경된 내용이 컨테이너에서 사용됩니다.
2. 두 번째 예시:
- /home/ubuntu/2021_DEV_HTML:/usr/local/apache2/htdocs
- /home/ubuntu/2021_DEV_HTML
이 비어 있다면, 컨테이너 내 /usr/local/apache2/htdocs
의 내용이 호스트로 복사됩니다.
- /home/ubuntu/2021_DEV_HTML
에 파일이 있다면, 그 내용이 컨테이너의 /usr/local/apache2/htdocs
로 마운트되어 컨테이너 내 파일을 덮어씁니다.
감사합니다.
답변 감사합니다. 확실히 이해됐습니다!