DockerでMarkLogic環境構築してみた


はじめに

お試しでDockerでMarkLogic環境を構築してみたため、その手順を記載します

動作確認環境

OS Docker version docker-compose version
Windows 10 Home 18.09.9 1.24.1

※Windows 10 HomeはDocker for Windowsをインストールできないため、Docker ToolBoxインストールして試しました

前提条件

本記事は以下がインストール・登録されていることが前提となります

  • Dockerのインストール
  • docker-composeのインストール
  • MarkLogic コミュニティの登録(無料)

ディレクトリ構成

ディレクトリ構成は以下のようにしてみました

.
├ docker ← Dockerファイルやrpmファイル等の格納ディレクトリ
│    │ 
│    └ marklogic ← Marklogic用のコンテナで必要なDockerファイルやrpmファイル等格納ディレクトリ
│        │ 
│        └ 10-0-2 ← Marklogic10.0.2の資材格納ディレクトリ
│            │
│            └ Dockerfile ← Dockerファイル
│            │
│            └ rpm ← rpmファイル格納ディレクトリ
│            │   │
│            │   └ MarkLogic-10.0-2.x86_64.rpm ← Marklogicのrpmファイル
│            │
│            └ conf ← 設定ファイル格納ディレクトリ
│                │
│                └ supervisord.conf ← supervisord用設定ファイル
│
├ docker-compose.yml ← Composeファイル

MarkLogicのrpmファイルは以下サイトより取得します。ダウンロードにはMarkLogicコミュニティに登録している必要があります

「Red Hat Enterprise Linux/CentOS,Version7」のrpmファイルをダウンロードしてください

各種ファイル設定

DockerfileとComposeファイル、supervisord.confファイルを修正します

Dockerファイル

Dockerファイルは以下のように修正します
コンテナ起動時にサービスを自動起動したいため、supervisordもインストールしています

Dockerfile
FROM centos:centos7

RUN yum -y update && yum clean all

RUN yum -y install glibc.i686 gdb.x86_64 redhat-lsb.x86_64 && yum clean all

RUN yum -y install initscripts && yum clean all

RUN yum install -y epel-release
RUN yum install -y supervisor && yum clean all
COPY ./conf/supervisord.conf /etc/

ENV PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/MarkLogic/mlcmd/bin

COPY ./rpm/MarkLogic-10.0-2.x86_64.rpm /tmp/MarkLogic.rpm

RUN yum -y install /tmp/MarkLogic.rpm && rm /tmp/MarkLogic.rpm

EXPOSE 7997 7998 7999 8000 8001 8002

ENTRYPOINT ["/usr/bin/supervisord"]

Composeファイル

Composeファイルは以下のように修正

docker-compose.yml
version: '3'

services:
  ml10-node-1:
    build: ./docker/marklogic/10-0-2
    tty: true
    expose:
      - "7997"
      - "7998"
      - "7999"
    ports:
      - "8000:8000"
      - "8001:8001"
      - "8002:8002"
      - "8010:8010"
    hostname: "ml10-host-1.local"
    container_name: "ml0-node-1.local"

supervisord.confファイル

コンテナ起動時に起動させたいサービスを設定します
今回はMarkLogicを起動させます

supervisord.conf
[supervisord]
nodaemon=true

[program:MarkLogic]
command=/sbin/service MarkLogic start

コンテナ作成と起動

Composeファイルがあるディレクトリで以下コマンドを実行
実行完了まで少々時間がかかります

$ docker-compose up -d

実行が完了したら以下にアクセス

http://localhost:8001

※localhostの部分は環境によって異なります。例えば、Docker Toolboxを使用している方は、「docker-machine ip」を実行してIPアドレスを確認してlocalhost部分を置き換えてください

無事に起動できました

クラスタ構成にしたい場合

クラスタ構成で環境構築したい場合はComposeファイルを修正するだけでよい
以下は、3台のクラスタ構成にしたい場合

docker-compse.yml
version: '3'

services:
  ml10-node-1:
    build: ./docker/marklogic/10-0-2
    tty: true
    expose:
      - "7997"
      - "7998"
      - "7999"
    ports:
      - "8000:8000"
      - "8001:8001"
      - "8002:8002"
      - "8010:8010"
    hostname: "ml10-host-1.local"
    container_name: "ml0-node-1.local"

  ml10-node-2:
    build: ./docker/marklogic/10-0-2
    tty: true
    expose:
      - "7997"
      - "7998"
      - "7999"
    ports:
      - "18000:8000"
      - "18001:8001"
      - "18002:8002"
      - "18010:8010"
    hostname: "ml10-host-2.local"
    container_name: "ml0-node-2.local"

  ml10-node-3:
    build: ./docker/marklogic/10-0-2
    tty: true
    expose:
      - "7997"
      - "7998"
      - "7999"
    ports:
      - "28000:8000"
      - "28001:8001"
      - "28002:8002"
      - "28010:8010"
    hostname: "ml10-host-3.local"
    container_name: "ml0-node-3.local"

コンテナ作成・起動をし、諸々設定してクラスタ構成にすることに成功
クラスタ構成の手順はここでは割愛する

参考