Créer une base de données sur docker-composition de démarrage
Je voudrais créer une base de données MySQL à l'aide de variables d'environnement dans le menu fixe-composer.fichier yml, mais ça ne fonctionne pas. J'ai le code suivant:
# 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"
Quelqu'un pourrait-il expliquer la fonction de ce vars?
OriginalL'auteur Pedrog | 2017-04-10
Vous devez vous connecter pour publier un commentaire.
Il ya aussi une option pour fournir un fichier init pour
mysql
conteneur qui sera appliquée à chaque fois qu'un conteneur est créé.Tel fichier pourrait contenir votre base de données initiale, la structure et les données - par exemple:
consultez la mise à jour de réponse. Depuis
/data/application/init.sql
est un argument de mysql qui s'exécute dans le conteneur, le chemin d'accès doit être "interne". Le fichier peut y arriver en étant montés.puis-je exécuter plusieurs fichier sql?
Il en résultera une directory appelé
/data/application/init.sql
sur le conteneur, moins le fichier existe déjà sur le récipient. Sur le montage d'un fichier hôte d'apparaître comme un fichier dans le conteneur des lecture sur le bind montures à la docker docs.OriginalL'auteur marszczybrew
La base de données est probablement déjà initialisé et la configuration est stockée dans
/var/lib/mysql
. Depuis, vous avez défini un volume de l'emplacement de la config va survivre à un redémarrage. MySQL image ne sera pas reconfigurer la base de données de plus et plus de nouveau, il ne fait qu'une seule fois.volumes:
- dbdata:/var/lib/mysql
Si votre base de données est vide, vous pouvez réinitialiser la base de données en effectuant
docker-compose down -v
où la-v
supprime les volumes définis dans le volume de la section. Voir https://docs.docker.com/compose/reference/down/. Sur la prochainedocker-compose up
MySQL image de recommencer et d'initialiser la base de données avec la configuration que vous avez fournie par la section de l'environnement.Merci beaucoup monsieur! Je n'arrivais pas à importer ma base de données sql fichier gz automatiquement depuis le volume a déjà été créé sans lui la première fois. L'argument-v corrigé cela.
Oh mes jours c'est très utile. J'ai passé la meilleure partie de toute une journée de travail à essayer de comprendre pourquoi docker n'était pas de la création de la DB. (Il a été supprimé). Ce qu'il est corrigé. Étonnamment faire
docker stop $(docker ps -a -q)
,docker rm $(docker ps -a -q)
etdocker rmi $(docker images -q)
n'a PAS de solution à ce. Je ai pensé à la destruction, tout aurait fonctionné.OriginalL'auteur Sebastiaan Renkens
De répondre à votre question ...
Une chose que j'utilise pour faire lors de la construction d'un nouveau conteneur docker est de comprendre ce que l'image que je tire de fait lorsqu'elle est bâtie.
Dans votre menu fixe-composer.yml vous avez cette
C'est l'image que vous tirez de, "mysql:5.7"
Dockerhub est un référentiel dans lequel vous pouvez trouver les informations de ces images.
Faire une recherche google "mysql:5.7 dockerhub"
Premier résultat est https://hub.docker.com/_/mysql/
Là, vous avez votre image 5.7, si vous cliquez sur 5.7 vous avez cette
https://github.com/docker-library/mysql/blob/607b2a65aa76adf495730b9f7e6f28f146a9f95f/5.7/Dockerfile
Qui est le Dockerfile de l'image, vous pouvez avoir un regard sur des choses intéressantes qui se produisent lors de la construction de l'image.
Un de ce est le point d'entrée ["docker-entrypoint.sh"]
C'est le fichier qui a exécuté lorsque l'image est prête
Je vous remonter d'un niveau dans le repo vous verrez ce fichier
https://github.com/docker-library/mysql/tree/607b2a65aa76adf495730b9f7e6f28f146a9f95f/5.7
La vous pouvez voir vos variables d'environnement utilisées pour créer une nouvelle base de données, etc...
OriginalL'auteur jonhid
Pour la version 2 de docker-composer vous aurez
.yml
ou.yaml
peut ressembler à ceci:démarrer avec
docker-compose up -d
et vérifier:
Votre volume sera persisté dans le panneau de volume
nameoffolder_dbdata
(/var/lib/docker/volumes/...
)Je ne comprends pas tout de votre réponse/question, mais oui, l'env de la var de la création d'une base de données avec le nom de homestead. De vérifier ma réponse quand j'ai effectuer montrer les bases de données. Vous voyez le homestead db, aussi je suis authentification sur que db (-p)
J'ai déjà le conteneur. Je veux créer la base de données pour le conteneur. Pouvez-vous svp me dire comment créer le menu fixe-composition de fichier pour le conteneur?
Utiliser une image qui contient une base de données dans le conteneur comme mysql ou postgres? si vous souhaitez installer votre propre db que vous avez à écrire un Dockerfile et construire l'image dans le menu fixe-composer
OriginalL'auteur lvthillo
Si je comprends votre question correctement, vous voulez avoir un conteneur avec une base de données spécifique en elle. Comme avoir une base de données MySQL contenant avec
CREATE DATABASE mydb
, etc. déjà exécutés. Si vous avez besoin d'utiliserdocker-entrypoint-initdb.d
:https://docs.docker.com/samples/library/mysql/#docker-secrets
Lorsque l'officiel de MySQL conteneur est démarré pour la première fois, une nouvelle base de données doit être créé en premier. Puis il va exécuter des fichiers avec les extensions .sh, .sql et .sql.gz que l'on trouve dans
/docker-entrypoint-initdb.d
. Donc tout ce que vous devez faire est de créer/docker-entrypoint-initdb.d
répertoire et de mettre votre script d'initialisation de là.OriginalL'auteur Gene S