Tips15. 様々なDB環境を Docker で構築
最近は、システム構築においてOracleが圧倒的な存在感を放つことは無く、リレーショナルデータベースだけではなく、
分析系DBやNoSQLといった様々なタイプのデータベースが利用されるようになりました。
DBを扱うにはまず環境構築が必要です。
最近ではdockerにより容易に環境構築できるようになりました。
このページでは、各種DBの環境構築方法を記載します。
あらかじめ Docker Engine がインストール済みであることが前提となります。
Docker Engine のインストール方法は https://docs.docker.com/engine/ を参考にしてください。
mysql
mysqlの環境を構築します。
最初に、docker pull で、docker image をダウンロードします。
続いて、docker run コマンドを実行して、イメージを元にコンテナを作成します。
ローカルのカレントディレクトリ下の./mysqlを /home/mysql と紐づけてアクセスできるようにします。
ポート番号は外部から33006でアクセスできるようにしています。
count_test という名前のデータベースを作成するようにしています。
コンテナが作成できたら、docker exec コマンドでコンテナの中に入り、環境を操作できます。
docker pull ubuntu/mysql:latest docker run -d --name mysql_container \ -v ./mysql:/home/mysql -p 33006:3306 \ -e TZ=UTC -e MYSQL_ROOT_PASSWORD=rootpassword -e MYSQL_DATABASE=count_test \ ubuntu/mysql docker ps > CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES > 6e36baXXXXXX ubuntu/mysql "docker-entrypoint.s…" 6 days ago Up 2 minutes 33060/tcp, 0.0.0.0:33006->3306/tcp, :::33006->3306/tcp mysql_container docker exec -it mysql_container /bin/bash root@6e36baXXXXXX:/# mysql -u root -p --enable-local-infile Enter password: : mysql>
PostgreSQL
postgresの環境を構築します。
ローカルのカレントディレクトリ下の./postgresを /home/postgres と紐づけてアクセスできるようにします。
ポート番号は外部から30432でアクセスできるようにしています。
count_test という名前のデータベースを作成するようにしています。
docker pull ubuntu/postgres docker run -d --name postgres_container --volume ./postgres:/home/postgres \ -e TZ=JST -e POSTGRES_DB=count_test \ -e POSTGRES_USER=ctest_usr \ -e POSTGRES_PASSWORD=ctestpwd \ -e POSTGRES_INITDB_ARGS="--encoding=UTF8 --lc-collate=C --lc-ctype=C" \ -p 30432:5432 ubuntu/postgres docker exec -it postgres_container /bin/bash root@e1fde02164dd:/# psql -p 5432 -U ctest_usr -d count_test count_test=#
mariaDB
mariaDBの環境を構築します。
mysqlとほぼ同じです。
$ docker run -d --name maria_container \ -v ./mysql:/home/maria \ -e TZ=UTC -p 33007:3306 -e MARIADB_ROOT_PASSWORD=rootpassword -e MARIA_DATABASE=count_test mariadb 62664c42b4844d65d4088b0f6302c3d0d529f62299bfb5d68a1912a1812cf119 $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 62664c42b484 mariadb "docker-entrypoint.s…" 11 seconds ago Up 11 seconds 0.0.0.0:33007->3306/tcp, :::33007->3306/tcp maria_container $ docker exec -it maria_container /bin/bash root@62664c42b484:/# root@62664c42b484:/# mariadb -u root -p --enable-local-infile Enter password: : MariaDB [(none)]>
hive
hiveの場合は、Dockerfileを準備します。
Dockerfile
FROM apache/hive:3.1.3 USER root ENV USER hive ENV PASSWD hivepassword ENV GRP hive ENV HOME /home/${USER} ENV SHELL /bin/bash # 一般ユーザーにsudo権限を付与 RUN gpasswd -a ${USER} sudo # 一般ユーザーのパスワード設定 RUN echo "${USER}:${PASSWD}" | chpasswd # ディレクトリ所有者の変更 RUN chown ${USER} ${HOME} # Install apt RUN apt update && \ apt install -y wget \ software-properties-common \ build-essential \ vim \ sudo && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # install derby RUN rm -rf /usr/local/derby/* RUN wget http://ftp.riken.jp/net/apache/db/derby/db-derby-10.14.2.0/db-derby-10.14.2.0-bin.tar.gz RUN mv db-derby-10.14.2.0-bin.tar.gz /tmp/ RUN tar -xzvf /tmp/db-derby-10.14.2.0-bin.tar.gz -C /tmp/ RUN mv /tmp/db-derby-10.14.2.0-bin /usr/local/derby ENV DERBY_HOME /usr/local/derby ENV PATH $PATH:$DERBY_HOME/bin ENV CLASSPATH $CLASSPATH:$DERBY_HOME/lib/derby.jar:$DERBY_HOME/lib/derbytools.jar # ユーザーの切替 USER ${USER} # hadoop setup ENV HADOOP_CONF_DIR $HADOOP_HOME/etc/hadoop ENV PATH $PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
docker-compose.yaml
services: hive: image: apache/hive:3.1.3 build: context: hive dockerfile: hive_dockerfile.txt container_name: hive_container command: bash tty: true # 仮想端末を割り当てる stdin_open: true # 標準入力を開いたままにする ports: - "10000:10000" environment: HADOOP_HOME: /opt/hadoop HIVE_HOME: /opt/hive volumes: - hive_data:/opt/hive/data - ./hive/:/home/hive/ volumes: hive_data:
上記ファイルを用意し、次のコマンドを実行してdockerイメージ・コンテナを作成します。
docker-compose up -d
次にコマンドでコンテナに入ります。
docker exec -it hive_container /bin/bash
このまま hive を実行するとデフォルトの実行エンジンが tez になっており、tezのインストールや設定は上記dockerファイルでは行っていないのでエラーになってしまいます。
そのため、デフォルトでインストールされている MapReduce を使用するよう、設定を変更します。
sudo vi conf/hive-site.xml
と設定ファイルを開きます。sudoしているのでパスワードを聞かれますが、Dockerfileで設定したパスワードを入力してください。
XMLファイルのエントリに「hive.execution.engine」という箇所がありますので、その値を tez→mrに修正してください。
また、パフォーマンス検証用に下記の値を末尾に追加設定してください。
<property> <name>mapreduce.map.memory.mb</name> <value>4096</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>8192</value> </property> <property> <name>yarn.app.mapreduce.am.resource.mb</name> <value>4096</value> </property>
ファイルを保存してコンソールに戻ったらメタデータストアの再作成を行います。
下記のコマンドを実行してください。
rm -rf /opt/hive/metastore_db schematool -dbType derby -initSchema schematool -dbType derby -upgradeSchema --verbose
これでhiveが使用可能な状態になっているはずです。
hive
と打ってログインできること、及び簡単なSQLが実行できることを確認してください。
select current_timestamp();
ディスカッション
コメント一覧
まだ、コメントがありません