작성
·
402
0
강의에서 권한을 주는 부분을 보기 전에 작성해주신 아래와 같은 Dockerfile을 사용하였을 경우 실행이 되지 않았습니다.
1번
FROM mariadb
ENV MYSQL_ROOT_PASSWORD rlaxogjs8312
ENV MYSQL_DATABASE mydb
COPY ./mysql_data/mysql /var/lib/mysql
EXPOSE 3306
그래서 저는 복사하는 폴더가 문제인가 해서 COPY부분을 아래와 같이 바꿔서 mydb만을 복사하도록 하였습니다.
2번
FROM mariadb
ENV MYSQL_ROOT_PASSWORD rlaxogjs8312
ENV MYSQL_DATABASE mydb
COPY ./mysql_data/mysql/mydb /var/lib/mysql
EXPOSE 3306
이렇게 하였더니 db가 제대로 복사가 되지는 않았지만 로컬에서 접속이 가능하였습니다.
그래서 왜 복사가 안되는거지.. 고민하다가 나머지 강의를 듣고 다시 1번으로 빌드 후 실행한 뒤에는 복사도 잘 되었음을 확인하였습니다.
궁금한 점은 다음과 같습니다.
왜 2번 Dockerfile의 경우 복사는 제대로 되지 않았는데 로컬호스트에서 DB에 접속이 가능했었던 건지 궁금합니다.
만약 COPY가 아니라 VOLUME을 적용해서 한 과거 기억을 되살려보면 권한은 문제가 없었던 것 같은데 권한은 해당 Docker Container에 어떤 이유때문에 적용해야하는 것인지 궁금합니다.
답변 2
1
안녕하세요, 이도원입니다.
문의 하신 내용 중에서, 1번은 기본적인 mariadb의 user 라는 DB를 사용하면서 초기 상태의 mariadb에 접속이 된 것 같습니다. 복사를 시도하려고 했을 때는, 문제가 발생했다고 하는 부분 때문에, /var/lib/mysql 디렉토리에 필요한 기동 파일 및 초기화 관련 파일이 정상적이지 않게 되어서 mariadb에 접속이 되지 않은 것 같습니다.
2번 질문은 COPY는 HOST PC에 있는 폴더(디렉토리)를 직접 복사해서 동일한 내용으로 사용하려는 것인데, 이 부분이 새롭게 만드는 Mariadb 도커 이미지 내에서도 사용할 수 있는 환경이어야지, 정상적인 작동이 될 것 같습니다. 예를 들어, 복사하는 /mysql 관련 데이터 파일에는 존재하지 않는 계정이나 데이터베이스를 사용하게 되면 문제가 되는 부분이라 보시면 좋을 것 같습니다. VOLUME으로 적용하셨을 때는 되었다고 하셨는데, VOLUME을 데이터 마운트 용도로 사용하시면서, Host PC의 파일을 Docker 컨테이너와 공유해서 사용하셨다면, 이것은 복사의 개념이라기 보다는 Host PC의 내용을 같이 사용하는 개념이기 때문에, COPY하고는 조금 다르며, 당시에도 위에서 말씀드린 문제는 동일하게 발생할 수 있을 것 같습니다.
추가 질문사항 있으시면 글 남겨 주세요.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
김태헌님의 질문에 답변 드리겠습니다.
두번째 Dockerfile에서 /var/lib/mysql
에 mydb
폴더만 복사를 시도하는 경우, mariadb 이미지가 기대하는 전체 디렉터리 구조와 파일이 존재하지 않기 때문에, 데이터베이스 파일의 복사는 제대로 이루어지지 않았을 가능성이 큽니다. 하지만, mariadb는 초기화 과정에서 필요한 기본 디렉터리와 파일을 생성할 수 있으며, MYSQL_DATABASE
환경변수를 통해 mydb
데이터베이스를 생성하므로 로컬에서 접속이 가능했던 것으로 추정됩니다.
COPY
를 사용할 경우, 복사하는 파일이나 디렉터리의 권한은 Docker 이미지를 빌드하는 호스트 시스템의 해당 파일 및 디렉터리의 권한을 그대로 반영합니다. VOLUME
을 사용한 경우, 해당 볼륨은 컨테이너에서 관리되며, 볼륨을 사용하는 컨테이너 내부 프로세스의 실행 권한에 맞춰서 권한을 조정할 수 있습니다. 데이터베이스와 같은 서비스를 운영하는 경우, 파일 시스템 권한을 올바르게 설정하지 않으면 데이터베이스 소프트웨어가 파일을 읽거나 쓸 수 없게 되어 문제가 생길 수 있으므로, 적절한 사용자 권한을 설정해야 합니다.
위의 내용으로 궁금증이 해소되셨길 바랍니다. 추가 질문이 있으시면 언제든지 질문해 주세요.
감사합니다!