LoginSignup
2
2

More than 3 years have passed since last update.

Docker版Oracle11gのデータ永続化

Last updated at Posted at 2020-05-23

Docker 版 Oracle11g のデータ永続化のやり方をメモる。
使用するイメージはこちら:https://registry.hub.docker.com/r/wnameless/oracle-xe-11g-r2

やり方

  1. 空のコンテナを作る。
  2. コンテナからOracleのインストールフォルダをホストにまるごとコピーする。
  3. コンテナを一旦削除。
  4. mount をつけて再度コンテナを作る。

1、ます、コンテナをそのまま作る。

# mkdir oracle11g
# cd oracle11g
# docker run -d -p 49161:1521 \
  -e ORACLE_ALLOW_REMOTE=true \
  -e ORACLE_DISABLE_ASYNCH_IO=true \
  -e TZ=Asia/Tokyo \
  -v /etc/localtime:/etc/localtime:ro \
  --name oracle11g \
  wnameless/oracle-xe-11g-r2 \
&& docker logs -f oracle11g

以下のログが出力される。30秒~1分ぐらいかかるので、気長に待ちましょう。

f6c46d814f7db9cde443c78f122d91524e334e30cf44e5979836a906beae0649
Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.


System altered.


System altered.

Shutting down Oracle Database 11g Express Edition instance.
Stopping Oracle Net Listener.

Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

ログが出たら、接続可能になります。確認して見てください。
Ctrl+c でログ監視を終了させ、docker ps -a で状況確認。

# docker ps -a
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                                       NAMES
f6c46d814f7d        wnameless/oracle-xe-11g-r2     "/bin/sh -c '/usr/sb乧"   4 minutes ago       Up 4 minutes        22/tcp, 8080/tcp, 0.0.0.0:49161->1521/tcp   oracle11g

問題なさそうですね。あとは接続して試しにテーブルを作ったりして確認。(確認手順は省く)

2、コンテナ内のファイルをホスト側にコピーする。

# docker cp oracle11g:/u01/app/oracle .

フォルダの大きさを確認

# du -sh oracle
1.7G    oracle

だったの1.7GB 、素晴らしい!
Oracle 12c は 10GB 以上必要あるから全然こっちの方が良い!!

※ オプション
1つのフォルダぐらいを mount したいから、tmp フォルダを作っておく。特に必要ないなら、やらなくて良い。

3、コンテナを一旦削除、docker ps -a で削除されたことを確認

# docker stop oracle11g && docker rm oracle11g
oracle11g
oracle11g
# docker ps -a
CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                               NAMES

4、もう一回コンテナを作るが、今度はmount付き

docker run -d -p 49161:1521 \
  -e ORACLE_ALLOW_REMOTE=true \
  -e ORACLE_DISABLE_ASYNCH_IO=true \
  -e TZ=Asia/Tokyo \
  -v $(pwd)/tmp/:/tmp/ \
  -v $(pwd)/oracle/:/u01/app/oracle \
  -v /etc/localtime:/etc/localtime:ro \
  --name oracle11g \
  wnameless/oracle-xe-11g-r2 \
  && docker logs -f oracle11g

説明すると

-v $(pwd)/tmp/:/tmp/

/tmp フォルダをマウント。ファイルをコンテナに転送する時は便利。

-v $(pwd)/oracle/:/u01/app/oracle

1回目で作ったコンテナのOracleフォルダをマウント。これでデータ永続化可能なる。

-v /etc/localtime:/etc/localtime:ro

timezone をホスト機と同じにする。

再度接続したら、先程確認で作ったテーブルが存在するはず。

おまけ1:sqlplus を使ってみる

# docker exec -it oracle11g bash

root@5ed47462ec5b:/# sqlplus system/oracle@xe
SQL> select username from dba_users;

USERNAME
------------------------------
SYSTEM
SYS
ANONYMOUS
CTXSYS
APEX_PUBLIC_USER
APEX_040000
OUTLN
XS$NULL
XDB
MDSYS
FLOWS_FILES

USERNAME
------------------------------
HR

12 rows selected.

SQL>

問題なさそうですね!

おまけ2:
12c はこちら:https://qiita.com/gorilla0513/items/f22e8cce4e08da031abe

以上。

2
2
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
2
2