一。在Mac上安装docker。
到docker store下载即可。下载地址是:https://store.docker.com/editions/community/docker-ce-desktop-mac
其实我们还可以看到别的操作系统的版本,如centos版本,aws版本,Ubuntu版本等等,在centos上,可以用wget命令进行下载。在这里我们用到的是mac版本。

下载完成后,我们得到116M左右的Docker.dmg文件,点击拖动到application文件夹进行安装。

安装完成后,你就可以在launchpad中看到docker图标,点击打开:

适当调整一下cpu内存分配,如给一半资源,4个CPU,16G内存。注意这里也可以看到了你的container image的位置在哪里,点击move可以挪到别的位置去。

启动之后,你就可以在终端敲docker info检查了。

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647LoveHousedeiMac:Oracle 12c on docker lovehouse$ docker info                                      Containers: 0Running: 0Paused: 0Stopped: 0Images: 0Server Version: 17.03.1-ceStorage Driver: overlay2Backing Filesystem: extfsSupports d_type: trueNative Overlay Diff: trueLogging Driver: json-fileCgroup Driver: cgroupfsPlugins:Volume: localNetwork: bridge host ipvlan macvlan null overlaySwarm: inactiveRuntimes: runcDefault Runtime: runcInit Binary: docker-initcontainerd version: 4ab9917febca54791c5f071a9d1f404867857fccrunc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfeinit version: 949e6faSecurity Options:seccomp  Profile: defaultKernel Version: 4.9.27-mobyOperating System: Alpine Linux v3.5OSType: linuxArchitecture: x86_64CPUs: 4Total Memory: 15.65 GiBName: mobyID: CINI:FSC5:XEQX:BERH:YCH5:7BGY:D4WD:NKME:MVGR:VYFL:JONR:DQ7DDocker Root Dir: /var/lib/dockerDebug Mode (client): falseDebug Mode (server): trueFile Descriptors: 19Goroutines: 36System Time: 2017-05-20T13:54:44.607290579ZEventsListeners: 1Registry: https://index.docker.io/v1/Experimental: trueInsecure Registries:127.0.0.0/8Live Restore Enabled: falseLoveHousedeiMac:Oracle 12c on docker lovehouse$

其实安装完docker之后,你可以在docker store中直接pull oracle database 12c(12.1.0.2版本)

但是一方面这个版本是oracle 12.1版本,不是最新的12.2版本,另一方面数据库是包含在container中,如果删除container,就也一并删除了database,这不是我们所想要的。我们选择将container和database的数据文件分开。

二、部署oracle docker的build file,并创建image
到github下载oracle的build file:docker-images-master.zip,地址是https://github.com/oracle/docker-images,是一个约5M的文件。

下载完成后,找个目录解压。如我是放在/Users/[username]/iDocker 下。

然后到otn下载oracle 12.2的安装介质linuxx64_12201_database.zip。下载地址是:http://www.oracle.com/technetwork/database/enterprise-edition/downloads/index.html,是一个3.2G的文件。

下载完成后,将安装介质放在docker-images-master解压之后的目录下:/Users/[username]/idocker/docker-images-master/OracleDatabase/dockerfiles/12.2.0.1,即:

1234567891011121314151617181920/Users/lovehouse/idocker/docker-images-master/OracleDatabase/dockerfiles/12.2.0.1LoveHousedeiMac:12.2.0.1 lovehouse$ ls -ltotal 6745656-rw-r–r–@ 1 lovehouse  staff          62 May 20 20:04 Checksum.ee-rw-r–r–@ 1 lovehouse  staff          62 May 20 20:04 Checksum.se2-rw-r–r–@ 1 lovehouse  staff        2547 May 20 20:04 Dockerfile.ee-rw-r–r–@ 1 lovehouse  staff        2549 May 20 20:04 Dockerfile.se2-rwxr-xr-x@ 1 lovehouse  staff        1259 May 20 20:04 checkDBStatus.sh-rwxr-xr-x@ 1 lovehouse  staff         839 May 20 20:04 checkSpace.sh-rwxr-xr-x@ 1 lovehouse  staff        2898 May 20 20:04 createDB.sh-rw-r–r–@ 1 lovehouse  staff        6878 May 20 20:04 db_inst.rsp-rw-r–r–@ 1 lovehouse  staff        9264 May 20 20:04 dbca.rsp.tmpl-rwxr-xr-x@ 1 lovehouse  staff        2057 May 20 20:04 installDBBinaries.sh-rwxr-xr-x@ 1 lovehouse  staff        1065 May 20 20:04 installPerl.sh-rwxrwxrwx@ 1 lovehouse  staff  3453696911 Mar 12 19:02 linuxx64_12201_database.zip-rwxr-xr-x@ 1 lovehouse  staff        5332 May 20 20:04 runOracle.sh-rwxr-xr-x@ 1 lovehouse  staff         769 May 20 20:04 setPassword.sh-rwxr-xr-x@ 1 lovehouse  staff         876 May 20 20:04 setupLinuxEnv.sh-rwxr-xr-x@ 1 lovehouse  staff         689 May 20 20:04 startDB.shLoveHousedeiMac:12.2.0.1 lovehouse$

三、部署oracle软件在docker中
很简单,就一条命令:

1./buildDockerImage.sh -v 12.2.0.1 -e
1234567其中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的包。

12345678910111213141516171819202122232425262728LoveHousedeiMac:dockerfiles lovehouse$ ./buildDockerImage.sh -v 12.2.0.1 -eIgnored MD5 sum, ‘md5sum’ command not available.==========================DOCKER info:Containers: 0Running: 0Paused: 0Stopped: 0Images: 0Server Version: 17.03.1-ceStorage Driver: overlay2Backing Filesystem: extfs …… Step 16/16 : CMD exec $ORACLE_BASE/$RUN_FILE—> Running in 14330d207a42—> 4f9df5f46a19Removing intermediate container 14330d207a42Successfully built 4f9df5f46a19   Oracle Database Docker Image for ‘ee’ version 12.2.0.1 is ready to be extended:        –> oracle/database:12.2.0.1-ee   Build completed in 931 seconds.  LoveHousedeiMac:dockerfiles lovehouse$

附件是完整的log:build.log

安装完成这一步后,我们就可以用docker images命令看我们的安装情况了:
可以看到oracle linux和oracle database软件已经被装好。

12345LoveHousedeiMac:Data lovehouse$ docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEoracle/database     12.2.0.1-ee         4f9df5f46a19        2 hours ago         14.8 GBoraclelinux         7-slim              442ebf722584        4 weeks ago         114 MBLoveHousedeiMac:Data lovehouse$


四、安装oracle实例在docker中

安装数据库实例,也只需要一条命令:

docker run –name oracle -p 1521:1521 -p 5500:5500 -v /Users/andy/idocker/oradata:/opt/oracle/oradata oracle/database:12.2.0.1-ee

1docker run –name oracle -p 1521:1521 -p 5500:5500 -v /Users/[username]/oradata:/opt/oracle/oradata oracle/database:12.2.0.1-ee
123456789101112其中Parameters:   –name:        The name of the container (default: auto generated)   -p:            The port mapping of the host port to the container port.                  Two ports are exposed: 1521 (Oracle Listener), 5500 (OEM Express)   -e ORACLE_SID: The Oracle Database SID that should be used (default: ORCLCDB)   -e ORACLE_PDB: The Oracle Database PDB name that should be used (default: ORCLPDB1)   -e ORACLE_PWD: The Oracle Database SYS, SYSTEM and PDB_ADMIN password (default: auto generated)   -e ORACLE_CHARACTERSET:                  The character set to use when creating the database (default: AL32UTF8)   -v             The data volume to use for the database.                  Has to be owned by the Unix user “oracle” or set appropriately.                  If omitted the database will not be persisted over container recreation.

注意数据文件已经map到/Users/[username]/oradata下。此时就算你删除了container,这些数据文件还是会被保留的。
对应的log如下,注意到了最后,会停在那里,估计run命令最后调用类似docker logs -f oracle这样的命令,会tail -f类似的输出,所以我们可以直接在别的窗口docker stop oracle再docker start oracle。

1234567891011121314151617181920212223242526272829303132333435LoveHousedeiMac:dockerfiles lovehouse$ docker run –name oracle -p 1521:1521 -p 5500:5500 -v /Users/lovehouse/oradata:/opt/oracle/oradata oracle/database:12.2.0.1-eeORACLE 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 – ProductionSystem parameter file is /opt/oracle/product/12.2.0.1/dbhome_1/network/admin/listener.oraLog messages written to /opt/oracle/diag/tnslsnr/c9f09116cc83/listener/alert/log.xmlListening 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 open2017-05-20T14:31:25.862061+00:00ORCLPDB1(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  AUTOORCLPDB1(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  AUTOORCLPDB1(3):ALTER DATABASE DEFAULT TABLESPACE “USERS”ORCLPDB1(3):Completed: ALTER DATABASE DEFAULT TABLESPACE “USERS”2017-05-20T14:31:26.657295+00:00ALTER SYSTEM SET control_files=’/opt/oracle/oradata/ORCLCDB/control01.ctl’ SCOPE=SPFILE;   ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATECompleted:    ALTER PLUGGABLE DATABASE ORCLPDB1 SAVE STATE  2017-05-20T14:41:16.140414+00:00ORCLPDB1(3):Resize operation completed for file# 10, old size 337920K, new size 358400K

完整的log:run.log

如果“DATABASE IS READY TO USE!”字样已经出现,且后面的log一直停着不动,可以在别的窗口重启container:

1234567LoveHousedeiMac:~ lovehouse$ docker stop oracleoracleLoveHousedeiMac:~ lovehouse$LoveHousedeiMac:~ lovehouse$LoveHousedeiMac:~ lovehouse$ docker start oracleoracleLoveHousedeiMac:~ lovehouse$

五、启动,停止docker以及如何连接数据库
到了最关心的部分,如何docker和连接数据库。
启停docker其实我们在上一步已经操作过,即:

12docker stop oracledocker start oracle

如果要看alertlog,可以:

12docker logs oracledocker logs -f oracle

后者是以tail -f的方式查看的。

连接数据库,注意我们一开始创建的数据库,密码是:

我们可以通过如下命令来修改密码:

1docker exec oracle ./setPassword.sh XXXXXX

然后我们可以用Navicat这个Mac上最流行的客户端,连接oracle数据库。

另外,如果你想进入container,以传统的方式管理数据库,你可以这样:
先用docker ps -a查询出container的container id,再用docker exec -it [container id] /bin/bash 连接:

123456789101112131415161718LoveHousedeiMac:12.2.0.1 lovehouse$ docker ps -aCONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                            NAMESc9f09116cc83        oracle/database:12.2.0.1-ee   “/bin/sh -c ‘exec …”   2 hours ago         Up About an hour    0.0.0.0:1521->1521/tcp, 0.0.0.0:5500->5500/tcp   oracleLoveHousedeiMac:12.2.0.1 lovehouse$LoveHousedeiMac:12.2.0.1 lovehouse$LoveHousedeiMac:12.2.0.1 lovehouse$LoveHousedeiMac:12.2.0.1 lovehouse$ docker exec -it c9f09116cc83 /bin/bash[oracle@c9f09116cc83 ~]$ ps -ef |grep ora_oracle      21     1  0 15:00 ?        00:00:00 ora_pmon_ORCLCDBoracle      23     1  0 15:00 ?        00:00:00 ora_clmn_ORCLCDBoracle      25     1  0 15:00 ?        00:00:01 ora_psp0_ORCLCDB……oracle     360     1  0 15:00 ?        00:00:00 ora_q004_ORCLCDBoracle    1017     1  0 16:04 ?        00:00:00 ora_w007_ORCLCDBoracle    1031     1  0 16:05 ?        00:00:00 ora_w003_ORCLCDBoracle    1081     1  0 16:12 ?        00:00:00 ora_w000_ORCLCDBoracle    1496  1476  0 16:58 ?        00:00:00 grep –color=auto ora_[oracle@c9f09116cc83 ~]$

参考:
https://sqlmaria.com/2017/04/27/oracle-database-12c-now-available-on-docker/
http://www.eygle.com/archives/2017/05/mac_docker_oracle_122.html

关于法定节假日的问题

1995年5月, 中国开始实行每周5天工作制。 1999年9月18日,中国国务院发布《全国年节及纪念日放假办法》,决定增加公众法定休假日。春节、“五一”和 “十一...

阅读全文

CentOS下shadowsocks-libev一键安装脚本

本脚本适用环境: 系统支持:CentOS 内存要求:≥128M 日期:2018 年 06 月 01 日 关于本脚本: 一键安装 libev 版的 Shadowsocks 最新版本。该版本的特点...

阅读全文

docker daemon的HTTP socket TLS加密连接

默认docker daemon是通过非网络的unix socket监听客户端连接的.如果我们需要客户端通过网络来安全的连接到docker daemon,则因该配置TLS加密方式,通过http的...

阅读全文

评论已经关闭。