質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.37%

  • MySQL

    6570questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Windows

    1611questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • Docker

    916questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

DockerでMroongaストレージエンジンを持つMySQLを起動したい

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 264

rock_square

score 5

  DockerでMroongaストレージエンジンを持つMySQLを起動したい

 前提

Docker for Windowsで、Windows上のDockerにてMySQLの環境を構築して使用しています。

現在使用しているMySQLのイメージは、公式のものを使用しています。
構成としては

C:\Docker\MySQL ┬─dockercompose.yml
         └─mysql┬─mysql_data
             ├─Dockerfile
             └─my.cnf


となっています。
mysql_dataはデータ永続化4のため、MySQLのデータが入っています。

各ファイルの内容は

version: "3"
services:
  db:
    build: ./mysql
    ports:
      - 3307:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Tokyo
    volumes:
      - ./mysql/mysql_data:/var/lib/mysql
    container_name: "mysql5.7"
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    links:
      - db
    ports:
      - 8081:80
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=db
    container_name: "phpmyamin-la"
FROM mysql:5.7
EXPOSE 3306

ADD ./my.cnf /etc/mysql/conf.d/my.cnf
RUN chmod 644 /etc/mysql/conf.d/my.cnf

CMD ["mysqld"]
[mysqld]
character-set-server=utf8

[mysql]
default-character-set=utf8

[client]
default-character-set=utf8


となっています。

 実現したいこと

Mroongaというストレージエンジンを検証で使いたいのですが、

mysql> SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set


一覧の中にはありませんでした。

そこで、Mroongaをインストールし、使える状態にしたいと考えています。

 試したこと

公式のMySQLイメージにMroongaをインストールするのではなく、mroonga/docker(https://github.com/mroonga/docker)を使用する方法で対応してみました。

各ファイルを編集しました。
Dockerfileやmy.cnf は 
https://github.com/mroonga/docker/blob/master/Dockerfile/mysql5723_mroonga807/Dockerfile 
の内容を参考に、内容を変更しました。

FROM centos:centos6.9
MAINTAINER groonga

RUN yum upgrade -y
RUN yum install -y which
RUN yum install -y http://packages.groonga.org/centos/groonga-release-1.4.0-1.noarch.rpm && yum clean all
RUN yum install -y https://dev.mysql.com/get/mysql80-community-release-el6-1.noarch.rpm && yum clean all
RUN yum install --enablerepo=mysql56-community --disablerepo=mysql57-community --disablerepo=mysql80-community -y mysql-community-client-5.6.41 mysql-community-server-5.6.41 && yum clean all
RUN yum install -y mysql-community-mroonga-8.07 groonga-8.0.7 groonga-tokenizer-mecab-8.0.7 groonga-normalizer-mysql && yum clean all
RUN chown -R mysql. /var/lib/mysql ; service mysqld start && mysql -e "GRANT ALL ON *.* TO root@'%' WITH GRANT OPTION" && mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql && service mysqld stop
COPY my.cnf /etc/my.cnf
RUN rpm -q --scripts mysql-community-mroonga | sed -n '/^postinstall scriptlet/,/^[a-z][a-z]* scriptlet/p' | tail -n +2 | head -n -1 > /root/postinstall.sh
RUN rm /var/lib/mysql/auto.cnf /var/lib/mysql/groonga.log
COPY entrypoint.sh /root/entrypoint.sh

EXPOSE 3306
ENTRYPOINT ["/root/entrypoint.sh"]
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

### Added by yoku0825
character_set_server= utf8mb4

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
version: "3"
services:
  db:
    build: ./mysql
    ports:
      - 3307:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Tokyo
    volumes:
      - ./mysql/mysql_data:/var/lib/mysql groonga/mroonga
    container_name: "groonga"
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    links:
      - db
    ports:
      - 8081:80
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=db
    container_name: "phpmyamin-la"

また、Dockerfileとmy.cnfと同じディレクトリに、 entrypoint.sh を下記内容で配置しました。

#!/bin/bash

if [ ! -e /var/lib/mysql/ibdata1 ] ; then
  ### If overroded my.cnf is there, rename and restore it.
  ### See https://github.com/mroonga/docker/issues/59
  [[ -e /etc/my.cnf ]] && mv -n /etc/my.cnf /etc/my.cnf.save

  chown -R mysql. /var/lib/mysql
  bash /root/postinstall.sh
  service mysqld start
  mysql -e "GRANT ALL ON *.* TO root@'%' WITH GRANT OPTION"
  mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql
  service mysqld stop

  ### Restore my.cnf
  [[ -e /etc/my.cnf.save ]] && mv /etc/my.cnf.save /etc/my.cnf
fi

oldowner=$(ls -ln /var/lib/mysql/ibdata1 | awk '{print $3}')
oldgroup=$(ls -ln /var/lib/mysql/ibdata1 | awk '{print $4}')

chown -R mysql. /var/lib/mysql
/usr/sbin/mysqld --user=mysql "$@"

chown -R $oldowner.$oldgroup /var/lib/mysql

上記の設定でbuildを行いました。

PS C:\Docker\Mysql> docker-compose build
Building db
Step 1/15 : FROM centos:centos6.9
centos6.9: Pulling from library/centos
993c50d47469: Already exists
Digest: sha256:48623f1cc1ff287ef4843888bcee22285066adf2d5da6daf000070bee83cd93a
Status: Downloaded newer image for centos:centos6.9
 ---> e88c611d16a0
Step 2/15 : MAINTAINER groonga
 ---> Running in 2bcced1f2a82
Removing intermediate container 2bcced1f2a82
 ---> 6a8b3793b27d

(省略)

Step 13/15 : COPY entrypoint.sh /root/entrypoint.sh
 ---> 79b9820f0b6a
Step 14/15 : EXPOSE 3306
 ---> Running in 4dee21467386
Removing intermediate container 4dee21467386
 ---> 934e3e1567b0
Step 15/15 : ENTRYPOINT ["/root/entrypoint.sh"]
 ---> Running in 5eb08b8d6109
Removing intermediate container 5eb08b8d6109
 ---> 1afe083dfee4
Successfully built 1afe083dfee4
Successfully tagged mysql_db:latest
phpmyadmin uses an image, skipping

buildは通りました。

コンテナを起動しました。

PS C:\Docker\Mysql> docker-compose up -d
Starting groonga ... done
Creating phpmyamin-la ... done

確認したところ

PS C:\Docker\Mysql> docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                            NAMES
9866db4e93cf        phpmyadmin/phpmyadmin:latest   "/run.sh supervisord…"   39 seconds ago      Up 35 seconds       9000/tcp, 0.0.0.0:8081->80/tcp   phpmyamin-la

PHP MyAdminのみコンテナが起動し、Mroongaは起動していませんでした。
MySQLへの接続もできない状態でした。

Dockerを始めて日が浅いため理解していない部分も多々ありますが、ご助言いただけるとありがたいです。
よろしくお願いいたします。

 補足情報(FW/ツールのバージョンなど)

◆動作環境
・Windows10 Pro 64bit
・Docker Community Edition version 18.06.1-ce-win73(19507)

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • YouheiSakurai

    2018/10/26 14:38

    そうです。公式イメージではなくhttps://github.com/mroonga/dockerをベースにすればいいんじゃないかなぁと思ったんです。

    キャンセル

  • rock_square

    2018/10/26 14:40

    ありがとうございます。試してみたいと思います。

    キャンセル

  • rock_square

    2018/10/26 17:07 編集

    https://github.com/mroonga/docker/tree/master/Dockerfile/mysql5723_mroonga807 を参考に、Dockerfileやmy.cnfを編集、entrypoint.shを追加し対応してみました。Buildは通ったのですが、コンテナが起動されず(docker-compose up -dでは起動された様に見えたのですが、docker ps で確認したところリストに表示されませんでした)、DBに接続されない、といった状況です。⇒「試したこと」の内容を編集しました。

    キャンセル

回答 1

check解決した方法

0

「試したこと」に掲載した内容の「Dockerfile」と「docker-compose.yml」を一部変更することで、対応しました。
下記、「試したこと」に掲載した内容と重複する部分が多いですが、手順として残しておきたいと思います。

公式のMySQLイメージにMroongaをインストールするのではなく、mroonga/docker(https://github.com/mroonga/docker)を使用する方法で対応してみました。

各ファイルを編集しました。
Dockerfileやmy.cnf は 
https://github.com/mroonga/docker/blob/master/Dockerfile/mysql5723_mroonga807/Dockerfile 
の内容を参考に、内容を変更しました。

FROM centos:centos6.9
MAINTAINER groonga

RUN yum upgrade -y && yum clean all
RUN yum install -y which && yum clean all
RUN yum install -y http://packages.groonga.org/centos/groonga-release-1.4.0-1.noarch.rpm && yum clean all
RUN yum install -y https://dev.mysql.com/get/mysql80-community-release-el6-1.noarch.rpm && yum clean all
RUN yum install --enablerepo=mysql57-community --disablerepo=mysql80-community -y mysql-community-client-5.7.24-1.el6 mysql-community-server-5.7.24-1.el6 && yum clean all
RUN mysqld --no-defaults --initialize-insecure --basedir=/usr --datadir=/var/lib/mysql --user=mysql
COPY my.cnf /etc/my.cnf
RUN chown -R mysql. /var/lib/mysql ; yum install -y mysql57-community-mroonga-8.07 groonga-8.0.7 groonga-tokenizer-mecab-8.0.7 groonga-normalizer-mysql && yum clean all
RUN chown -R mysql. /var/lib/mysql ; service mysqld start && mysql -e "CREATE USER root@'%'; GRANT ALL ON *.* TO root@'%' WITH GRANT OPTION" && mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql && service mysqld stop
RUN rpm -q --scripts mysql57-community-mroonga | sed -n '/^postinstall scriptlet/,/^[a-z][a-z]* scriptlet/p' | tail -n +2 | head -n -1 > /root/postinstall.sh
RUN rm /var/lib/mysql/auto.cnf /var/lib/mysql/groonga.log
COPY entrypoint.sh /root/entrypoint.sh

EXPOSE 3306
ENTRYPOINT ["/root/entrypoint.sh"]
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

### Added by yoku0825
character_set_server= utf8mb4
loose-validate_password   = OFF
version: "3"
services:
  db:
    build: ./mysql
    ports: 
      - 3307:3306
    environment:
      MYSQL_ROOT_PASSWORD: root
      TZ: Asia/Tokyo
    container_name: "mroonga"
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    links:
      - db
    ports:
      - 8081:80
    environment:
      - PMA_ARBITRARY=1
      - PMA_HOST=db
    container_name: "phpmyamin-la"

また、Dockerfileとmy.cnfと同じディレクトリに、 entrypoint.sh を下記内容で配置しました。

#!/bin/bash

if [ ! -e /var/lib/mysql/ibdata1 ] ; then
  ### If overroded my.cnf is there, rename and restore it.
  ### See https://github.com/mroonga/docker/issues/59
  [[ -e /etc/my.cnf ]] && mv -n /etc/my.cnf /etc/my.cnf.save
  rm -r /var/lib/mysql/*
  mysqld --no-defaults --initialize-insecure --basedir=/usr --datadir=/var/lib/mysql --user=mysql
  chown -R mysql. /var/lib/mysql
  bash /root/postinstall.sh
  service mysqld start
  mysql -e "CREATE USER root@'%'; GRANT ALL ON *.* TO root@'%' WITH GRANT OPTION"
  mysql_tzinfo_to_sql /usr/share/zoneinfo | mysql mysql
  service mysqld stop
  ### Restore my.cnf
  [[ -e /etc/my.cnf.save ]] && mv /etc/my.cnf.save /etc/my.cnf
  rm /var/lib/mysql/auto.cnf /var/lib/mysql/groonga.log
fi

oldowner=$(ls -ln /var/lib/mysql/ibdata1 | awk '{print $3}')
oldgroup=$(ls -ln /var/lib/mysql/ibdata1 | awk '{print $4}')

chown -R mysql. /var/lib/mysql
/usr/sbin/mysqld --user=mysql "$@"

chown -R $oldowner.$oldgroup /var/lib/mysql

上記の設定でbuildを行いました。

PS C:\Docker\Mysql> docker-compose build
Building db
Step 1/16 : FROM centos:centos6.9
 ---> e88c611d16a0
Step 2/16 : MAINTAINER groonga
 ---> Running in f232f3f6df7a
Removing intermediate container f232f3f6df7a
 ---> b523f7471c27
Step 3/16 : RUN yum upgrade -y && yum clean all
 ---> Running in a17fa1268a6e
Loaded plugins: fastestmirror, ovl
Setting up Upgrade Process
Resolving Dependencies

(省略)

Step 13/16 : RUN rm /var/lib/mysql/auto.cnf /var/lib/mysql/groonga.log
 ---> Running in bf4800b0cb68
Removing intermediate container bf4800b0cb68
 ---> 0de24af4281c
Step 14/16 : COPY entrypoint.sh /root/entrypoint.sh
 ---> d1e21bdcb1b7
Step 15/16 : EXPOSE 3306
 ---> Running in b2003b7019c1
Removing intermediate container b2003b7019c1
 ---> 4ea3f60320fc
Step 16/16 : ENTRYPOINT ["/root/entrypoint.sh"]
 ---> Running in 2c1fdc446326
Removing intermediate container 2c1fdc446326
 ---> 1f51cbc32f0c
Successfully built 1f51cbc32f0c
Successfully tagged mroonga_db:latest

buildは通りました。

コンテナを起動しました。

PS C:\Docker\Mysql> docker-compose up -d
Creating network "mroonga_default" with the default driver
Creating mroonga ... done
Creating phpmyamin-la ... done

確認したところ

PS C:\Docker\Mysql> docker ps
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                            NAMES
4b65d30c843e        phpmyadmin/phpmyadmin:latest   "/run.sh supervisord…"   6 seconds ago       Up 5 seconds        9000/tcp, 0.0.0.0:8081->80/tcp   phpmyamin-la
273de3bf557c        mroonga_db                     "/root/entrypoint.sh"    7 seconds ago       Up 6 seconds        0.0.0.0:3307->3306/tcp           mroonga

MroongaとPHP MyAdminの各コンテナが起動しているのを確認しました。
MySQLへの接続も確認できました。

ひとつ課題としては、docker-compose.ymlからDBのvolumesの項目を削除する必要があったため、データの永続化が実現できていない点です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

同じタグがついた質問を見る

  • MySQL

    6570questions

    MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

  • Windows

    1611questions

    Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。

  • Docker

    916questions

    Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです