目的
ローカルの開発環境として動かす。
手順
基本的にこの手順通りに進めただけ。
Oracleのバイナリ
oracle-xe-11.2.0-1.0.x86_64.rpm.zipを使いました(Oracleのサイトからダウンロード(要ユーザー登録)します)
コンテナの起動
初期化用のディレクトリを作成
コンテナ起動時にこのディレクトリをマウントすると、中の.sqlや.shが実行される仕組みのようです。
特記事項
- 開発用なのでパスワードは適当
- デフォルトのプロファイルだと忘れた頃(180日後)にアカウントロックされるので無制限に
- RESOURCEロールは非推奨って聞いたので専用のロールを作りました
- DBMS_AQADMとDBMS_AQの実行権限はロールに付与すると使えないので直接付与しています
$ ls startup
01_create_tablespace.sql 02_create_user.sql
$ cat startup/01_create_tablespace.sql
CREATE TABLESPACE testtbs
DATAFILE '/u01/app/oracle/oradata/XE/testtbs.dbf'
SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
NOLOGGING;
ALTER PROFILE DEFAULT limit
FAILED_LOGIN_ATTEMPTS UNLIMITED
PASSWORD_LIFE_TIME UNLIMITED
PASSWORD_LOCK_TIME UNLIMITED
PASSWORD_GRACE_TIME UNLIMITED;
$ cat startup/02_create_user.sql
DROP USER testuser;
CREATE USER testuser
IDENTIFIED BY "password"
DEFAULT TABLESPACE testtbs
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON testtbs;
CREATE ROLE testrole;
GRANT
CREATE SESSION
, CREATE TABLE
, CREATE VIEW
, CREATE SEQUENCE
, CREATE SYNONYM
, CREATE CLUSTER
, CREATE PROCEDURE
, CREATE TRIGGER
, CREATE TYPE
TO testrole;
GRANT testrole TO testuser;
GRANT EXECUTE ON DBMS_AQADM TO testuser;
GRANT EXECUTE ON DBMS_AQ TO testuser;
起動
初期化用のディレクトリは絶対パスで指定。-dオプションをつけるとバックグラウンドで起動します(コンテナとOracleが起動するのに結構時間がかかります)
docker run --name my-oracle \ --shm-size=1g \ -p 1521:1521 \ -p 8080:8080 \ -e ORACLE_PWD=password \ -e TZ="Asia/Tokyo" \ -v $PATH_TO_STARTUP_DIR/startup:/docker-entrypoint-initdb.d/startup \ oracle/database:11.2.0.2-xe
確認
SQL*Plusでログインできることを確認。
docker exec -it my-oracle sqlplus sys/password@XE as sysdba docker exec -it my-oracle sqlplus testuser/password@XE
メモ
使ったdockerコマンド
| key | value |
|---|---|
| images | イメージ一覧 |
| rmi | イメージ削除 |
| run | コンテナ作成 |
| start | コンテナ起動 |
| stop | コンテナ停止 |
| ps [-a] | コンテナ一覧(-aで停止中も含む) |
| rm | コンテナ削除 |