LoginSignup
12
15

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-08-15

今さらながら仕事で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」になるので間違わないように注意しましょう。
image.png

ダウンロードしたバイナリは、以下に配置してください。

イメージフォルダ/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を作成します。
設定内容は下記参照。

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

# ポート番号1521で起動
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に接続しました。

image.png

今回使用した環境は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を使用するのは実に理に適っているので、使えるところは積極的に使っていきたいですね。

12
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
15