オススメ記事
dockerでOracle 11gの開発環境を作成する

現在2020年5月ですが、今さらながら仕事でOracle 11gを使うことになりましたw

Oracle自体は、2012年~2013年くらいに触ったことがあって、初めて使用したデータベースがOracleでした。なので、僕の中ではデファクトスタンダード・・・とはならず、インストールやら文字コードやら、接続文字列やらで苦労した経験しかありません。

というわけで、僕の中では鬼門ともいえる存在。まあ僕自身の知識が不足しているのも大いにありますが、他のDBと比べて扱いづらさが先行しているものです。

とはいうものの、仕事で使用することになったので避けるわけにもいきません。それに加え、個人用の開発環境を簡単に構築できる方法を模索していたところ、docker使ってみればいいのではと思いつきました。

そう思って調べたところ、以下の記事が見つかったので、こちらに則って(というかパクってw)作業をしつつ、個別の補足を追加していきます。

事前準備

参考元の記事の通りですが、事前に必要なものは以下の通りです。

  • gitインストール済み
  • dockerインストール済み(Docker for Windows または Docker Toolbox)
  • Oracle.comのアカウント作成済み

なお、参考元記事はMacですが、僕の場合はWindows 10 Home Editionになります。

dockerでOracle 11gの環境を作成する

以下の手順で実行していきます。

  • githubからOracleをダウンロードする
  • Oracle 11gのバイナリをダウンロードする
  • dockerイメージをビルドする
  • dockerコンテナを起動する

 

githubからOracleをダウンロードする

任意のフォルダ(以降、イメージフォルダ)で、以下のコマンドを実行します。

$ git clone https://github.com/oracle/docker-images.git

 

Oracle 11gのバイナリをダウンロードする

以下のサイトからOracle 11gのバイナリをダウンロードします。

使用するのは、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を作成します。設定内容は下記から引っ張ってきました。

https://qiita.com/wakaken/items/fd870719fda966ab1a79

DockerFile

# イメージを指定します
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

# ポート番号11521で起動
EXPOSE 1521

docker-compose.yml

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アドレスを指定しないといけません。実は僕はここにかなり詰まっていたのですが、こちらのページを見つけて解決できました。

Docker for Windowsや他の環境では別のホスト名になると思いますので、別途確認して設定しましょう。

なお、コンテナを削除(docker rm コンテナ名)を実行すると、作成したデータも消失するのでそこは気をつけましょう。PCの再起動とかは問題ありません。

 

最後に:Oracleもdockerで共有して開発を効率化しよう

見てもらった通り、TODOはあるものの、Oracleデータベースもdockerで使用することが確認できました。

DBの環境構築は何かとトラブルがつきものです。僕の勝手なイメージですが、その中でも特にOracleはトラブルがつきもののDBだと認識しています。

でも、dockerで環境構築したイメージを共有すれば、環境構築でのトラブルは大きく回避することができます。もはやOracleの環境構築の手順は必要なく、イメージの使い方を学んでいけば事足ります。

運用はしっかり考えなくてはいけませんが、DBでdockerを使用するのは実に理に適っているので、使えるところは積極的に使っていきたいですね。

RaiseTech(レイズテック)でJavaとAWSを習得しよう【未経験者もOK】

IT業界で一番よく使われるプログラミング言語はJavaです。型付き言語として不具合を生みにくい仕様なので、多くの企業で採用されています。

そしてもう一つ、一番よく使われるインフラはAWSです。もはやインフラの定番といってもいいでしょう。

ただ、この2つを学習するにはどうすればいいのか? これは経験者でも非常によく悩む問題です。

そんな中、この悩みを同時に解決できる講座が生まれました。その名も「RaiseTech(レイズテック)」です。

未経験者でも学習できる内容に特化し、最速でエンジニアになれるための講座を用意しています。また、講師は現役エンジニアのみが務め、質の高い教育を提供します。

詳細はこちらから▼

おすすめの記事