我現在在學習docker,並開始自己構建mysql映像。如何在docker運行之後但在入口點之前執行初始化腳本一次?
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 run -d --name mysql -v /root/docker/mysql/data:/var/lib/mysql -p 3306:3306 michael/mysql
這給了一個錯誤,因爲我必須給exec mysql_install_db
先初始化數據庫。但是我無法在Dockerfile中添加RUN mysql_install_db
,因爲我想使用Volume
作爲外部數據存儲。
那麼我應該怎麼做?
我知道有一個名爲mysql
的官方圖片。我只是想做這個練習。
更新: 感謝@Pieter。我終於用他的解決辦法是提供另一種entrypoint.sh
結合的init &在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 run -d --name mysql -v /root/docker/mysql/data:/var/lib/mysql -p 3306:3306 michael/mysql
這爲這種情況提供了一個通用的解決方案。
謝謝!你讓我今天一整天都感覺很好。 – Michael