Redash で Oracle 接続の Docker を作ってみた

Oracle だらけの環境の皆さんへ

# Docker Compose Install

※ docker はInstall済み

```bash
$ uname -r
3.10.0-327.el7.x86_64
$ sudo curl -L "https://github.com/docker/compose/releases/download/1.9.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
$ sudo chmod +x /usr/local/bin/docker-compose
$ sudo curl -L https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose -o /etc/bash_completion.d/docker-compose
$ docker-compose --version
docker-compose version 1.9.0, build 2585387
$ sudo usermod -aG docker ${USER}
# コンソール再起動
```

# Redash Install

```bash 
$ git clone https://github.com/getredash/redash
$ cd redash
$ mkdir oracle
# Oracle Instance Download
# Oracle でログインしたCookieを持ってくる
$ curl --location --cookie ./cookies.txt --insecure "http://download.oracle.com/otn/linux/instantclient/11204/instantclient-basic-linux.x64-11.2.0.4.0.zip" -o instantclient-basic-linux.x64-11.2.0.4.0.zip
$ curl --location --cookie ./cookies.txt --insecure "http://download.oracle.com/otn/linux/instantclient/11204/instantclient-jdbc-linux.x64-11.2.0.4.0.zip" -o instantclient-jdbc-linux.x64-11.2.0.4.0.zip
$ curl --location --cookie ./cookies.txt --insecure "http://download.oracle.com/otn/linux/instantclient/11204/instantclient-sqlplus-linux.x64-11.2.0.4.0.zip" -o instantclient-sqlplus-linux.x64-11.2.0.4.0.zip
$ curl --location --cookie ./cookies.txt --insecure "http://download.oracle.com/otn/linux/instantclient/11204/instantclient-sdk-linux.x64-11.2.0.4.0.zip" -o instantclient-sdk-linux.x64-11.2.0.4.0.zip
$ curl --location --cookie ./cookies.txt --insecure "http://download.oracle.com/otn/linux/instantclient/11204/instantclient-odbc-linux.x64-11.2.0.4.0.zip" -o instantclient-odbc-linux.x64-11.2.0.4.0.zip
$ cd ../
$ vi Dockerfile-redash
```

```dockerfile:Dockerfile-redash
FROM redash/redash:latest

# Oracle instantclient
ADD oracle/instantclient-basic-linux.x64-11.2.0.4.0.zip /tmp/instantclient-basic-linux.x64-11.2.0.4.0.zip
ADD oracle/instantclient-sdk-linux.x64-11.2.0.4.0.zip /tmp/instantclient-sdk-linux.x64-11.2.0.4.0.zip
ADD oracle/instantclient-sqlplus-linux.x64-11.2.0.4.0.zip /tmp/instantclient-sqlplus-linux.x64-11.2.0.4.0.zip
ADD oracle/instantclient-odbc-linux.x64-11.2.0.4.0.zip /tmp/instantclient-odbc-linux.x64-11.2.0.4.0.zip
ADD oracle/instantclient-jdbc-linux.x64-11.2.0.4.0.zip /tmp/instantclient-jdbc-linux.x64-11.2.0.4.0.zip
ADD oracle/tnsnames.ora /tmp/tnsnames.ora

RUN mkdir -p /opt/oracle/
RUN apt-get update  -y
RUN apt-get install -y unzip

RUN unzip /tmp/instantclient-basic-linux.x64-11.2.0.4.0.zip -d /opt/oracle/
RUN unzip /tmp/instantclient-sdk-linux.x64-11.2.0.4.0.zip -d /opt/oracle/
RUN unzip /tmp/instantclient-sqlplus-linux.x64-11.2.0.4.0.zip -d /opt/oracle/
RUN unzip /tmp/instantclient-odbc-linux.x64-11.2.0.4.0.zip -d /opt/oracle/
RUN unzip /tmp/instantclient-jdbc-linux.x64-11.2.0.4.0.zip -d /opt/oracle/

RUN ln -s /opt/oracle/instantclient_11_2 /opt/oracle/instantclient
RUN ln -s /opt/oracle/instantclient/libclntsh.so.11.1 /opt/oracle/instantclient/libclntsh.so
RUN ln -s /opt/oracle/instantclient/sqlplus /usr/local/bin/sqlplus

RUN apt-get install libaio-dev -y
RUN apt-get clean -y

ENV ORACLE_HOME=/opt/oracle/instantclient
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/oracle/instantclient
ENV TNS_ADMIN=$ORACLE_HOME/network/admin
RUN mkdir -p /opt/oracle/instantclient/network/admin
RUN cp /tmp/tnsnames.ora /opt/oracle/instantclient/network/admin/

RUN pip install cx_Oracle

#Add REDASH ENV to add Oracle Query Runner
ENV REDASH_ADDITIONAL_QUERY_RUNNERS=redash.query_runner.oracle
```

```bash 
$ cp docker-compose-example.yml docker-compose.yml
$ vi docker-compose.yml
```

```yaml:docker-compose.yml
redash:
#  image: redash/redash:latest
  build: .
  dockerfile: Dockerfile-redash
  ports:
    - "5000:5000"
    - "1555:1555" # Oracle用ポート追加
  links:
    - redis
    - postgres
  environment:
    REDASH_LOG_LEVEL: "INFO"
    REDASH_REDIS_URL: "redis://redis:6379/0"
    REDASH_DATABASE_URL: "postgresql://postgres@postgres/postgres"
    REDASH_COOKIE_SECRET: veryverysecret
redis:
  image: redis:2.8
postgres:
  image: postgres:9.3
  volumes:
    - /opt/postgres-data:/var/lib/postgresql/data
redash-nginx:
  image: redash/nginx:latest
  ports:
    - "80:80"
  links:
    - redash

```

```bash
$ docker-compose up postgres
# Ctrl+C
$ ./setup/docker/create_database.sh
$ docker-compose up -d
```


良き Redash Life を