IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    在MAC上安装docker并部署oracle12.2

    小荷发表于 2017-05-20 17:11:13
    love 0

    其实很早就想写这篇,但是由于工作忙,一直没有来得整理出来。趁着周末,发布出来吧。

    在本文中,你将看到:

    1. 在Mac上安装docker,并启动docker
    2. 部署oracle docker的build file,并创建image
    3. 部署oracle软件在docker中
    4. 安装oracle实例在docker中
    5. 启动,停止docker以及如何连接数据库

    一。在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检查了。

    LoveHousedeiMac:Oracle 12c on docker lovehouse$ docker info                                      
    Containers: 0
     Running: 0
     Paused: 0
     Stopped: 0
    Images: 0
    Server Version: 17.03.1-ce
    Storage Driver: overlay2
     Backing Filesystem: extfs
     Supports d_type: true
     Native Overlay Diff: true
    Logging Driver: json-file
    Cgroup Driver: cgroupfs
    Plugins: 
     Volume: local
     Network: bridge host ipvlan macvlan null overlay
    Swarm: inactive
    Runtimes: runc
    Default Runtime: runc
    Init Binary: docker-init
    containerd version: 4ab9917febca54791c5f071a9d1f404867857fcc
    runc version: 54296cf40ad8143b62dbcaa1d90e520a2136ddfe
    init version: 949e6fa
    Security Options:
     seccomp
      Profile: default
    Kernel Version: 4.9.27-moby
    Operating System: Alpine Linux v3.5
    OSType: linux
    Architecture: x86_64
    CPUs: 4
    Total Memory: 15.65 GiB
    Name: moby
    ID: CINI:FSC5:XEQX:BERH:YCH5:7BGY:D4WD:NKME:MVGR:VYFL:JONR:DQ7D
    Docker Root Dir: /var/lib/docker
    Debug Mode (client): false
    Debug Mode (server): true
     File Descriptors: 19
     Goroutines: 36
     System Time: 2017-05-20T13:54:44.607290579Z
     EventsListeners: 1
    Registry: https://index.docker.io/v1/
    Experimental: true
    Insecure Registries:
     127.0.0.0/8
    Live Restore Enabled: false
    LoveHousedeiMac: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,即:

    /Users/lovehouse/idocker/docker-images-master/OracleDatabase/dockerfiles/12.2.0.1
    LoveHousedeiMac:12.2.0.1 lovehouse$ ls -l
    total 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.sh
    LoveHousedeiMac:12.2.0.1 lovehouse$

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

    ./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的包。

    LoveHousedeiMac:dockerfiles lovehouse$ ./buildDockerImage.sh -v 12.2.0.1 -e
    Ignored MD5 sum, 'md5sum' command not available.
    ==========================
    DOCKER info:
    Containers: 0
     Running: 0
     Paused: 0
     Stopped: 0
    Images: 0
    Server Version: 17.03.1-ce
    Storage Driver: overlay2
     Backing Filesystem: extfs
    
    ……
    
    Step 16/16 : CMD exec $ORACLE_BASE/$RUN_FILE
     ---> Running in 14330d207a42
     ---> 4f9df5f46a19
    Removing intermediate container 14330d207a42
    Successfully 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软件已经被装好。

    LoveHousedeiMac:Data lovehouse$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    oracle/database     12.2.0.1-ee         4f9df5f46a19        2 hours ago         14.8 GB
    oraclelinux         7-slim              442ebf722584        4 weeks ago         114 MB
    LoveHousedeiMac:Data lovehouse$


    四、安装oracle实例在docker中

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

    docker run --name oracle -p 1521:1521 -p 5500:5500 -v /Users/[username]/oradata:/opt/oracle/oradata oracle/database:12.2.0.1-ee

    其中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。

    LoveHousedeiMac: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-ee
    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
       
    2017-05-20T14:41:16.140414+00:00
    ORCLPDB1(3):Resize operation completed for file# 10, old size 337920K, new size 358400K

    完整的log:run.log

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

    LoveHousedeiMac:~ lovehouse$ docker stop oracle
    oracle
    LoveHousedeiMac:~ lovehouse$ 
    LoveHousedeiMac:~ lovehouse$ 
    LoveHousedeiMac:~ lovehouse$ docker start oracle
    oracle
    LoveHousedeiMac:~ lovehouse$

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

    docker stop oracle
    docker start oracle

    如果要看alertlog,可以:

    docker logs oracle
    docker logs -f oracle

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

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

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

    docker exec oracle ./setPassword.sh XXXXXX

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

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

    LoveHousedeiMac:12.2.0.1 lovehouse$ docker ps -a
    CONTAINER ID        IMAGE                         COMMAND                  CREATED             STATUS              PORTS                                            NAMES
    c9f09116cc83        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   oracle
    LoveHousedeiMac: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_ORCLCDB
    oracle      23     1  0 15:00 ?        00:00:00 ora_clmn_ORCLCDB
    oracle      25     1  0 15:00 ?        00:00:01 ora_psp0_ORCLCDB
    ……
    oracle     360     1  0 15:00 ?        00:00:00 ora_q004_ORCLCDB
    oracle    1017     1  0 16:04 ?        00:00:00 ora_w007_ORCLCDB
    oracle    1031     1  0 16:05 ?        00:00:00 ora_w003_ORCLCDB
    oracle    1081     1  0 16:12 ?        00:00:00 ora_w000_ORCLCDB
    oracle    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



沪ICP备19023445号-2号
友情链接