>

지난 며칠 동안 Docker를 사용하고 있었고 곧 Python-MySQL 웹 응용 프로그램을 Docker로 옮기기를 희망합니다.

의 결론은 Docker 볼륨을 사용해야하고 최근에 엉망이되었다는 것입니다.

에서 직접 볼륨을 생성 할 수 있습니다

$ docker volume create my-vol

도커 실행 호출에서 존재하지 않는 볼륨을 참조하여 간접적으로도 Dockerfile의 COPY 호출을 통해 파일을 복사하지 않고 이러한 볼륨을 .sql 데이터베이스 파일로 채우는 방법을 알 수 없습니다.

나는 .sql 파일을 포함하는 디렉토리 내에 볼륨을 직접 작성하고 (위에서 언급 한 첫 번째 방법) 내 'docker run'호출에서 .sql 파일을 포함하는 디렉토리를 마운트하려고 시도했습니다. 컨테이너 (컨테이너 내부에서 bash 셸을 탐색하여 보았지만) 데이터베이스 포함 mariadb 컨테이너에 연결하는 mariadb 컨테이너를 실행할 때 (mariadb docker readme 파일에서 제안한대로) 표준 데이터베이스 (information_schema) 만 있습니다. , mysql, performance_schema)

기존의 .sql 데이터베이스를 포함하는 볼륨을 어떻게 만들 수 있습니까?


  • 답변 # 1

    도커 컨테이너에서 mariadb로 작업 할 때 이미지는 .sql 실행을 지원합니다.  컨테이너의 첫 시작의 일부로 파일. 이를 통해 데이터베이스에 액세스하기 전에 데이터를 데이터베이스에 푸시 할 수 있습니다.

    mariadb 문서에서 :

    와이즈 비즈 와이즈 비즈

    Initializing a fresh instance

    When a container is started for thefirst time, a new database with the specified name will be created and initialized with the provided configuration variables. Furthermore, it will execute files with extensions  그리고 .sh  그것은    .sql 에서 발견 . 파일이 실행됩니다   알파벳 순서. 다음을 통해 mariadb 서비스를 쉽게 채울 수 있습니다.   해당 디렉토리에 SQL 덤프 마운트 및 사용자 정의 이미지 제공   기여한 데이터. SQL 파일은 기본적으로    .sql.gz 에 의해 지정된 데이터베이스  변수.

    이것은 컨테이너에 데이터를 주입하려는 경우 처음 시작할 때를 의미합니다. 당신의 /docker-entrypoint-initdb.d 에서 MYSQL_DATABASE   Dockerfile  경로 COPY 에서 컨테이너에 파일  -환경 변수 .sql 에 지정한 데이터베이스에서 호출됩니다. .

    이것처럼 :

    /docker-entrypoint-initdb.d/myscript.sql
    
    

    그런 다음 :

    MYSQL_DATABASE
    
    

    데이터베이스 스토리지 관리 방법에 대한 의문이 있습니다. 기본적으로 여기에는 두 가지 옵션이 있습니다.

    <올>

    mariadb가 데이터베이스를 저장하는 호스트에 볼륨 바인딩을 작성하십시오. 그러면 호스트 컴퓨터에서 데이터베이스 저장소 파일에 쉽게 액세스 할 수 있습니다.

    도커 실행 예제 :

    FROM mariadb
    COPY ./myscript.sql /docker-entrypoint-initdb.d/myscript.sql
    
    

    도커 볼륨을 만들어 컨테이너의 저장 위치에 바인딩하십시오. 이것은 docker가 관리하는 볼륨입니다. 이 볼륨은 컨테이너를 다시 시작할 때까지 데이터를 유지합니다.

    docker run -e MYSQL_DATABASE=mydb mariadb
    
    

    또한 mariadb 도커 이미지에 대한 문서에서도 다루고 있습니다. 이 이미지를 사용하려는 경우 위에서 아래로 읽는 것이 좋습니다.

    docker run -v /my/own/datadir:/var/lib/mysql mariadb

관련 자료

  • 이전 asp.net - 이 버전의 Reporting Services에서이 보고서의 정의가 유효하지 않거나 지원되지 않습니다
  • 다음 MongoDB에서 컬렉션을 만들지 않고 Mongoose 모델을 만드는 방법은 무엇입니까?