2015-01-30 8 views
3

그림을 사용하여 연결된 도커 컨테이너 세트 설치 및 실행을 자동화하려고합니다. 구성은 RStudio에서 MySQL 데이터베이스를 쿼리 할 수 ​​있도록 MySQL을 실행하는 컨테이너에 연결된 RStudio를 실행하는 컨테이너로 구성됩니다.무화과를 사용하여 고정 데이터베이스를 초기화 할 수 있습니까?

처음 실행하면 기본 MySQL 이미지에서 MySQL 컨테이너를 만들고 사용자 및 데이터베이스로 채우고 싶습니다. 이 같은 명령 줄 무언가에서 : 나는 미리로드 된 데이터와 데이터베이스 이미지를 잡아 수 있다면

#Get the latest database file 
wget -P /tmp http://ergast.com/downloads/f1db.sql.gz && gunzip -f /tmp/f1db.sql.gz 

#Create the database container with user, password and database 
docker run --name ergastdb -e MYSQL_USER=ergast -e MYSQL_ROOT_PASSWORD=mrd -e MYSQL_DATABASE=f1db -d mysql 

#Populate the database 
docker run -it --link=ergastdb:mysql -v /tmp:/tmp/import --rm mysql sh -c 'exec mysql -h$MYSQL_PORT_3306_TCP_ADDR -P$MYSQL_PORT_3306_TCP_PORT -uergast -pmrd f1db < /tmp/import/f1db.sql' 

#Fire up RStudio and link to the MySQL db 
docker run --name f1djd -p 8788:8787 --link ergastdb:db -d rocker/hadleyverse 

, 나는 다음과 같은 fig.yml 스크립트 같은 것을 요소를 연결할 수 있다고 생각?

gdrive: 
    command: echo created 
    image: busybox 
    volumes: 
     - "~/Google Drive/shareddata:/gdrive" 

dbdata: 
    image: mysql_preloaded 
    environment: 
     MYSQL_USER=ergast 
     MYSQL_ROOT_PASSWORD=mrd 
     MYSQL_DATABASE=f1db 

rstudio: 
    image: rocker/hadleyverse 
    links: 
     - dbdata:db 
    ports: 
     - "8788:8787" 
    volumes_from: 
     - gdrive 

내 질문은 내가 아마 초기 fig up의 한 부분으로, 여기에, 아마도 영구적 볼륨을 마운트의 dbdata 컨테이너를 만듭니다 링크를 원샷 무화과 단계를 사용하여 데이터베이스를 초기화 할 수있다. 그런 다음 컨테이너를 시작하고 중지하면 이전에 설치 한 데이터가 들어있는 데이터 볼륨 컨테이너에 연결하기 만하면 db 초기화 단계를 다시 실행하고 싶지 않습니다.

또한 MySQL 도커 이미지는 임의의 datadir 정의 (Update entrypoints to read DATADIR from the MySQL configuration directly instead of assuming /var/lib/docker)를 지원하는 것처럼 보입니다. 내가 알기에, MySQL 이미지의 현재 정의는 데이터베이스 컨테이너 내에 데이터베이스 컨텐츠를 마운트 (그리고 따라서 유지)하는 것을 방지한다. 이것이 mysql_preloaded 이미지를 만드는 것이 가능할 수도 있지만, MySQL 도커 스크립트의 최신 버전이 dockerhub에 아직 푸시되지 않았다고 생각합니다. 그리고 무화과를 어떻게 사용할 수 있을지 생각할 수 없습니다. 이 대안의 통로를 이용하려면?

답변

0

일부 옵션 :

  1. 편집 기본 이미지 명령/엔트리 포인트와 다른 사용자 정의 명령을 실행할 수있는 fig.yml.

    http://www.fig.sh/yml.html (예)에서 : command: bundle exec thin -p 3000

  2. 로컬 컨테이너를 시작

    , 수정 한 다음 새 이미지로 커밋합니다.

  3. 사용자 정의 초기화를 수행하기 위해 MySQL 이미지 docker-entrypoint.sh 파일을 수정하십시오.

    https://github.com/docker-library/mysql/blob/567028d4e177238c58760bcd69a8766a8f026e2a/5.7/docker-entrypoint.sh

+2

그러나 docker-entrypoint.sh를 사용하여 db 컨테이너를 사용자 정의하는 이유는 무엇입니까? Isnt psychemedia의 시도가 db 컨테이너를 고유하지 않게 유지하고 db를 실행시 또는 docker compose/fig better practice로 초기화 했습니까? 또는 '명령 :'이 (가) 'exec mysql ...'과 호환되지 않습니까? – Tom

0

당신은 MySQL의 고정 표시기 이미지의 자신의 버전을 출시 할 수 없습니다? MySQL은 "상류"에서 공식 하나는 단순히 그 자신의 복사본을 만들 경우, 볼륨 라인 (라인 11)를 제거 무엇 https://github.com/mysql/mysql-docker/blob/mysql-server/5.7/Dockerfile 에서 볼 수 있습니다 그리고 당신은

docker build -t my_mysql . 
docker run -d --name=empty_db my_mysql ... 
# add data to the database running in the container 
docker commit empty_db primed_db 
docker rm -v empty_db 

docker run -d --name=instance1 primed_db 
docker run -d --name=instance2 primed_db 

두 실행 당신을 두어야 할 수있는 "동일"하지만 완전히 격리 된 인스턴스.