今さらながら仕事でOracle 11gを使うことになっています。
Oracle自体は、2012年~2013年くらいに触ったことがあって、初めて使用したデータベースがOracleでした。
なので、僕の中ではデファクトスタンダード・・・とはならず、インストールやら文字コードやら、接続文字列やらで苦労した経験しかありません。
とはいうものの、仕事で使用することになったので避けるわけにもいきません。
それに加え、個人用の開発環境を簡単に構築できる方法を模索していたところ、docker使ってみればいいのではと思いつきました。
そう思って調べたところ、以下の記事が見つかったので、こちらに則って(というかパクってw)作業をしつつ、個別の補足を追加していきます。
事前準備
参考元の記事の通りですが、事前に必要なものは以下の通りです。
- gitインストール済み
- dockerインストール済み(Docker for Windows または Docker Toolbox)
- Oracle.comのアカウント作成済み
なお、参考元記事はMacですが、僕の場合はWindows 10 Home Editionになります。
環境作成方法
実際の環境作成ですが、以下の手順で実行します。
- githubからOracleをダウンロードする
- Oracle 11gのバイナリをダウンロードする
- dockerイメージをビルドする
- dockerコンテナを起動する
githubからOracleをダウンロードする
任意のフォルダ(以降、イメージフォルダ)で、以下のコマンドを実行します。
$ git clone https://github.com/oracle/docker-images.git
Oracle 11gのバイナリをダウンロードする
以下のサイトからOracle 11gのバイナリをダウンロードします。
https://www.oracle.com/technetwork/jp/database/database-technologies/express-edition/downloads/xe-prior-releases-5172097-ja.html
用するのは、3つ目の「Oracle Database Express Edition 11g Release 2 for Linux 64」になるので間違わないように注意しましょう。
ダウンロードしたバイナリは、以下に配置してください。
イメージフォルダ/oracle/docker-images/OracleDatabase/SingleInstance/dockerfiles/11.2.0.2
dockerイメージをビルドする
$ cd イメージフォルダ/oracle/docker-images/OracleDatabase/SingleInstance/dockerfiles
$ ./buildDockerImage.sh -v 11.2.0.2 -x -i
パソコンのスペックにもよると思いますが、3~5分ほどでイメージが作成されます。
Oracle Database Docker Image for 'xe' version 11.2.0.2 is ready to be extended:
--> oracle/database:11.2.0.2-xe Build completed in 258 seconds.
DockerFileとdocker-compose.ymlの作成
任意のフォルダにDockerFileとdocker-compose.ymlを作成します。
設定内容は下記参照。
# イメージを指定します
FROM oracle/database:11.2.0.2-xe
RUN yum -y install vi
RUN echo 'TZ="Asia/Tokyo"' > /etc/sysconfig/clock
RUN cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
RUN echo 'LANG="ja_JP.UTF-8"' > /etc/sysconfig/i18n
RUN echo 'LC_CTYPE="ja_JP.utf8"' >> /etc/sysconfig/i18n
RUN yum reinstall -y glibc-common
RUN yum reinstall -y glibc
RUN localedef -f UTF-8 -i ja_JP ja_JP.UTF-8
# ポート番号1521で起動
EXPOSE 1521
version: "2.0"
services:
database:
build:
context: .
dockerfile: Dockerfile
container_name: oracle11
shm_size: 1g # 共有メモリは1GB以上にしないとコンテナ起動時にエラー発生
environment:
- TZ=Asia/Tokyo
- LANGUAGE=ja_JP.ja
- LANG=ja_JP.UTF-8
- NLS_LANG=Japanese_Japan.AL32UTF8 # sqlplusの日本語化用
- ORACLE_PWD=oracle11 # sys,systemのパスワード
- ORACLE_SID=XE
- ORACLE_PDB=pdb1
ports:
- 1521:1521
volumes:
- ./oradata:/opt/oracle/oradata # データの永続化
dockerコンテナを起動する
DockerFileとdocker-compose.ymlを作成したフォルダに移動し、コンテナを起動します。
$ cd DockerFileのフォルダ
$ docker-compose up -d
データベースへの接続
起動したdockerコンテナのデータベースへの接続方法を説明します。
SQL Plusで接続する
dockerで起動しているOracleのコンテナIDを取得します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
fe7a257fe2fc oracle/database:11.2.0.2-xe "/bin/sh -c 'exec $O…" 14 minutes ago Up 14 minutes (healthy) 0.0.0.0:1521->1521/tcp oracle11
コンテナIDを指定してbashを起動します。
$ docker exec -it fe7a /bin/bash
bash-4.2# sqlplus system/oracle11@//localhost:1521/XE
SQL*Plus: Release 11.2.0.2.0 Production on Wed May 6 10:29:30 2020
Copyright (c) 1982, 2011, Oracle. All rights reserved.
Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
SQL>
コンテナ内にて、sqlplus経由で接続することができました。
クライアントPCからdockerに接続
dcokerを起動しているWindowsのPCから、a5m2を使用してdockerコンテナ内のDBに接続しました。
今回使用した環境はWindows 10 Home Editionなので、Docker Toolboxを使用しています。
そのため、ホスト名はVirtual BoxのIPアドレスを指定しないといけません。
実は僕はここにかなり詰まっていたのですが、こちらのページを見つけて解決できました。
https://www.it-swarm.dev/ja/windows/docker-toolbox%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%83%9B%E3%82%B9%E3%83%88%E3%81%8C%E6%A9%9F%E8%83%BD%E3%81%97%E3%81%AA%E3%81%84/831640913/
Docker for Windowsや他の環境では別のホスト名になると思いますので、別途確認して設定しましょう。
なお、コンテナを削除(docker rm コンテナ名)を実行すると、作成したデータも消失するので気をつけましょう。
PCの再起動は実施しても問題ありません。
最後に:Oracleもdockerで共有して開発を効率化しよう
WindowsのDockerでOracleデータベースを使用することが確認できました。
DBの環境構築は何かとトラブルがつきものです。
僕の勝手なイメージですが、その中でも特にOracleはトラブルが多いDBだと認識しています。
でも、dockerで環境構築したイメージを共有すれば、環境構築でのトラブルは大きく回避することができます。
Oracleの環境構築の手順は必要なく、イメージの使い方を学んでいけば事足ります。
運用はしっかり考えなくてはいけませんが、DBでdockerを使用するのは実に理に適っているので、使えるところは積極的に使っていきたいですね。