How to execute init script only once after starting docker, but before entry point?

I am studying docker these days and start by creating a mysql image myself.

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 launch command

docker run -d --name mysql -v /root/docker/mysql/data:/var/lib/mysql -p 3306:3306 michael/mysql

This gave an error because I need to execute exec mysql_install_dbfirst to initialize the DB. But I could not add RUN mysql_install_dba Docker to the file, since I want to use it Volumeas an external data store.

So how do I do this?

I know there is an official image with a name mysql. I just want to do it as a practice.


UPDATE: Thanks @Pieter. I finally did this using his solution, which provides another that entrypoint.shcombines init and start scripts, and then makes it as ENTRYPOINT in the Docker file:

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 run

docker run -d --name mysql -v /root/docker/mysql/data:/var/lib/mysql -p 3306:3306 michael/mysql

.

+4
1

, , , script ENTRYPOINT, ENTRYPOINT , .

, script , mysql_install_db mysqld .

, docker .

FROM centos
MAINTAINER Michael
ENV REFRESHED_AT 2016-07-29
RUN yum install -y mysql mariadb-server
VOLUME /var/lib/mysql
COPY start.sh /
ENTRYPOINT ["/entrypoint.sh"]
EXPOSE 3306

entrypoint.sh :

/usr/libexec/mysql_install_db --user=root
/usr/libexec/mysqld --user=root

, -. . https://github.com/docker-library/mariadb/tree/d969a465ee48fe10f4b532276f7337ddaaf3fc36/10.1

, ENTRYPOINT CMD. , https://www.ctl.io/developers/blog/post/dockerfile-entrypoint-vs-cmd/ , ENTRYPOINT CMD .

UPDATE , mysql_install_db /var/lib/mysql, mysql_install_db docker. ( , → mariadb).

docker , . . https://docs.docker.com/engine/reference/builder/#/volume

+4

Source: https://habr.com/ru/post/1649733/


All Articles