4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Dockerコンテナ上のUbuntu15.10にMySQLを自動でセットアップする

Last updated at Posted at 2016-01-16

経緯

現在のプロジェクトでは開発環境もプロダクションもDockerfileをビルドしてセットアップしています。プロダクション環境ではデータベースはAmazon RDSでMySQLを利用しているのでDockerfileにMySQLをインストールするコードを書く必要はないのですが、開発環境ではローカルのデータベースが必要になります。当初は普通にapt-getとかをDockerfileに書いていたのですが、MySQLの起動時にログ用のディレクトリがないとか、mysqld.sockにアクセスできないとか怒られていたので、Dockerビルドしたあとに手動でMySQLを入れていました。しかし、やっぱり1コマンドですべての環境が構築できればなと思い、苦労した結果MySQLもセットアップできるようになりました。

Dockerfile

Dockerfile
FROM ubuntu:15.10
MAINTAINER takuma
.
.
.
RUN echo "mysql-server mysql-server/root_password password ***" | debconf-set-selections && \
    echo "mysql-server mysql-server/root_password_again password ***" | debconf-set-selections && \
    apt-get -y install mysql-server
RUN mkdir /home/mysql
RUN chown mysql /home/mysql
RUN chgrp mysql /home/mysql
RUN usermod -d /home/mysql mysql
RUN mysql_install_db
.
.
.

DockerfileのMySQLに関する部分はこんな感じになっています。Dockerfile中に/etc/init.d/mysql startとかやってもdocker buildが終わったあとはまた止まってしまいます。なので、ここではMySQLを入れるだけで、MySQLの起動は別スクリプトで行います。

build.sh

build.sh
docker build -t hoge/huga:dev .

docker run -p 80:80 --name huga -t -d hoge/huga:dev
.
.
.
docker exec huga /etc/init.d/mysql start
docker exec huga mysql -u root -e "create database hoge;"
.
.
.

このスクリプトでdocker builddocker runを行いつつ、docker execでデータベースの起動とプロジェクトに必要なデータベースの作成を行っています。この手順で起動したMySQLにはパスワードがかかっていませんが、開発環境用ならいいでしょう。Dockerfileの書き方は記事がたくさん書かれているのでそちらを参考にしてください。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?