1. 步骤
- 在Mac上安装docker
- 使用oracle的dockerfile,构建image
- 在docker中运行oracle实例
- 启动,停止oracle docker容器
- 连接数据库
2. 在Mac上安装docker
到docker store下载docker-for-mac。
我们需要适当调整一下cpu内存分配,如4核CPU,16G内存。
点击reveal in finder
可以看到了image
的位置在哪里;点击move disk image
把镜像移到其他的路径下。
启动之后,你就可以在终端敲docker info检查了。
# docker info
其实安装完docker之后,你可以在docker store中直接搜索oracle database 12c(12.1.0.2版本)。但是一方面这个版本是oracle 12.1版本,不是最新的12.2版本;另一方面数据库是包含在container中,如果删除container,也就一并删除了database,这不是我们所想要的。我们选择将container和database的数据文件分离。
3. 使用oracle的dockerfile,构建image
去github,下载oracle的构建文件:docker-images-master.zip,大小约5M。
下载完成后,找个目录解压,然后到oracle官网下载oracle 12.2的安装介质linuxx64_12201_database.zip,大小约3.2G。
下载完成后,将安装介质放在docker-images-master解压之后的目录下:/path/to/docker-images-master/OracleDatabase/dockerfiles/12.2.0.1/,即
接着我们开始构建镜像。很简单,就一条命令:
# cd /path/to/docker-images-master/OracleDatabase/dockerfiles
# ./buildDockerImage.sh -v 12.2.0.1 -e
其中的Parameters意义如下:
-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
需要注意的时候,在安装过程中需要联网,因为他会下载oraclelinux:7-slim和yum install pre-install的包。附件是完整的安装log。
安装完成这一步后,我们就可以用# docker images
命令看我们的安装情况了,可以看到oracle linux和oracle database软件已经被装好。
4. 在docker中部署oracle数据库
在docker容器中运行数据库实例,也只需要一条命令:
# docker run --name oracle \
-p 1521:1521 -p 5500:5500 \
-v /path/to/oradata:/opt/oracle/oradata \
oracle/database:12.2.0.1-ee
此时,数据文件已经map到/path/to/oradata下,就算你删除了container,这些数据文件还是会被保留的。对应的log如下:
ORACLE PASSWORD FOR SYS, SYSTEM AND PDBADMIN: scXX7Cj+1m0=1
LSNRCTL for Linux: Version 12.2.0.1.0 - Production on 20-MAY-2017 14:25:30
Copyright (c) 1991, 2016, Oracle. All rights reserved.
Starting /opt/oracle/product/12.2.0.1/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 12.2.0.1.0 - Production
System parameter file is /opt/oracle/product/12.2.0.1/dbhome_1/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/c9f09116cc83/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=0.0.0.0)(PORT=1521)))
……
SQL> Disconnected from Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
#########################
DATABASE IS READY TO USE!
#########################
The following output is now a tail of the alert.log:
Completed: alter pluggable database ORCLPDB1 open
2017-05-20T14:31:25.862061+00:00
ORCLPDB1(3):CREATE SMALLFILE TABLESPACE "USERS" LOGGING DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
ORCLPDB1(3):Completed: CREATE SMALLFILE TABLESPACE "USERS" LOGGING DATAFILE '/opt/oracle/oradata/ORCLCDB/ORCLPDB1/users01.dbf' SIZE 5M REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE UNLIMITED EXTENT MANAGEMENT LOCAL SEGMENT SPACE MANAGEMENT AUTO
ORCLPDB1(3):ALTER DATABASE DEFAULT TABLESPACE "USERS"
ORCLPDB1(3):Completed: ALTER DATABASE DEFAULT TABLESPACE "USERS"
2017-05-20T14:31:26.657295+00:00
ALTER SYSTEM SET control_files='/opt/oracle/oradata/ORCLCDB/control01.ctl' SCOPE=SPFILE;
ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
Completed: ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE
如果“DATABASE IS READY TO USE!”字样已经出现,且后面的log一直停着不动,可以在别的窗口重启container:注意到了最后,光标会停在那里,估计run命令最后调用类似docker logs -f oracle
这样的命令,会类似如tail -f
输出,所以我们可以直接在别的窗口运行docker stop oracle
再docker start oracle
。
5. 启动,停止oracle docker容器
其实我们在上一步已经操作过启停docker,即:
# docker stop oracle
# docker start oracle
如果要看alertlog,可以:
# docker logs oracle
# docker logs -f oracle
后者是以tail -f的方式查看的。
6. 连接数据库
我们可以通过如下命令来修改oracle密码:
# docker exec oracle ./setPassword.sh root123*
然后我们可以用Navicat这个Mac上最流行的客户端,连接oracle数据库。
如果你想以传统的方式,进入container管理数据库,可以这样:
# docker ps -a # 先查询出container的container id
# docker exec -it [container id] /bin/bash # 连接oracle
7. 参考文章
https://oracleblog.org/study-note/how-to-deploy-122-on-docker-on-mac/