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 oracledocker 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/

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐