Oracleをdockerで動かす
目的
ローカルの開発環境として動かす。
手順
基本的にこの手順通りに進めただけ。
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 | コンテナ削除 |