12
14

More than 5 years have passed since last update.

Docker (on Windows) で OracleDB 12.2 イメージをビルドして接続するまで

Last updated at Posted at 2017-11-01

今回は実際に接続するところまで行います。
公式Dockerfile や参考リンク見た方が速いです :innocent:

※注意

2017年11月7日時点ですと、
Windows10 でコンテナ起動時にボリューム指定すると
as SYSDBA でログインできないようです。

環境

  • docker toolbox on Windows 10
  • docker-machine.exe version 0.10.0
  • docker version の結果は以下の通り
  • プロキシ設定済
result
 Client:
 Version:      17.03.1-ce
 API version:  1.27
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Mon Mar 27 16:58:30 2017
 OS/Arch:      linux/amd64

Server:
 Version:      17.03.1-ce
 API version:  1.27 (minimum version 1.12)
 Go version:   go1.7.5
 Git commit:   c6d412e
 Built:        Mon Mar 27 16:58:30 2017
 OS/Arch:      linux/amd64
 Experimental: false

Dockerfile の入手

git 使えない場合は適宜 zip 落として解凍したりしましょう。

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

Oracle DB 本体の入手

本体は Docker のみで入手できません。
以下のリンクからダウンロードします(事前に無償OTN開発者の登録が必要)。

Oracle Database Software Downloads | Oracle Technology Network | Oracle

上記のリンクから、(12.2.0.1.0) - Standard Edition 2 and Enterprise Edition
Linux x86-64 版をダウンロードしましょう(3.2GB もあるので気長に待ちましょう)。

ダウンロードが終わったら zip ファイルのまま(ファイル名の例: linuxx64_12201_database.zip)
docker-images-master/OracleDatabase/dockerfiles/12.2.0.1 の下に配置します。
Dockerfile.ee と同じ場所に zip ファイルがあれば大丈夫です。

Docker イメージのビルド

以下のようにして Docker image のビルドをします。結構時間がかかります。

$ cd docker-images-master/OracleDatabase/dockerfiles
$ sh buildDockerImage.sh -v 12.2.0.1 -e

各オプションは以下の通りです。
Mac だと MD5 コマンドが無いらしいので -i が必要らしいです。

options
   -v: version to build
       Choose one of: 11.2.0.2  12.1.0.2  12.2.0.1
   -e: creates image based on 'Enterprise Edition'
   -s: creates image based on 'Standard Edition 2'
   -x: creates image based on 'Express Edition'
   -i: ignores the MD5 checksums
   -o: passes on Docker build option

注意

私の環境だと Docker が古かったためか以下の部分でエラーが起きました。

/OracleDatabase/dockerfiles/12.2.0.1/Dockerfile.ee
~途中省略~
HEALTHCHECK --interval=1m --start-period=5m \
   CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1

これはコンテナの異常を検知するためのオプションらしいです。
Docker 1.12の新機能、ヘルスチェック機能を使ってみる | さくらのナレッジ

今回はあくまで動かすことが目的なので、コメントアウトして対処しました。
もし同じところで躓いた方は参考にしてください。
(根本的な対処知ってる方いらしたら教えてください :cry:

/OracleDatabase/dockerfiles/12.2.0.1/Dockerfile.ee
~途中省略~
# HEALTHCHECK --interval=1m --start-period=5m \
#    CMD "$ORACLE_BASE/$CHECK_DB_FILE" >/dev/null || exit 1

無事に Build が終わると、以下のようにして確認できます。

$ docker image ls
REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
oracle/database                12.2.0.1-ee         5a12cbb3b827        22 hours ago        13.3 GB

コンテナ作成

以下のようにしてコンテナを作成して起動します。
特にポートとか設定していないと接続できないので注意してください。

startDB.sh
#!/bin/bash
docker run --name oracleDB \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_SID=orcl -e ORACLE_PDB=pdb1 -e ORACLE_PWD=0racleDB \
-v /c/Users/User1/Desktop/studyOracleDB/oradata:/opt/oracle/oradata \
oracle/database:12.2.0.1-ee

※ 上記のパスワード「0racleDB」の先頭文字は数字の0です

パスワードは自動で生成されますが、自分で予め設定したい場合は
-e ORACLE_PWD=<your database passwords> を入れればできます。
詳しくは 公式Dockerfile をご確認ください。

以下のようにしてコンテナを作成&起動します。

docker@default:/c/Users/User1/Desktop/studyOracleDB$ sh startDB.sh
ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: 0racleDB

LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 07-NOV-2017 01:24:24

Copyright (c) 1991, 2016, Oracle.  All rights reserved.

~~~省略~~~

#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
Completed: alter pluggable database pdb1 open

~~~省略~~~

Completed:    ALTER PLUGGABLE DATABASE pdb1 SAVE STATE

DATABASE IS READY TO USE! が出てくれば OK!
さっそく接続していきましょう。

起動したコンテナ内の Oracle DB へ接続

ここでは 2通りの方法で接続します。

  • ビルドしたイメージ内の sqlplusを使う
  • SQL Developer(Windows 版)を使う

ビルドしたイメージ内の sqlplusを使う

ビルドしたイメージ内に sqlplus が入っているので、それを使います。

$ docker run --rm -ti oracle/database:12.2.0.1-ee sqlplus system/0racleDB@//192.168.99.100:1521/pd
b1

SQL*Plus: Release 12.2.0.1.0 Production on Tue Nov 7 01:44:07 2017

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> select count(1) from user_tables;

  COUNT(1)
----------
       128

SQL>

接続に必要な各パラメータは以下の通りです。

  • 0oracleDB は指定した、もしくは自動生成されたパスワード
  • 192.168.99.100:1521 は Docker-machine の ip ($ docker-machine ls とかで確認できます)
  • pdb1 はコンテナ起動時に指定したpdb名前 (何も指定しなかった場合は ORCLPDB1 になります)

SQL Developer(Windows 版)を使う

しかし上記の付属SQL developer だと、接続後に↑↓キーによる履歴参照だったり、
バックスペースキーが使えなかったりしてストレスフルなので、ツールでも接続してみます。
(Docker を Mac や Ubuntu でいれている場合は、lrwrap を入れれば解決できそう?)

まず以下のリンクから Oracle SQL Developer を入手します。
めんどうなので Windows 64-bit with JDK 8 included をダウンロードします。

Oracle SQL Developer ダウンロード

展開して sqldeveloper.exe を開き、左側にある緑のプラスボタンをクリックします。
以下のような入力画面が出てくるので、値を入力しましょう。

image.png

下にある「テスト」ボタンを押下すれば、接続テストができます。
設定が正しければ、上記の画像のように左下の「ステータス」が「成功」となります。

以下は実際に「接続」を押してから、適当なクエリを投げた結果です。

image.png

ちゃんと DB に問い合わせできてますね!
これで自習が捗ります!

感想

Oracle DB めんどくちゃい :innocent:

参考リンク

変更履歴

  • 2017年11月7日
    • startDB.sh 修正
    • リンクの貼り忘れ対応
12
14
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
14