将Docker DB数据存储到本地持久性目录

时间:2018-03-21 16:29:25

标签: oracle docker

我有一个使用Oracle作为其数据库的应用程序,我正在努力让Dockerized版本的Oracle在本地运行。我正在使用this Oracle image,到目前为止,它正如广告所说的那样完美而完美地工作!我把它拉了下来,就像这样运行它:

docker run -d -p 8080:8080 -p 1521:1521 sath89/oracle-12c

容器启动和运行需要一段时间,实际上是几分钟。下面你可以看到我在大约3分钟的过程中多次运行docker logs命令并且每次都获得越来越多的输出,直到它最终站起来并运行!

MyUser:~ myuser$ docker logs f0a177ed739f
Database not initialized. Initializing database.
Starting tnslsnr

MyUser:~ myuser$ docker logs f0a177ed739f
Database not initialized. Initializing database.
Starting tnslsnr
Copying database files
1% complete
3% complete
11% complete

MyUser:~ myuser$ docker logs f0a177ed739f
Database not initialized. Initializing database.
Starting tnslsnr
Copying database files
1% complete
3% complete
11% complete
18% complete
26% complete
37% complete
Creating and starting Oracle instance
40% complete
45% complete

MyUser:~ myuser$ docker logs f0a177ed739f
Database not initialized. Initializing database.
Starting tnslsnr
Copying database files
1% complete
3% complete
11% complete
18% complete
26% complete
37% complete
Creating and starting Oracle instance
40% complete
45% complete
50% complete
55% complete
56% complete
60% complete
62% complete
Completing Database Creation
66% complete
70% complete
73% complete
85% complete
96% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/xe/xe.log" for further details.
Configuring Apex console
Database initialized. Please visit http://#containeer:8080/em http://#containeer:8080/apex for extra configuration if needed
Starting web management console

PL/SQL procedure successfully completed.

Starting import from '/docker-entrypoint-initdb.d':
found file /docker-entrypoint-initdb.d//docker-entrypoint-initdb.d/*
[IMPORT] /entrypoint.sh: ignoring /docker-entrypoint-initdb.d/*

Import finished

Database ready to use. Enjoy! ;)

然后,我可以使用像SQLDeveloper这样的工具连接到localhost:1521并创建表格,类型等。到目前为止一切顺利!

但是,我立刻杀了这个容器(docker stopdocker rm),我所做的所有更改都会丢失!换句话说,下次我运行容器时(使用完全相同的docker run命令),还需要另外3-4分钟来初始化,然后我的所有更改(表创建等)来自上次会议现在不见了!

有没有办法告诉Docker(可能是docker run命令的附加arg)将所有数据存储在我的主机/本地文件系统的某个地方?例如,我可以在~/myappdb/data下创建一个“data dir”,然后告诉Docker和/或容器内的Oracle DB将所有数据存储到~/myappdb/data,这样每次我杀了+重新启动容器我的数据是否持久化?

1 个答案:

答案 0 :(得分:2)

您可以使用docker run命令的参数-v--volume将数据库数据文件夹绑定到主机文件夹:

docker run -d -p 8080:8080 -p 1521:1521 -v ~/myappdb/data:/u01/app/oracle sath89/oracle-12c

image sath89/oracle-12c的文档中,他们将容器的/u01/app/oracle文件夹绑定到主机文件夹/my/oracle/data