3

図を使用して、リンクされたドッカーコンテナーのセットのインストールと実行を自動化しようとしています。構成は、MySQL を実行するコンテナーにリンクされた RStudio を実行するコンテナーで構成されているため、RStudio から MySQL データベースにクエリを実行できます。

最初の実行で、ベースの 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 ステップを使用してdbdataコンテナーを作成し、おそらく永続ボリュームをマウントし、それにリンクして、おそらく初期の一部としてデータベースを初期化できるかということfig upです。その後、コンテナーを開始および停止した場合、データベースの初期化ステップを再度実行したくありません。以前にインストールしたデータを含むデータ ボリューム コンテナーにリンクするだけです。

datadirまた、MySQL docker イメージが任意の定義をサポートしているように見えることにも気付きました(エントリポイントを更新して、 /var/lib/docker を想定する代わりに、MySQL 構成から直接 DATADIR を読み取ります)。私が理解しているように、MySQL イメージの現在の定義では、データベース コンテナー内のデータベース コンテンツのマウント (したがって永続化) が妨げられています。これでイメージを作成できるようになるかもしれませmysql_preloadedんが、最新バージョンの MySQL docker スクリプトがまだ dockerhub にプッシュされていないと思います。この代替経路を利用しますか?

4

2 に答える 2

0

独自のバージョンの MySQL docker イメージを展開することはできませんか? MySQL の「アップストリーム」からの公式のものは、https://github.com/mysql/mysql-docker/blob/mysql-server/5.7/Dockerfileで入手でき ます。単純にそのコピーを独自に作成する場合は、VOLUME 行 ( 11行目)そして、あなたはすることができます

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

これにより、実行中の「同一」であるが完全に分離された 2 つのインスタンスが残るはずです。

于 2015-09-08T07:45:21.630 に答える