docker oracle集群_docker oracle 集群高可用 - CSDN
精华内容
参与话题
  • 利用Docker快速部署Oracle环境

    千次阅读 2018-03-18 20:07:56
    转载地址: https://www.linuxidc.com/Linux/2017-03/141760.htm利用Docker快速部署Oracle环境[日期:2017-03-14]来源:Linux社区 作者:taotao1240[字体:大 中 小]工作中需要频繁使用Oracle环境,但是每次搭建...

    转载地址: https://www.linuxidc.com/Linux/2017-03/141760.htm

    利用Docker快速部署Oracle环境

    [日期:2017-03-14]来源:Linux社区  作者:taotao1240[字体:  ]

    工作中需要频繁使用Oracle环境,但是每次搭建起来比较消耗时间,本想通过虚拟机模板的方式来快速安装oracle vm,但是每次改ip等环境也很耗时,因此想到docker中有没有已经做好的images,这样就能快速获得Oracle环境。

    root@- rac1:docker search oracle

    INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED

    docker.io docker.io/wnameless/oracle-xe-11g Oracle Express 11g R2 on Ubuntu 16.04 LTS 417 [OK]

    docker.io docker.io/oraclelinux Oracle Linux is an open-source operating s... 304 [OK]

    docker.io docker.io/alexeiled/docker-oracle-xe-11g This is a working (hopefully) Oracle XE 11... 203 [OK]

    docker.io docker.io/sath89/oracle-12c Oracle Standard Edition 12c Release 1 with... 112 [OK]

    docker.io docker.io/sath89/oracle-xe-11g Oracle xe 11g with database files mount su... 91 [OK]

    docker.io docker.io/isuper/java-oracle This repository contains all java releases... 52 [OK]

    docker.io docker.io/jaspeen/oracle-11g Docker image for Oracle 11g database 38 [OK]

    docker.io docker.io/oracle/oraclelinux Oracle Linux is an open-source operating s... 34 [OK]

    docker.io docker.io/ingensi/oracle-jdk Official Oracle JDK installed on CentOS. 20 [OK]

    docker.io docker.io/airdock/oracle-jdk Docker Image for Oracle Java SDK (8 and 7)... 16 [OK]

    docker.io docker.io/oracle/openjdk Docker images containing OpenJDK Oracle Linux 15 [OK]

    docker.io docker.io/cogniteev/oracle-java Oracle JDK 6, 7, 8, and 9 based on Ubuntu ... 12 [OK]

    docker.io docker.io/n3ziniuka5/ubuntu-oracle-jdk Ubuntu with Oracle JDK. Check tags for ver... 12 [OK]

    docker.io docker.io/andreptb/oracle-java Debian Jessie based image with Oracle JDK ... 8 [OK]

    docker.io docker.io/oracle/glassfish GlassFish Java EE Application Server on Or... 8 [OK]

    docker.io docker.io/oracle/nosql Oracle NoSQL on a Docker Image with Oracle... 7 [OK]

    docker.io docker.io/infogene/oracle Image for running Oracle Database 11g Stan... 6 [OK]

    docker.io docker.io/openweb/oracle-tomcat A fork off of Official tomcat image with O... 5 [OK]

    docker.io docker.io/flurdy/oracle-java7 Base image containing Oracle's Java 7 JDK 4 [OK]

    docker.io docker.io/jtech/oracle-jdk A Docker image based on the smallest Linux... 3 [OK]

    docker.io docker.io/davidcaste/debian-oracle-java Oracle Java 8 (and 7) over Debian Jessie 2 [OK]

    docker.io docker.io/kaluzki/oracle kaluzki/oracle 2 [OK]

    docker.io docker.io/clincase/oracle clincase oracle db server image 1 [OK]

    docker.io docker.io/jckrz/debian-oracle-jdk Vanilla Debian + Oracle JDK 1 [OK]

    docker.io docker.io/publicisworldwide/oracle-core This is the core image based on Oracle Lin... 1 [OK]

    可以看到有很多版本,11g,12c

     

    这里选择获取12c版本

    root@- rac1:/home/# docker pull sath89/oracle-12c

    Using default tag: latest

    latest: Pulling from sath89/oracle-12c

    863735b9fd15: Pull complete 

    4fbaa2f403df: Pull complete 

    faadd00cf98e: Downloading [=======>                                          ] 394.8 MB/2.768 GB

    829e2e754405: Download complete 

     

    root@- rac1:/home/# docker images

    REPOSITORY TAG IMAGE ID CREATED SIZE

    docker.io/sath89/oracle-12c latest b8bf52883bc7 5 weeks ago 5.692 GB

     

    使用刚刚下载下来的12g image创建一个container,并运行其上的oracle数据库

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

     

    [root@-rac1 ~]# docker logs -f ffbeb07058449672c640ddb4e59b8376dae2e3b4dd54142871da7adbc069ee79

    ls: cannot access /u01/app/oracle/oradata: No such file or directory

    Database not initialized. Initializing database.

    Starting tnslsnr

    Copying database files

    1% complete

    37% complete

    Creating and starting Oracle instance

    40% complete

    45% complete

    62% complete

    Completing Database Creation

    66% 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! ;)

    到这里Oracle实例就已经启动好了

     

    可以看到创建的container已经在运行中

    [root@-rac1 ~]~$ docker ps

    CONTAINER ID        IMAGE              COMMAND            CREATED            STATUS              PORTS                                            NAMES

    9e893d773494        sath89/oracle-12c  "/entrypoint.sh "  15 minutes ago      Up 15 minutes      0.0.0.0:1521->1521/tcp, 0.0.0.0:8080->8080/tcp  clever_chandrasekhar

    进入oracle container

    [root@-rac1 ~]~$ docker exec -it 9e893d773494 /bin/bash

     

    root@9e893d773494:/# su oracle

    oracle@9e893d773494:~$ $ORACLE_HOME/bin/sqlplus / as sysdba

    SQL*Plus: Release 12.1.0.2.0 Production on Fri Feb 24 03:03:00 2017

    Copyright (c) 1982, 2014, Oracle.  All rights reserved.

    SQL>

    Oracle 使用的实例名,用户名,密码如下

    ---------------------------------------------

    hostname: localhost

    port: 1521

    sid: xe

    username: system

    password: oracle

    ---------------------------------------------

    接下来就可以快速使用Oracle12C了





    展开全文
  • 入坑docker中部署oracle

    千次阅读 2019-10-16 10:58:55
    文章目录入坑docker中部署oracle安装dockerdocker-compose初始化swarm集群安装相关镜像坑在哪里?部署前docker-compose.yml文件定期给数据库备份还原数据常见的坑总结参照来源 安装dockerdocker-compose 安装...

    入坑docker中部署oracle

    安装docker、docker-compose

    初始化swarm集群

    • 初始化swarm集群 docker swarm init在这里插入图片描述

    • 创建docker swarm overlay网络 docker network create --driver overlay unreal-network在这里插入图片描述

      准备工作完成了,下面开始部署oracle吧!!!

    安装相关镜像

    ​ 这里以dockerhub上的truevoly/oracle-12c为例:

    • 下载镜像:docker pull truevoly/oracle-12c

    • 编辑docker-compose文件:

    version: "3"
    services:
      oracleDataBases:
        image: truevoly/oracle-12c  		#镜像  sath89/oracle-12c      #镜像
        volumes:         	 									#挂载   :前面的是本地的文件夹   表示: 容器内的文件夹挂载到本地的文件夹下面
          - /mnt/ora:/u01/app/oracle
          - /etc/localtime:/etc/localtime:ro
        ports:            											#端口映射
          - "1521:1521"
          - "9081:8080"
        environment:
          - DBCA_TOTAL_MEMORY=1024
        deploy:
          replicas: 1 											# replicas模式, 复制数目为1
          restart_policy:
            condition: on-failure
          placement:
            constraints: [node.role == manager]	 			# 部署位置,只在工作节点部署
        networks:
          - default
    
    networks:
      default:
        external:
          name: unreal-network
    
    • 启动docker-compose.yml: docker stack deploy -c docker-compose-oracle.yml unreal

    • 查看容器运行情况docker service lsdocker ps
      在这里插入图片描述

    • 查看容器启动的日志 docker service logs -f unreal_oracleDataBases(这个过程时间有点长,耐心等待就可以了,直到看到最后一行的“Database ready to use. Enjoy! ?”,就表示部署完成了)
      在这里插入图片描述

    • 这样docker中的oracle就部署完毕了。打开数据库工具(这里是用的是JetBrains Toolbox中下载的DateGrip),按照docker-compose.yml文件中的信息编辑连接。

      1. 连接名可以按照自己工作的习惯命名; Name:@192.168.0.9。
      2. 备注信息可以按照自己的数据库用途进行相关描述,便于使用; Commen: 本地项目测试使用。
      3. 在常规信息中
      • 可以选择连接类型、驱动程序当然是Driver:。至于这里为什么是Connection type:SID,大概是由镜像决定的,具体怎么封装oracle镜像文件,还有待进一步学习。
      • 输入相对应的Host、Port、SID、Driver、User、Password以及密码是否永久保存的Save。
      • URL是在你输入过程中工具会自动生成。
        在这里插入图片描述

    坑在哪里?

    部署前docker-compose.yml文件

    • 这部分非常重要:
    1. 首先部署的service name 一定要起一个跟自己服务相关的名字,便于后期的使用。
    2. 挂载目录非常有必要,这样可以预防容器重启带来的数据库信息丢失的风险,这里的数据库信息是指全部。
    3. 挂载目录必须是可读写权限,否则在数据库初始化的时候容器没有在预定的挂载目录中初始化环境的权限。

    定期给数据库备份

    • 这个工作的重要性不用多说,最好能将部署容器时的所有文件都备份下来
    • 如果不能做到所有文件都保存,至少要将/u01/app/oracle/oradata/xe/中的文件及时备份,在实际的生产环境中可以把这些文件都挂载到一个安全系数比较高的存储机中。

    还原数据

    • 其实只要把数据做好备份,只需要按照上面的步骤,将数据库重新建起来,恢复容器即可,按照oracle数据恢复的方法,将数据库文件灌到/u01/app/oracle/oradata/xe/中,再重新装载数据即可。可参照这篇Oracle数据库冷备份与恢复(救命稻草)文章。

    常见的坑

    • 当你查看容器启动日志时你会发现如图报错信息。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述日志中提示的很清楚,DBCA Operation failed,Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/xe/xe.log" for further details。打开对应挂载到本地的日志文件sudo cat /mnt/ora/cfgtoollogs/dbca/xe/xe.log发现问题所在,出现ORA-00821: Specified value of sga_target 768M is too small, needs to be at least 1160M,以及ORA-01078: failure in processing system parameters的错误,导致建库失败。在这里插入图片描述解决方式:找到挂载在本地的文件目录中的*.ora文件,我这里本地文件生成的目录是/mnt/ora/cfgtoollogs/dbca/xe/initxeTempOMF.ora,在这里插入图片描述打开文件后将日志中提示的sga_target的值,由768m修改到不小于1160m。然后删除容器docker service rm unreal_oracleDataBase,重启容器docker stack deploy -c docker-compose-oracle.yml unreal,再查看启动日志。发现日志没有什么变化,证明我们前面找到的文件路径并不正确。这里再重新给已经生成的文件给予sudo chmod -R 777 /mnt/ora/权限。

    • 容器启动过程实际上是按照容器中根目录下/entrypoint.sh脚本运行的,这里贴出来给大家参阅,希望能够提供相应的解决问题的灵感:

      #!/bin/bash
      set -e
      
      # Prevent owner issues on mounted folders, if desired
      if [ "$ENABLE_OWNERSHIP_FIX" = true ] ; then
      	chown -R oracle:dba /u01/app/oracle
      	chown -R oracle:dba /docker-entrypoint-initdb.d/
      fi
      
      rm -f /u01/app/oracle/product
      ln -s /u01/app/oracle-product /u01/app/oracle/product
      
      #Run Oracle root scripts
      /u01/app/oraInventory/orainstRoot.sh > /dev/null 2>&1
      echo | /u01/app/oracle/product/12.1.0/xe/root.sh > /dev/null 2>&1 || true
      
      if [ -z "$CHARACTER_SET" ]; then
      	if [ "${USE_UTF8_IF_CHARSET_EMPTY}" == "true" ]; then
      		export CHARACTER_SET="AL32UTF8"
      	fi
      fi
      
      if [ -n "$CHARACTER_SET" ]; then
      	export CHARSET_MOD="NLS_LANG=.$CHARACTER_SET"
      	export CHARSET_INIT="-characterSet $CHARACTER_SET"
      fi
      
      
      impdp () {
      	set +e
      	DUMP_FILE=$(basename "$1")
      	DUMP_NAME=${DUMP_FILE%.dmp} 
      	cat > /tmp/impdp.sql << EOL
      -- Impdp User
      CREATE USER IMPDP IDENTIFIED BY IMPDP;
      ALTER USER IMPDP ACCOUNT UNLOCK;
      GRANT dba TO IMPDP WITH ADMIN OPTION;
      -- New Scheme User
      create or replace directory IMPDP as '/docker-entrypoint-initdb.d';
      create tablespace $DUMP_NAME datafile '/u01/app/oracle/oradata/$DUMP_NAME.dbf' size 1000M autoextend on next 100M maxsize unlimited;
      create user $DUMP_NAME identified by $DUMP_NAME default tablespace $DUMP_NAME;
      alter user $DUMP_NAME quota unlimited on $DUMP_NAME;
      alter user $DUMP_NAME default role all;
      grant connect, resource to $DUMP_NAME;
      exit;
      EOL
      
      	su oracle -c "$CHARSET_MOD $ORACLE_HOME/bin/sqlplus -S / as sysdba @/tmp/impdp.sql"
      	su oracle -c "$CHARSET_MOD $ORACLE_HOME/bin/impdp IMPDP/IMPDP directory=IMPDP dumpfile=$DUMP_FILE $IMPDP_OPTIONS"
      	#Disable IMPDP user
      	echo -e 'ALTER USER IMPDP ACCOUNT LOCK;\nexit;' | su oracle -c "$CHARSET_MOD $ORACLE_HOME/bin/sqlplus -S / as sysdba"
      	set -e
      }
      
      case "$1" in
      	'')
      		#Check for mounted database files
      		if [ "$(ls -A /u01/app/oracle/oradata 2>/dev/null)" ]; then
      			echo "found files in /u01/app/oracle/oradata Using them instead of initial database"
      			echo "XE:$ORACLE_HOME:N" >> /etc/oratab
      			chown oracle:dba /etc/oratab
      			chmod 664 /etc/oratab
      			rm -rf /u01/app/oracle-product/12.1.0/xe/dbs
      			ln -s /u01/app/oracle/dbs /u01/app/oracle-product/12.1.0/xe/dbs
      			#Startup Database
      			su oracle -c "/u01/app/oracle/product/12.1.0/xe/bin/tnslsnr &"
      			su oracle -c 'echo startup\; | $ORACLE_HOME/bin/sqlplus -S / as sysdba'
      		else
      			echo "Database not initialized. Initializing database."
      			export IMPORT_FROM_VOLUME=true
      
      
      			#printf "Setting up:\nprocesses=$processes\nsessions=$sessions\ntransactions=$transactions\n"
      			set +e
      			mv /u01/app/oracle-product/12.1.0/xe/dbs /u01/app/oracle/dbs
      			set -e
      
      			ln -s /u01/app/oracle/dbs /u01/app/oracle-product/12.1.0/xe/dbs
      
      			echo "Starting tnslsnr"
      			su oracle -c "/u01/app/oracle/product/12.1.0/xe/bin/tnslsnr &"
      			#create DB for SID: xe
      			su oracle -c "$ORACLE_HOME/bin/dbca -silent -createDatabase -templateName General_Purpose.dbc -gdbname xe -sid xe -responseFile NO_VALUE $CHARSET_INIT -totalMemory $DBCA_TOTAL_MEMORY -emConfiguration LOCAL -pdbAdminPassword oracle -sysPassword oracle -systemPassword oracle"
      			
      			echo "Configuring Apex console"
      			cd $ORACLE_HOME/apex
      			su oracle -c 'echo -e "0Racle$\n8080" | $ORACLE_HOME/bin/sqlplus -S / as sysdba @apxconf > /dev/null'
      			su oracle -c 'echo -e "${ORACLE_HOME}\n\n" | $ORACLE_HOME/bin/sqlplus -S / as sysdba @apex_epg_config_core.sql > /dev/null'
      			su oracle -c 'echo -e "ALTER USER ANONYMOUS ACCOUNT UNLOCK;" | $ORACLE_HOME/bin/sqlplus -S / as sysdba > /dev/null'
      			echo "Database initialized. Please visit http://#containeer:8080/em http://#containeer:8080/apex for extra configuration if needed"
      		fi
      
      		if [ $WEB_CONSOLE == "true" ]; then
      			echo 'Starting web management console'
      			su oracle -c 'echo EXEC DBMS_XDB.sethttpport\(8080\)\; | $ORACLE_HOME/bin/sqlplus -S / as sysdba'
      		else
      			echo 'Disabling web management console'
      			su oracle -c 'echo EXEC DBMS_XDB.sethttpport\(0\)\; | $ORACLE_HOME/bin/sqlplus -S / as sysdba'
      		fi
      
      		if [ $IMPORT_FROM_VOLUME ]; then
      			echo "Starting import from '/docker-entrypoint-initdb.d':"
      
      			for f in $(ls /docker-entrypoint-initdb.d/*); do
      				echo "found file $f"
      				case "$f" in
      					*.sh)     echo "[IMPORT] $0: running $f"; . "$f" ;;
      					*.sql)    echo "[IMPORT] $0: running $f"; echo "exit" | su oracle -c "$CHARSET_MOD $ORACLE_HOME/bin/sqlplus -S / as sysdba @$f"; echo ;;
      					*.dmp)    echo "[IMPORT] $0: running $f"; impdp $f ;;
      					*)        echo "[IMPORT] $0: ignoring $f" ;;
      				esac
      				echo
      			done
      
      			echo "Import finished"
      			echo
      		else
      			echo "[IMPORT] Not a first start, SKIPPING Import from Volume '/docker-entrypoint-initdb.d'"
      			echo "[IMPORT] If you want to enable import at any state - add 'IMPORT_FROM_VOLUME=true' variable"
      			echo
      		fi
      
      		echo "Database ready to use. Enjoy! ;)"
      
      		##
      		## Workaround for graceful shutdown.
      		##
      		while [ "$END" == '' ]; do
      			sleep 1
      			trap "su oracle -c 'echo shutdown immediate\; | $ORACLE_HOME/bin/sqlplus -S / as sysdba'" INT TERM
      		done
      		;;
      
      	*)
      		echo "Database is not configured. Please run '/entrypoint.sh' if needed."
      		exec "$@"
      		;;
      esac
      
    • 由于不同环境的服务器docker-compose.yml中的DBCA_TOTAL_MEMORY的值不同,sga_target的值的大小为DBCA_TOTAL_MEMORY的75%,这样设置的话,日志中提示需要1160M的时候只需要计算这DBCA_TOTAL_MEMORY的值即可,1160/0.75=1546.666666667m,但是我们的yml文件中写了1024,显然是不够的,所以这里把docker-compose.yml中的内容改为

          environment:
            - DBCA_TOTAL_MEMORY=2048
      

    总结

    ​ 其实本人在写这篇帖子的之前,是因为本地测试环境的服务器需要重装系统,但是在备份原数据的时候,可能是因为服务器硬盘的问题,导致没有完成备份,但是当时也没有发现。直到系统重装结束之后,在解压原文件的时候出错,才意识到已经无法挽回,所幸只是本地的测试环境,最后只能重头再来。

    ​ 但是数据库文件在自己的电脑上备份过一份比较早的数据,只是在表结构,数据量上,都与当时丢失的数据库有些差别,但不影响使用,所以开始了数据恢复的踩坑之路。后来发现只要数据文件(也就是/u01/app/oracle/oradata/xe/中的****.data, ***.tmp文件)及时备份,那么数据恢复也就很简单了。相关的数据恢复在百度中搜索oracle数据库文件恢复,有很多,这里就不再多说了。

    ​ 这篇帖子的初衷是为了本人不再掉入相同的坑所做的记录,也是在无数次踩坑之后痛下决心做的记录,希望未来的学习中能够坚持。

    参照来源

    感谢

    后台达人 soslinken 和Linux达人 Builder_ming

    展开全文
  • docker搭建oracle11g服务

    千次阅读 2020-02-27 23:48:51
    1. oracle下载 版本:11.2.0.1,这个版本可以免费下载,11.2.0.4需要付费帐号才行 下载需要登陆Oracle账号,会有授权参数共2个zip包,下载速度很慢,推荐迅雷下载,但是我这里迅雷下第一个zip包很快,第二个非常慢,...

    事前准备

    篇幅受限制,关于持久化数据的方法请参见我的另一边文章docker搭建oracle服务持久化数据

    1. oracle下载

    版本:11.2.0.1,这个版本可以免费下载,11.2.0.4需要付费帐号才行
    下载需要登陆Oracle账号,会有授权参数共2个zip包,下载速度很慢,推荐迅雷下载,但是我这里迅雷下第一个zip包很快,第二个非常慢,尝试了腾讯云下载,竟然比迅雷还慢,最后用的阿里云服务器,我这里很快,如果还有免费试用资格的可以试下.
    下载地址:

    https://www.oracle.com/database/technologies/oracle-database-software-downloads.html#11g
    

    在这里插入图片描述

    2. 从Jaspeen大神的github,下载/准备相关内容

    在这里插入图片描述

    1)Dockerfile

    https://github.com/jaspeen/oracle-11g/blob/master/Dockerfile
    
    # 基于cnetos:7制作镜像,可以根据自己的需求来选择不同的镜像我这里用的centos:centos7
    FROM centos:7
    
    # 作者名:
    MAINTAINER shuu
    
    # ADD在Dockerfile进行build时,会将assets目录,复制到容器根目录.
    ADD assets /assets
    
    # 修改目录权限
    RUN chmod -R 755 /assets
    # 执行setup.sh脚本,进行安装前的准备工作
    RUN /assets/setup.sh
    
    # 暴露1521和8080端口
    EXPOSE 1521
    EXPOSE 8080
    
    # 当容器被启动时,会执行entrypoint.sh脚本,进行oracle的安装
    CMD ["/assets/entrypoint.sh"]
    

    2)assets目录

    此目录中包含了很多脚本,及oracle安装时需要用到的配置文件.

    https://github.com/jaspeen/oracle-11g
    

    在这里插入图片描述
    在这里插入图片描述

    3)将上述的文件放到同一个目录中

    在这里插入图片描述

    3. assets文件分析

    jaspeen是基于oracle11.2.0.4进行的配置,所以如果你下载的压缩包也是相同版本,并且对配置相关信息没有兴趣研究,可以选择略过。

    1)colorecho

    #!/usr/bin/env bash
    
    ccred='\033[0;31m'
    ccyellow='\033[0;33m'
    ccgreen='\033[32m'
    ccend='\033[0m'
    
    echo_red() {
        echo -e "${ccred}$@${ccend}"
    }
    
    echo_yellow() {
        echo -e "${ccyellow}$@${ccend}"
    }
    
    echo_green() {
        echo -e "${ccgreen}$@${ccend}"
    }
    

    在这里插入图片描述
    定义了三个函数,分别用来将echo输出的字体显示为红,黄,绿色

    2)setup.sh

    # 如果脚本文件中的命令执行后结果状态码不是0,则立即退出脚本.
    set -e
    
    # 引入 1)解释过的文件,为了能够使用自定义的带颜色的echo
    source /assets/colorecho
    # trap的作用:
    # 当捕捉到GIGTERM/SIGINT信号时,分别执行对应的命令.
    trap "echo_red '******* ERROR: Something went wrong.'; exit 1" SIGTERM
    trap "echo_red '******* Caught SIGINT signal. Stopping...'; exit 2" SIGINT
    
    #Install prerequisites directly without virtual package
    deps () {
    	echo "Installing dependencies"
    	yum -y install binutils compat-libstdc++-33 compat-libstdc++-33.i686 ksh elfutils-libelf \
    	elfutils-libelf-devel glibc glibc-common glibc-devel gcc gcc-c++ libaio libaio.i686 \
    	libaio-devel libaio-devel.i686 libgcc libstdc++ libstdc++.i686 libstdc++-devel \
    	libstdc++-devel.i686 make sysstat unixODBC unixODBC-devel
    	yum clean all
    	rm -rf /var/lib/{cache,log} /var/log/lastlog
    }
    
    users () {
    	echo "Configuring users"
    	# 创建oinstall及dba组,组ID分别为200和201
    	groupadd -g 200 oinstall
    	groupadd -g 201 dba
    	# 创建oracle用户并指定其:
    	# 用户id为 400
    	# 初始组为 oinstall
    	# 附加组为 dba
    	# 家目录为 /opt/oracle
    	useradd -u 440 -g oinstall -G dba -d /opt/oracle oracle
    	# 为oracle及root用户赋予密码,均为install,这里可以自行修改
    	echo "oracle:install" | chpasswd
    	echo "root:install" | chpasswd
    	# 将 /etc/pam.d/login文件中的内容:pam_namespace.so 替换为:下面2行信息(具体看一眼就明白了)
    	# pam_namespace.so
    	# session    required     pam_limits.so
    	# pam_limits.so模块的主要功能是限制用户会话过程中对各种系统资源的使用情况。
    	# 缺省情况下该模块的配置文件是/etc/security/limits.conf
    	sed -i "s/pam_namespace.so/pam_namespace.so\nsession    required     pam_limits.so/g" \
    	/etc/pam.d/login
    	# 创建下列目录,并设置mode为755
    	mkdir -p -m 755 /opt/oracle/app
    	mkdir -p -m 755 /opt/oracle/oraInventory
    	mkdir -p -m 755 /opt/oracle/dpdump
    	# 将oracle用户的家目录及上面创建的三组目录owner和group进行变更
    	chown -R oracle:oinstall /opt/oracle
    	# 将/assets/profile中配置的环境变量信息追加到oracle用户家目录下的
    	# .bash_profile及.bashrc文件中.
    	cat /assets/profile >> ~oracle/.bash_profile
    	cat /assets/profile >> ~oracle/.bashrc
    }
    
    sysctl_and_limits () {
    	# 使用/assets/sysctl.conf文件覆盖 /etc/sysctl.conf
    	cp /assets/sysctl.conf /etc/sysctl.conf
    	# 将/assets/limits.conf中的内容追加至 /etc/security/limits.conf文件
    	cat /assets/limits.conf >> /etc/security/limits.conf
    }
    # 方法调用
    deps
    users
    sysctl_and_limits
    

    3)profile

    环境变量,有oracle的安装目录,sid,数据库文件,配置PATH信息lib目录等等信息

    export ORACLE_BASE=/opt/oracle/app
    export ORACLE_SID=orcl
    export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
    export ORACLE_INVENTORY=/opt/oracle/oraInventory
    export PATH=$PATH:$ORACLE_BASE/bin
    export PATH=/usr/sbin:$PATH
    export PATH=$ORACLE_HOME/bin:$PATH
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
    export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
    export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
    export ORACLE_HOME_LISTNER=$ORACLE_HOME
    

    4)sysctl.conf

    # 用于定义网络连接可用本地端口的最小和最大端口的限制,默认情况下为32768   60999,
    # 默认的28232个随机端口,看起来很多,但在繁忙的流量服务器的时候可能很容易达到这个限制
    # 我个人学习用,顶多2,3个人一起用,所以涉及不到那么大多端口,所以我这里用的默认.
    net.ipv4.ip_local_port_range = 9000 65500
    # 该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量。
    fs.file-max = 6815744
    # 该参数控制可以使用的共享内存的总页数。 
    # Linux 共享内存页大小为 4KB, 共享内存段的大小都是共享内存页大小的整数倍。
    # 一个共享内存段的最大大小是 16G ,那么需要共享内存页数是 16GB/4KB==4194304 (页),
    # 当内存为 12G 时, kernel.shmall = 3145728
    # 当内存为 16G 时, kernel.shmall = 4194304
    # 当内次为 32G 时, kernel.shmall = 8388608
    # 当内存为 64G 时, kernel.shmall = 16777216
    # 当内存为 128G 时, kernel.shmall = 33554432
    # 。。。。我用的腾讯云,1核2G内存的,自己加了4G的swap,所以我这里按照1G设置好了...
    # 1G ===>  1 * 1024 * 1024 / 4 = 262144
    kernel.shmall = 10523004
    # 同上一个相反,这个是最大共享内存,我这里没有那么大内存,按照官方建议,设置为:
    # 物理内存 - 1byte,我这里是2G,即为2 * 1024 * 1024 * 1024 -1 = 2147483647‬
    kernel.shmmax = 6465333657
    # 该参数是共享内存段的最大数量。shmmni缺省值4096,一般肯定是够用了
    kernel.shmmni = 4096
    # kernel.sem:对应4个值 :
    # SEMMSL、SEMMNS、SEMOPM、SEMMNI 具体由于个人也不是很了解,所以为避免误导
    # 有想要详细了解的同学,请自行查看Oracle官方文档.
    kernel.sem = 250 32000 100 128
    # 接收socket缓冲区大小的默认值(单位:byte)
    net.core.rmem_default=262144
    # 发送socket缓冲区大小的默认值(单位:byte)。
    net.core.wmem_default=262144
    # 接收socket缓冲区大小的最大值(单位:byte)
    # 我这里内存受限 将设置为 2G * 1024 * 1024 = 2097152
    net.core.rmem_max=4194304
    # 发送socket缓冲区大小的最大值单位:byte)。
    # 我这里内存受限 将设置为 2G * 1024 * 1024 = 2097152
    net.core.wmem_max=1048576
    # 此参数限制并发未完成的异步请求数目,避免I/O子系统故障
    fs.aio-max-nr = 1048576
    

    5)limits.conf

    # oracle 用户可以打开的最大进程数,超过后悔警告
    oracle   soft   nproc   2047
    # oracle 用户不能拥有超过16384个进程,并且会在拥有2047个进程时发出警告
    oracle   hard   nproc   16384
    # oracle 用户可以打开的最大的文件描述符数量,默认1024,这里的数值会限制tcp连接
    oracle   soft   nofile   1024
    # oracle 用户不能打开的超过65536个文件描述符,当超过1024时会发出警告
    oracle   hard   nofile   65536
    

    6)entrypoint.sh

    #!/usr/bin/env bash
    
    set -e
    source /assets/colorecho
    # 如果oracle目录不存在则代表并未安装,进行安装
    if [ ! -d "/opt/oracle/app/product/11.2.0/dbhome_1" ]; then
            echo_yellow "Database is not installed. Installing..."
            /assets/install.sh
    fi
    # 切换至oracle用户,并执行entrypoint_oracle.sh脚本
    su oracle -c "/assets/entrypoint_oracle.sh"
    

    7)install.sh

    #!/usr/bin/env bash
    set -e
    source /assets/colorecho
    
    trap "echo_red '******* ERROR: Something went wrong.'; exit 1" SIGTERM
    trap "echo_red '******* Caught SIGINT signal. Stopping...'; exit 2" SIGINT
    
    # 这里要求事先将oracle11g的安装包 解压至 与docker容器内的 /install 目录使用 -v 参数
    # 进行映射 的 外部目录之中.
    if [ ! -d "/install/database" ]; then
            echo_red "Installation files not found. Unzip installation files into mounted(/install) folder"
            exit 1
    fi
    
    echo_yellow "Installing Oracle Database 11g"
    
    # 切换至oracle用户,执行 /install/database/runInstaller进行oracle的安装
    # -silent:
    #  		对于无提示模式下的操作, 输入内容可以是一个响应文件(-responseFile), 也可以是命令行变量值对的列表。
    # -ignorePrereq:
    #		忽略运行先决条件检查
    # -waitforcompletion:
    #		安装程序将等待完成, 而不是衍生 Java 引擎并退出。
    # -responseFile:
    #		指定要使用的响应文件和路径。
    su oracle -c "/install/database/runInstaller -silent -ignorePrereq -waitforcompletion -responseFile /assets/db_install.rsp"
    # 设置产品目录位置与拥有该目录的操作系统组,并产生/etc/oraInst.loc
    # 详见 http://blog.itpub.net/29496899/viewspace-1461562/ 同时感谢文章作者
    /opt/oracle/oraInventory/orainstRoot.sh
    # 用来设置必要的操作系统权限,并将orahome,oraenv,coraenv复制到/usr/local/bin目录下。
    # 生成/etc/oratab,其中存放一些数据库相关信息。
    /opt/oracle/app/product/11.2.0/dbhome_1/root.sh
    

    8)db_install.rsp

    oracle安装时需要的配置文件,由于是slient模式,所以平时我们在图形界面进行交互性的选择内容,这里都交由此文件,这里如果不是11.2.0.4版本的话,必须要将安装包内的db_install.rsp自行对照修改相应位置.
    文件太长,这里就不贴出来了,至于11.2.0.1和11.2.0.4该文件的差异,可到自行对比下,或者可以直接去jaspeen的github查看.

    https://github.com/jaspeen/oracle-11g/commit/4199e8a77d3d71d93e5667704097ecacba683b19
    

    但是,其中变化最多的篇幅主要还是注释,所以,这里我们主要关注那些需要的改动:

    8-1) oracle安装语言

    请根据实际情况来指定,这里我安装的是日文版

    #-------------------------------------------------------------------------------
    # Specify the languages in which the components will be installed.             
    #
    # en   : English                  ja   : Japanese                  
    # fr   : French                   ko   : Korean                    
    # ar   : Arabic                   es   : Latin American Spanish    
    # bn   : Bengali                  lv   : Latvian                   
    # pt_BR: Brazilian Portuguese     lt   : Lithuanian                
    # bg   : Bulgarian                ms   : Malay                     
    # fr_CA: Canadian French          es_MX: Mexican Spanish           
    # ca   : Catalan                  no   : Norwegian                 
    # hr   : Croatian                 pl   : Polish                    
    # cs   : Czech                    pt   : Portuguese                
    # da   : Danish                   ro   : Romanian                  
    # nl   : Dutch                    ru   : Russian                   
    # ar_EG: Egyptian                 zh_CN: Simplified Chinese        
    # en_GB: English (Great Britain)  sk   : Slovak                    
    # et   : Estonian                 sl   : Slovenian                 
    # fi   : Finnish                  es_ES: Spanish                   
    # de   : German                   sv   : Swedish                   
    # el   : Greek                    th   : Thai                      
    # iw   : Hebrew                   zh_TW: Traditional Chinese       
    # hu   : Hungarian                tr   : Turkish                   
    # is   : Icelandic                uk   : Ukrainian                 
    # in   : Indonesian               vi   : Vietnamese                
    # it   : Italian                                                   
    #
    # Example : SELECTED_LANGUAGES=en,fr,ja
    #------------------------------------------------------------------------------
    SELECTED_LANGUAGES=en,ja
    

    8-2)安装选项

    只安装数据库软件

    #------------------------------------------------------------------------------
    # Specify the installation option.
    # It can be one of the following:
    # 1. INSTALL_DB_SWONLY
    # 2. INSTALL_DB_AND_CONFIG
    # 3. UPGRADE_DB
    #-------------------------------------------------------------------------------
    oracle.install.option=INSTALL_DB_SWONLY
    

    8-3)各种环境变量

    ORACLE_HOSTNAME=database
    UNIX_GROUP_NAME=oinstall
    INVENTORY_LOCATION=/opt/oracle/oraInventory
    ORACLE_HOME=/opt/oracle/app/product/11.2.0/dbhome_1
    ORACLE_BASE=/opt/oracle/app
    oracle.install.db.InstallEdition=EE
    oracle.install.db.DBA_GROUP=dba
    oracle.install.db.OPER_GROUP=dba
    DECLINE_SECURITY_UPDATES=true
    

    9)entrypoint_oracle.sh

    #!/usr/bin/env bash
    
    set -e
    source /assets/colorecho
    source ~/.bashrc
    
    alert_log="$ORACLE_BASE/diag/rdbms/orcl/$ORACLE_SID/trace/alert_$ORACLE_SID.log"
    listener_log="$ORACLE_BASE/diag/tnslsnr/$HOSTNAME/listener/trace/listener.log"
    pfile=$ORACLE_HOME/dbs/init$ORACLE_SID.ora
    
    # monitor $logfile
    monitor() {
    	# 对文件进行追踪,即使被删除,待同名文件出现时,会继续尝试追踪,0表示不显示当前文件的内容
    	# 只有当文件被追加入内容时,才会显示追加的内容
        tail -F -n 0 $1 | while read line; do echo -e "$2: $line"; done
    }
    
    
    trap_db() {
    	trap "echo_red 'Caught SIGTERM signal, shutting down...'; stop" SIGTERM;
    	trap "echo_red 'Caught SIGINT signal, shutting down...'; stop" SIGINT;
    }
    
    start_db() {
    	echo_yellow "Starting listener..."
    	monitor $listener_log listener &
    	# 启动监听,并将监听过程信息输出到日志文件.
    	lsnrctl start | while read line; do echo -e "lsnrctl: $line"; done
    	# $! 最后一条后台运行的进程ID
    	MON_LSNR_PID=$!
    	echo_yellow "Starting database..."
    	trap_db
    	monitor $alert_log alertlog &
    	MON_ALERT_PID=$!
    	# 无密码登录后,通过pfile方式启动,这里不是很了解,感兴趣的可以自行查阅资料
    	sqlplus / as sysdba <<-EOF |
    		pro Starting with pfile='$pfile' ...
    		startup;
    		alter system register;
    		exit 0
    	EOF
    	while read line; do echo -e "sqlplus: $line"; done
    	wait $MON_ALERT_PID
    }
    
    create_db() {
    	echo_yellow "Database does not exist. Creating database..."
    	date "+%F %T"
    	monitor $alert_log alertlog &
    	MON_ALERT_PID=$!
    	monitor $listener_log listener &
    	#lsnrctl start | while read line; do echo -e "lsnrctl: $line"; done
    	#MON_LSNR_PID=$!
            echo "START DBCA"
        # Database Configuration Assistant顾名思义,数据库配置助手
        # 还是非交互模式,需要交互的选项直接走responseFile,所以需要认真配置dbca.rsp
    	dbca -silent -createDatabase -responseFile /assets/dbca.rsp
    	echo_green "Database created."
    	date "+%F %T"
    	# 创建data_pump_dir目录,此为impdp,expdp命令时需要的目录
    	change_dpdump_dir
            touch $pfile
    	trap_db
            kill $MON_ALERT_PID
    	#wait $MON_ALERT_PID
    }
    
    # 关闭数据库服务及监听
    stop() {
        trap '' SIGINT SIGTERM
    	shu_immediate
    	echo_yellow "Shutting down listener..."
    	lsnrctl stop | while read line; do echo -e "lsnrctl: $line"; done
    	kill $MON_ALERT_PID $MON_LSNR_PID
    	exit 0
    }
    # 具体的关闭数据库服务的方法
    shu_immediate() {
    	ps -ef | grep ora_pmon | grep -v grep > /dev/null && \
    	echo_yellow "Shutting down the database..." && \
    	sqlplus / as sysdba <<-EOF |
    		set echo on
    		shutdown immediate;
    		exit 0
    	EOF
    	while read line; do echo -e "sqlplus: $line"; done
    }
    
    change_dpdump_dir () {
    	echo_green "Changind dpdump dir to /opt/oracle/dpdump"
    	sqlplus / as sysdba <<-EOF |
    		create or replace directory data_pump_dir as '/opt/oracle/dpdump';
    		commit;
    		exit 0
    	EOF
    	while read line; do echo -e "sqlplus: $line"; done
    }
    
    chmod 777 /opt/oracle/dpdump
    
    echo "Checking shared memory..."
    # 查看共享内存是否挂载
    df -h | grep "Mounted on" && df -h | egrep --color "^.*/dev/shm" || echo "Shared memory is not mounted."
    if [ ! -f $pfile ]; then
      create_db;
    fi 
    start_db
    

    10)dbca.rsp

    在此文件中很多内容感觉不太能理解,比如很多地方竟然会有11c和12c的关键字,在结尾甚至还有很多配置是关于:
    CDB(Container DataBase)容器级数据库
    PDB(Pluggable DataBase)可插拔数据库

    这里不是特别理解,因为这2个特质是oracle12c开始才有的,由于我还比较菜,尚不能完全理解,所以这些内容请允许我保留个人意见,我并没有添加,毕竟我用的不是oracle12c.
    对于11g和12c的对于可以参照下面这篇文章,在此也要感谢作者.

    # Oracle11g和12c的比较
    https://blog.csdn.net/DBDeep/article/details/81737282
    

    这里仅给出个人觉得需要修改的,即:在11.2.0.1安装包的dbca.rsp文件基础上要进行的改动

    GDBNAME = "orcl"
    SID = "orcl"
    # SYS密码可以自行设定
    SYSPASSWORD = "oracle"
    # 同上
    SYSTEMPASSWORD = "oracle"
    DATAFILEDESTINATION=/opt/oracle/app/oradata
    RECOVERYAREADESTINATION=/opt/oracle/app/oradata
    STORAGETYPE=FS
    CHARACTERSET="AL32UTF8"
    AUTOMATICMEMORYMANAGEMENT="False"
    

    11)run_installer.sh

    个人分析,作者本意应该是想要在install.sh文件中调用此脚本的,但目前来看是把下面的脚本命令写在了install.sh中,所以此文件未被使用,可以自行选择是改调用处,或者是干脆不用此文件.

    #!/usr/bin/env bash
    
    /install/database/runInstaller -silent -ignorePrereq -waitforcompletion -responseFile /assets/db_install.rsp
    

    4. 修改对应的文件

    经过上面的分析,我们对各个文件都有了了解,所以现在要做的是按照自己的实际情况来进行相应的修改.
    还是要建议大家,使用前务必仔细阅读所有文件内容,以便有个初步的了解和认识之后,做出自己的合理配置,切勿拿来主义,以免出现问题毫无头绪

    这里建议需要修改的文件有:
    1) sysctl.conf
    2) db_install.rsp
    3) dbca.rsp
    4) 可选install.sh

    su oracle -c "/install/database/runInstaller -silent -ignorePrereq -waitforcompletion -responseFile /assets/db_install.rsp"
    

    改为

    su oracle -c "/assets/run_installer.sh"
    

    5. build镜像

    1) 创建一个目录,将:

    #1 Dockerfile
    #2 assets目录
    放入此目录中.
    在这里插入图片描述

    2)build镜像

    切换到Dockerfile所在目录,进行编译
    在这里插入图片描述

    sudo docker build -t shuu/oracle11g:preinstall .
    

    安装完成后会得到如何的镜像,REPOSITORYTAG的命名可以自行选择
    在这里插入图片描述

    6. 基于上边的镜像启动docker容器,自动化安装oracle11g

    1)创建一个目录,用来存放解压缩后的oracle11g安装文件

    # /home/shuu/install
    mkdir install
    

    解压缩

    unzip -n linux.x64_11gR2_database_1of2.zip -d ~/install/
    unzip -n linux.x64_11gR2_database_2of2.zip -d ~/install/
    

    在这里插入图片描述

    2)启动docker容器,实现oracle安装

    sudo docker run --name oracle11g --privileged -p 1521:1521 -v /home/shuu/install:/install \
    shuu/oracle11g:preinstall
    

    安装数据库会很慢,耐心等到最后发现有黄色的Starting database...等信息,并且下面有启动Oracle实例就表示成功了,但是这是开启了oracle服务,所以如果想直接访问可以使用-it选项,或者使用-d让它在后台运行
    在这里插入图片描述
    这里演示是用另一个终端窗口进行的.

    sudo docker exec -it oracle11g /bin/bash
    

    在这里插入图片描述
    可以试着执行sql,如下所示,说明安装成功!
    在这里插入图片描述

    7. 基于当前容器,制作新的镜像

    谁也不会每次启动容器前先花费个3,40分钟来重新安装一次Oracle服务吧…

    1) sync

    一定要记得多sync几次,之前搭集群时碰到过2次不sync的话文件未被落盘保存.

    sync
    sync
    sync
    ......
    

    2)制作新的镜像

    sudo docker commit -m "oracle11g" oracle11g shuu/oracle11g
    

    制作过程也需要耐心等待,成功后查看一下,6.05GB,好大!
    在这里插入图片描述

    展开全文
  • 之前docker 部署的 oracle 镜像,突然从 dockerhub 下架了。所以没办法,只能自己打包一个oracle 数据库的镜像。 找来找去,其实oracle 自身就提供了oracle 的产品 docker 构建脚本。所以直接按照oracle 官方的...

    前言

    之前docker 部署的 oracle 镜像,突然从 dockerhub 下架了。所以没办法,只能自己打包一个oracle 数据库的镜像。
    找来找去,其实oracle 自身就提供了oracle 的产品 docker 构建脚本。所以直接按照oracle 官方的docker 构建仓库的说明打包。

    oracle 官方 docker image

    官方提供了一个开源仓库,里面有所有的oracle产品的docker image构建的脚本。

    地址:https://github.com/oracle/docker-images

    将上述的仓库clone 到本地。
    docker images clone下来的目录结构
    在这里插入图片描述
    我们需要打包的oracle 数据库,在 OracleDatabase 这个目录中。
    进入到OracleDatabase 可以看到两个文件夹,其实比较关键。
    一个RAC,一个SingleInstance。
    看名字就可以很明白,如果做集群镜像,就打包RAC的 ,如果要是做单节点的就打包SingleInstance的。
    我们这边仅需要一个单节点数据库,所以就打包SingleInstance。

    支持的oracle database 版本

    版本号
    11.2.0.2
    12.1.0.2
    12.2.0.1
    18.3.0
    18.4.0
    19.3.0

    我们以12.2.0.1版本作为例子

    docker-images这个仓库只有build的脚本,并不携带任何oracle database 的安装包。所以我们还得去下载oracle database 对应版本的安装包。

    准备oracle 12.2.0.1 的安装包

    全版本的下载地址 https://www.oracle.com/cn/database/technologies/enterprise-edition/documentation/database.html

    我们需要的12.2.0.1 版本 https://www.oracle.com/database/technologies/oracle12c-linux-12201-downloads.html

    下载12.2.0.1 版本的linux 版本安装包。下载好后,将压缩包文件放到

    docker-images/OracleDatabase/SingleInstance/dockerfiles/12.2.0.1
    

    目录下即可。

    构建

    cd docker-images/OracleDatabase/SingleInstance/dockerfiles
    

    执行该目录下的 buildDockerImage.sh

    Usage: buildDockerImage.sh -v [version] [-e | -s | -x] [-i] [-o] [Docker build o             ption]
    Builds a Docker Image for Oracle Database.
    
    Parameters:
       -v: version to build
           Choose one of: 11.2.0.2  12.1.0.2  12.2.0.1  18.3.0  18.4.0  19.3.0
       -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
       -o: passes on Docker build option
    
    * select one edition only: -e, -s, or -x
    
    LICENSE UPL 1.0
    
    Copyright (c) 2014-2019 Oracle and/or its affiliates. All rights reserved.
    
    

    该脚本的帮助文档 还是比较全面的 ,所以按照提示执行编译即可。
    我这边的build 参数

    ./buildDockerImage.sh -v 12.2.0.1 -e
    

    打包成功后,会在docker images 下生成 oracle/database:12.2.0.1-ee 这个镜像。

    运行容器

    docker run --name <container name> \
    --shm-size=1g \
    -p 1521:1521 -p 8080:8080 \
    -e ORACLE_PWD=<your database passwords> \
    -v [<host mount point>:]/u01/app/oracle/oradata \
    -d \
    oracle/database:12.2.0.1-ee
    

    可以设置的参数如下

    Parameters:
       --name:        The name of the container (default: auto generated)
       --shm-size:    Amount of Linux shared memory
       -p:            The port mapping of the host port to the container port.
                      Two ports are exposed: 1521 (Oracle Listener), 8080 (APEX)
       -e ORACLE_PWD: The Oracle Database SYS, SYSTEM and PDB_ADMIN password (default: auto generated)
    
       -v /u01/app/oracle/oradata
                      The data volume to use for the database.
                      Has to be writable by the Unix "oracle" (uid: 1000) user inside the container!
                      If omitted the database will not be persisted over container recreation.
       -v /u01/app/oracle/scripts/startup | /docker-entrypoint-initdb.d/startup
                      Optional: A volume with custom scripts to be run after database startup.
                      For further details see the "Running scripts after setup and on startup" section below.
       -v /u01/app/oracle/scripts/setup | /docker-entrypoint-initdb.d/setup
                      Optional: A volume with custom scripts to be run after database setup.
                      For further details see the "Running scripts after setup and on startup" section below.
    

    大概看一下就明白了,其他的也没啥特别的参数。
    这个容器启动成功后,实例名为ORCLPDB1 的数据库就可以测试连接一下。
    连接参数如下
    在这里插入图片描述
    即可连接成功,剩下的如何使用,自由发挥咯……

    展开全文
  • Docker提供了轻量级的虚拟化,它几乎没有任何额外开销。 提供了一个从开发到上线均一致的环境。 开发效率:一是我们想让开发环境尽量贴近生产环境 二是我们想快速搭建开发环境 基于docker研发小组 qq群:...
  • Docker中的Oracle数据库

    万次阅读 2017-09-21 11:38:07
    想研究一下Oracle数据库,发现安装Oracle太麻烦了,所以想省事儿,使用docker中的Oracle作为联系。 使用 sudo docker search Oracle 命令搜索Oracle数据库镜像文件,这里发现已经有人发布了相关镜像,链接:...
  • 基于docker搭建oracle服务器

    千次阅读 2018-09-16 11:30:46
    docker pull wnameless/oracle-xe-11g 这个比较耗时,中间可能会中断,继续拉取即可 启动实例 注意将selinux关掉,不然实例启动失败 修改/etc/selinux/config文件,设置为disable # disabled - No SELinux ...
  • Docker三剑客:Compose、Machine和Swarm

    万次阅读 2018-12-15 12:03:19
    Docker三大编排工具: Docker Compose:是用来组装多容器应用的工具,可以在 Swarm集群中部署分布式应用。 Docker Machine:是支持多平台安装Docker的工具,使用 Docker Machine,可以很方便地在笔记本、云平台及...
  • 然后运行容器开放相应服务的端口访问代理服务访问主页查看session存储访问数据库 1,在docker运行容器中访问数据库:docker exec -it mymysql /bin/bash 数据库中表 testdata 中的数据是这样的:网页访问数据,...
  • Docker入门系列(四)准备工作 安装docker,版本最低1.13 准备 Docker Compose,Docker for Mac 以及 Docker for Windows 都已经预装了compose。linux系统需要自己安装,官方安装教程。 了解docker安装启动 了解构建...
  • 使用HUE来管理hadoop集群

    万次阅读 2016-05-06 15:11:50
    HUEHue是cdh专门的一套web管理器,它包括3个部分hue ui,hue server,hue db。hue提供所有的cdh组件的shell界面的接口。你可以在hue编写mr,查看修改hdfs的文件,管理hive的元数据,运行Sqoop,编写Oozie工作流等...
  • windows7 安装docker

    千次阅读 2016-08-03 18:23:54
    Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和...
  • docker官方文档翻译4

    万次阅读 2019-10-03 11:49:03
    转载请标明出处: ... 本文出自方志朋的博客 第四篇:Swarms ...安装Docker版本1.13或更高版本。 安装Docker compose。 安装docker machine 阅读第1 2 3部分的内容。 确保你已发布并推送到注册仓库的friendl...
  • 学习Hadoop集群环境搭建是Hadoop入门必经之路。搭建分布式集群通常有两个办法:要么找多台机器来部署(常常找不到机器)或者在本地开多个虚拟机(开销很大,对宿主机器性能要求高,光是安装多个虚拟机系统就得搞半天...
  • Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署,包括VMs(虚拟机)、bare metal、OpenStack 集群和...
  • Rancher 2.x 搭建及管理 Kubernetes 集群

    万次阅读 2019-03-16 16:32:03
    Rancher 用户可以选择使用 RKE 创建 K8s 集群,也可以使用 GKE,AKS 和 EKS 等云K8s 服务。Rancher 用户还可以导入和管理现有的 Kubernetes 集群。同时 Rancher UI 为 DevOps 工程师提供了一个直观的用户界面来管理...
  • 42.docker简介

    千次阅读 2016-06-29 20:14:42
    今年京东的618活动,京东启动了将近15万个Docker容器,这些Docker容器用于商品页,订单,搜索,缓存,数据库等服务。 为啥docker能在京东大放异彩? Docker自诞生以来就受到极大的关注,纵观国内的一线IT企业在双...
  • 在之前的工作中,我一直使用docker run命令,单独启动container,再加入overlay网络,以实现部署工作。这种方式看似直接,但是随着服务包含的container个数越来越多,docker命令也就越来越多,由此带来许多重复工作...
  • DockerTool在Windows上的配置和运行

    千次阅读 2016-01-31 14:16:36
    新开一年,迈入云计算的大门,所以选择从Docker开始,好歹也得有的集群环境吧 好了,我们开始,从官网下载Docker安装版,原谅我懒得配Linux系统,直接window上的: ...
  • Docker搭建Oracle数据库

    千次阅读 2019-04-29 11:46:40
    参考:...; 原文有些地方不是很详细,所以参考该文,并做补充 1,拉取镜像: docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g 镜像有点大,确保网络不要中断吧,我拉取的时候...
1 2 3 4 5 ... 20
收藏数 5,715
精华内容 2,286
关键字:

docker oracle集群