2017-04-10 10 views
1

docker-compose.ymlファイルの環境変数を使用してMySQLデータベースを作成したいが、動作していない。私は次のコードを持っています:docker-composeの起動時にデータベースを作成する

# The Database 
database: 
    image: mysql:5.7 
    volumes: 
    - dbdata:/var/lib/mysql 
    restart: always 
    environment: 
    MYSQL_ROOT_PASSWORD: secret 
    MYSQL_DATABASE: homestead 
    MYSQL_USER: root 
    MYSQL_PASSWORD: secret 
    ports: 
    - "33061:3306" 

誰かがこのヴァルスの機能を説明できますか?ドッキングウィンドウ-構成のバージョン2のために

答えて

3

あなたは.ymlまたは.yamlは次のように見ることができます:

version: '2' 
volumes: 
dbdata: 

services: 
mysql: 
    image: mysql:5.7 
    container_name: mysql 
    volumes: 
    - dbdata:/var/lib/mysql 
    restart: always 
    environment: 
    - MYSQL_ROOT_PASSWORD=secret 
    - MYSQL_DATABASE=homestead 
    - MYSQL_USER=root 
    - MYSQL_PASSWORD=secret 
    ports: 
    - "33061:3306" 
docker-compose up -d でそれを起動して確認し

$ docker ps 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS      NAMES 
a3567fb78d0d  mysql:5.7   "docker-entrypoint..." 2 minutes ago  Up 2 minutes  0.0.0.0:33061->3306/tcp mysql 

docker exec -it a3567fb78d0d bash 
[email protected]:/# mysql -u root -p homestead 
Enter password: 
Welcome to the MySQL monitor. Commands end with ; or \g. 
Your MySQL connection id is 7 
Server version: 5.7.17 MySQL Community Server (GPL) 

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. 

Oracle is a registered trademark of Oracle Corporation and/or its 
affiliates. Other names may be trademarks of their respective 
owners. 

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 

mysql> show databases; 
+--------------------+ 
| Database   | 
+--------------------+ 
| information_schema | 
| homestead   | 
| mysql    | 
| performance_schema | 
| sys    | 
+--------------------+ 
5 rows in set (0.00 sec) 

あなたのボリュームがで​​永続化されますドッカーボリュームnameoffolder_dbdata/var/lib/docker/volumes/...

+0

それは私が求めているものではありませんが、面白いです。 envinronment varsがデータベースを作成するのかどうか疑問に思う。なぜなら、docker-compose.ymlの図ではデータベース名はなぜですか? – Pedrog

+1

私はあなたの回答/質問を完全に理解していませんが、はい、env varはhomesteadという名前のデータベースを作成しています。ショーデータベースを実行するときに私の答えをチェックしてください。あなたはホームステッドのDBを見て、私はそのdb(-p)を認証しています – lvthillo

+0

私はすでにコンテナを持っています。私はコンテナのデータベースを作成したい。コンテナのドッカー作成ファイルを作成する方法を教えてください。 –

4

Th eデータベースはすでに初期化されており、構成は/var/lib/mysqlに格納されています。その場所のボリュームを定義したので、configは再起動後も存続します。 MySQLイメージはデータベースを何度も何度も再構成することはありません。

volumes: - dbdata:/var/lib/mysql

データベースが-vがボリュームセクションで定義されたボリュームを削除する場所をdocker-compose down -vを実行して、データベースをリセットすることができます空の場合。 https://docs.docker.com/compose/reference/down/を参照してください。次のdocker-compose upでは、MySQLイメージが新しく開始され、環境セクションを介して提供された設定でデータベースが初期化されます。

+0

Oh yeah!本当にありがとう、それはenvから価値を得ているからです。ヴァルス。 – Pedrog

0

コンテナが作成されるたびに適用されるmysqlコンテナの初期化ファイルを提供するオプションもあります。

database: 
    image: mysql:5.7 
    ports: 
     - "33061:3306" 
    command: --init-file /data/application/init.sql 
    environment: 
     MYSQL_ROOT_PASSWORD: root 
     MYSQL_ROOT_PASSWORD: secret 
     MYSQL_DATABASE: homestead 
     MYSQL_USER: root 
     MYSQL_PASSWORD: secret 

このようなファイルは、データベースの初期構造とデータを含めることができます - 例えば:

CREATE DATABASE IF NOT EXISTS dev; 
CREATE DATABASE IF NOT EXISTS test; 
USE dev; 
CREATE TABLE IF NOT EXISTS (...); 
0

私が正しくあなたの質問を理解していれば、あなたはそれで特定のデータベースとのコンテナを持つようにしたいです。同様に既に実行されているCREATE DATABASE mydbなどのMySQLコンテナがあります。使用する必要がある場合docker-entrypoint-initdb.dhttps://docs.docker.com/samples/library/mysql/#docker-secrets

正式なMySQLコンテナが最初に起動されると、新しいデータベースが最初に作成されます。その後、/docker-entrypoint-initdb.dにある拡張子.sh、.sql、.sql.gzを持つファイルが実行されます。ですから、/docker-entrypoint-initdb.dディレクトリを作成してそこに初期化スクリプトを入れてください。あなたの質問に答える

0

...私は新しいドッキングウィンドウコンテナを構築する際に行うために使用

ことの一つは、私がから引く画像を建てるされたときに何をするかを理解しています。お使いのドッキングウィンドウ-compose.ymlのTOUで

この

# The Database 
database: 
    image: mysql:5.7 

を持っているこれは、あなたが「、からのmysql引くイメージである:5。7"

Dockerhubは、この画像の情報を見つけることができるリポジトリであるGoogle検索

をください。 "のmysql:5.7 dockerhub"

最初の結果は、あなたのイメージを持っているがありhttps://hub.docker.com/_/mysql/

です5.7、あなたは5.7をクリックした場合は、この

https://github.com/docker-library/mysql/blob/607b2a65aa76adf495730b9f7e6f28f146a9f95f/5.7/Dockerfile

を持っていますDockerfileをイメージから作成すると、イメージを構築するときに起こる面白いことを見ることができます。

これの一つは、この画像が

準備ができているとき、私はあなたがレポの1つの上のレベルアップを行くあなたがこれを見ます実行してしまったファイルであるENTRYPOINT [「docker-entrypoint.sh」]

です

https://github.com/docker-library/mysql/tree/607b2a65aa76adf495730b9f7e6f28f146a9f95f/5.7

を提出あなたの環境変数が新しいデータベースなどを作成するために使用されて見ることができますザ・...

file_env 'MYSQL_DATABASE' 
     if [ "$MYSQL_DATABASE" ]; then 
      echo "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` ;" | "${mysql[@]}" 
      mysql+=("$MYSQL_DATABASE") 
fi 
関連する問題