Ich lerne docker in diesen Tagen, und beginnt mit dem Erstellen von mysql-Bild von mir.Wie führe ich das Init-Skript nur einmal nach dem Andocken aus, aber vor dem Einsprungpunkt?
Dockerfile:
FROM centos
MAINTAINER Michael
ENV REFRESHED_AT 2016-07-29
RUN yum install -y mysql mariadb-server
VOLUME /var/lib/mysql
ENTRYPOINT ["/usr/libexec/mysqld", "--user=root"]
EXPOSE 3306
Docker Fahrbefehl
docker run -d --name mysql -v /root/docker/mysql/data:/var/lib/mysql -p 3306:3306 michael/mysql
Dies gab einen Fehler, da ich exec müssen mysql_install_db
erste DB init. Aber ich konnte RUN mysql_install_db
in der Dockerfile nicht hinzufügen, da ich Volume
als externen Datenspeicher verwenden möchte.
Also wie soll ich das tun?
Ich weiß, es gibt ein offizielles Bild mit dem Namen mysql
. Ich möchte das nur als Übung machen.
UPDATE: Dank @Pieter. Ich habe schließlich diese durch seine Lösung verwendet, die bieten eine weitere entrypoint.sh
kombiniert & Init-Skripte starten dann machen es so ENTRYPOINT in Dockerfile:
FROM centos
MAINTAINER Michael
ENV REFRESHED_AT 2016-07-29
RUN yum install -y mysql mariadb-server
VOLUME /var/lib/mysql
COPY entrypoint.sh /usr/local/bin/
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3306
entrypoint.sh
#!/bin/bash
if [ ! -d "/var/lib/mysql/mysql" ]; then #check whether the DB is initialized.
echo 'Initializing database'
mysql_install_db
echo 'Database initialized'
fi
/usr/libexec/mysqld --user=root
Docker Lauf
docker run -d --name mysql -v /root/docker/mysql/data:/var/lib/mysql -p 3306:3306 michael/mysql
Und das gibt eine generische Lösung für ein solches Szenario.
Danke! du hast meinen Tag gerettet. – Michael