第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定

初次使用docker 并搭建oracle環(huán)境和xip環(huán)境

標(biāo)簽:
Docker

初次使用docker 并搭建oracle环境和xip环境

[TOC]

1. docker基本介绍

https://img1.sycdn.imooc.com//5d2db6880001a54507050292.jpg  fengmian.jpeg

表象上,基本和vmware虚拟机非常类似,但是由于公用系统资源,所以启动宣传上只需要50ms,因此可以一个应用一个容器。

docker 有三个部分:

  1. 仓库, 类似github,用来共享镜像。

  2. 镜像,类似iso系统镜像,是别人安装好的基本环境镜像,当时自己也可以创建。

  3. 容器,实际运行的实体,容器是从镜像开始运行的,运行过程中的操作,如果不另外保存为镜像,则销毁就全部丢失。

关于容器和镜像的进一步分析:

docker一直强调两点:

  1. docker 不是虚拟机

  2. 容器即服务

要充分理解这两点,其实主要在于理解容器即服务,docker类似于集装箱,每个服务启动的时候,都包含他所依赖的环境。

从我们常用的说法来说,可以说每启动一个服务,就启动了一个虚拟机。

比如我要启动ftp服务和ssh服务来修改某个文件夹的文件内容,传统虚拟机做法是启动一个虚拟机,然后启动ftp服务,然后启动ssh服务。但是docker的做法是,先启动一个虚拟机,然后配置这个虚拟机启动的时候,自动启动ftp服务。 再启动虚拟机2,配置这个虚拟机启动ssh服务。 然后两个虚拟机配置一个共享文件夹。

由于docker和虚拟机的技术不同,主要是用了大量的系统复用,因此启动效率特别高,按官方说法,docker一个容器的启动,只需要50ms.

理解了以上这几点,才可以对docker的使用有一个充分的理解,我开始在使用的过程中,也很有疑惑,尤其是启动xip环境容器的时候,总想先启动sshd,再启动vdmp.sh 再启动pmts.sh,并且由于docker容器在启动的时候,指定开放的端口(docker run -p 22:22),而在启动后,无法(可以用iptables,但是非常复杂,而且官方不推荐)追加映射端口,导致新系统的服务无法对外暴露。

正确的做法是,配置好基本的xip环境作为镜像,然后启动vdmp容器,启动脚本直接就是vdmp.sh。 再启动pmts容器,启动脚本为pmts.sh。 这两个服务都不需要sshd服务,也不需要bash命令行。如果想类似开发环境telnet或者ssh登录,则再启动一个sshd容器,用来编辑和编译环境。

2. docker下载和使用手册

官网下载地址: https://store.docker.com/editions/community/docker-ce-desktop-mac

使用手册(docker_practice): https://www.gitbook.com/book/yeasy/docker_practice/details

3. 基本环境创建和调整

本机电脑使用的是macOS系统,以下描述和截图都是在macOS上操作,不过基本都是命令行操作。windows和linux的安装过程,都参见上节的使用手册,有详细过程,基本上大同小异。

1. 下载镜像安装

下载docker.dmg,https://store.docker.com/editions/community/docker-ce-desktop-mac

然后正常安装dmg文件,安装完成后,右上角会有一个小海豚的图标。

https://img1.sycdn.imooc.com//5d2db68e0001edf506560134.jpg  docker_3.1.1.png

2. 使用国内镜像

参见使用手册中的描述,我本次使用的是daocloud的国内镜像加速。

  • 注册 https://www.daocloud.io/mirror#accelerator-doc

  • 使用:

    Docker For Mac 右键点击桌面顶栏的 docker 图标,选择 Preferences ,在 Daemon 标签(Docker 17.03 之前版本为 Advanced 标签)下的 Registry mirrors 列表中加入下面的镜像地址:(这个地址可能因为不同的人而不同) http://d01edbdc.m.daocloud.ioCopy 点击 Apply & Restart 按钮使设置生效。


3. 基本安装完成校验

使用iterm(term)进入终端,输入docker:

https://img1.sycdn.imooc.com//5d2db6940001606d07160279.jpg  docker_3.3.1.png

4. 安装oracle数据库镜像

1. 搜索oracle镜像

docker search oracle

结果如下:

/Users/suitm>docker search  oracle NAME                                DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED oraclelinux                         Official Docker builds of Oracle Linux.         432                 [OK] frolvlad/alpine-oraclejdk8          The smallest Docker image with OracleJDK 8 (…   297                                     [OK] sath89/oracle-12c                   Oracle Standard Edition 12c Release 1 with d…   275                                     [OK] alexeiled/docker-oracle-xe-11g      This is a working (hopefully) Oracle XE 11.2…   240                                     [OK] sath89/oracle-xe-11g                Oracle xe 11g with database files mount supp…   172                                     [OK] .......


这里我选择的 alexeiled/docker-oracle-xe-11g 这个镜像,第一是因为11g版本比较熟悉,第二个是star也比较多,说明质量可以。

2. 下载镜像

docker pull alexeiled/docker-oracle-xe-11g


结果如下,因为比较大2个多G,因此需要耐心等待:

/Users/suitm>docker pull alexeiled/docker-oracle-xe-11g Using default tag: latest latest: Pulling from alexeiled/docker-oracle-xe-11g 759d6771041e: Already exists 8836b825667b: Already exists c2f5e51744e6: Already exists a3ed95caeb02: Already exists 787648ea7b44: Already exists 46f20000ce59: Already exists 2a190e47ca3f: Already exists f8043f470a85: Already exists 0f6111a00dd6: Already exists deacbfda2b11: Already exists 6eb979936fa3: Already exists 5194f2505f56: Already exists a63e30990791: Already exists 994cf2ce199e: Already exists 5eba4c64e295: Already exists 01227e9ca0a6: Already exists 076b6fa27478: Already exists d6407a7221b5: Already exists bbc5a28168da: Already exists dd783b45fa26: Already exists 0a686089bc7e: Already exists 73fac5e681c5: Already exists afaede9e60b1: Already exists a5d9cef8ef2a: Already exists 32bcfcf46e45: Already exists aa896f927427: Already exists f99ab5aba6e5: Already exists Digest: sha256:35448e199115012a742ff9098da3287c666ce52d18efcf4658e0437892ed3ee6 Status: Image is up to date for alexeiled/docker-oracle-xe-11g:latest


3. 使用镜像

https://dashboard.daocloud.io/packages/explore 对镜像进行搜索,或者直接上官网也可以。

该镜像一般都有说明,比如这个镜像的使用说明如下:


因此,总结一下上面的描述 ,启动该oracle数据库镜像,执行的命令如下:

docker run -d --shm-size=2g -p 1521:1521 -p 8080:8080 alexeiled/docker-oracle-xe-11g


然后使用数据库管理软件连接,连接信息如下:

port: 1521 sid: xe username: system password: oracle


4. 初始化xip数据库用户

删除原容器

docker container ls docker rm $具体container的ID


使用以下命令重新启动:

docker run --name oracle -d -p 1521:1521 -it -v /Users/suitm/Persion/DockerFile/oracle_data:/u01/app/oracle/oradata/XE/datafile alexeiled/docker-oracle-xe-11g bash


其中 :

使用一下命令启动数据库

su - oracle sqlplus '/as sysdba' startup


创建表空间和操作目录

create tablespace spc_stdxip logging datafile '/u01/app/oracle/oradata/XE/datafile/spc_stdxip_01.dbf' size 5G autoextend on next 32m maxsize 20G extent management local; create directory stdxip AS '/u01/app/oracle/oradata/XE/datafile';


创建用户脚本如下:

sqlplus '/as sysdba' <<! create user $1 identified by $1 default tablespace spc_$2 account unlock; grant dba to $1; GRANT read, write ON DIRECTORY $2 TO $1; --GRANT CREATE VIEW TO $1; --GRANT SELECT ANY TEBLE TO $1; --GRANT SELECT ANY DICTIONARY TO $1; !


执行 sh ./user_create.sh stdxip sh ./user_create.sh stdvdmp sh ./user_create.sh stdmidl

修改UTF-8不校验字符长度

ALTER SYSTEM ENABLE RESTRICTED SESSION; ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK;


否则导入不进去,会报错:

RA-02374: conversion error loading table "STDXIP"."XIP_XML2CONV" ORA-12899: value too large for column XIP_NODEDESC (actual: 57, maximum: 50) ORA-02372: data for row: XIP_NODEDESC : 0X'CCEED0B4D7B4CCACD0C5CFA2B5C44950202020202020202020'


然后执行impdp命令导入

这里使用的脚本

sh ./ora_impdp.sh stdxip stdxip stdxip spc_stdcop

脚本内容如下:

#!/bin/ksh #日志# is_prt() {     #echo "[$0--------------------]$1"     echo "$1" } #用法提示# useage() {     is_prt "useage:  $0 本地用户 原用户 所属银行(系统目录) 原表空间"     is_prt "    ps:  dmp的文件名必须是'本地用户'.dmp, 存放位置必须在'/backup/所属银行 下面"     is_prt "    eg:  $0 tlmidl midl tlbank USERS" } #误执行缓冲 wait_sure() {     is_prt "导入用户$1,从原用户$2,表空间[spc_$3],从原表空间[$4]......"     is_prt "倒计时3......"     sleep 1     is_prt "倒计时2......"     sleep 1     is_prt "倒计时1......"     sleep 1 } if [ $# -ne 4 ] then     useage;     exit fi wait_sure $1 $2 $3 $4 #export ORACLE_SID=xipdb #is_prt "先新建用户$1" #sh /root/binsh/ora_user_create.sh $1 $3 is_prt "开始导入用户$1,从原用户$2,表空间[spc_$3],从原表空间[$4].,....." impdp $1/$1 dumpfile=$1.dmp directory=$3 REMAP_TABLESPACE=$4:spc_$3 REMAP_SCHEMA=$2:$1 logfile=$1.log if [ $? -ne 0 ] then     exit; fi


启动监听

修改listener.ora(注意HOST不是127.0.0.1,而是docker内部分配的HOSTNAME)

vi /etc/hosts查看 hostname /u01/app/oracle/product/11.2.0/xe/network/admin/listener.ora 修改HOST = fc16312c37c4


listener.ora内容如下:

# listener.ora Network Configuration File: SID_LIST_LISTENER =   (SID_LIST =     (SID_DESC =       (SID_NAME = PLSExtProc)       (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)       (PROGRAM = extproc)     )     (SID_DESC =         (GLOBAL_DBNAME = XE)         (ORACLE_HOME = /u01/app/oracle/product/11.2.0/xe)         (SID_NAME = XE)     ) ) LISTENER =   (DESCRIPTION_LIST =     (DESCRIPTION =       (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC_FOR_XE))       (ADDRESS = (PROTOCOL = TCP)(HOST = fc16312c37c4)(PORT = 1521))     )   ) DEFAULT_SERVICE_LISTENER = (XE)


/etc/hosts文件内容如下,每个容器都不一样,需要查找一下:

127.0.0.1       localhost ::1     localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 172.17.0.2      fc16312c37c4


启动监听lsnrctl start

启动数据库

sqlplus '/as sysdba' startup


查看连接数据库是否正常

oracle@fc16312c37c4:~/product/11.2.0/xe/network/admin$ sqlplus stdxip/stdxip SQL*Plus: Release 11.2.0.2.0 Production on Tue Apr 3 08:27:59 2018 Copyright (c) 1982, 2011, Oracle.  All rights reserved. Connected to: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production SQL> select * from xip_sysdate; XIP_ID     X   XIP_DATE  XIP_YDATE  XIP_TDATE XIP_LTSYNCDT ---------- - ---------- ---------- ---------- -------------- HTC01      L   20151120   20151119   20151121 1 SQL>


配置dbvis连接工具,连接成功 :

https://img1.sycdn.imooc.com//5d2db6a40001ff8207120486.jpg  docker_4.4.1.png

5. 创建stdxip用户使用的docker

5.1 搜索并下载centos

/Users/suitm>docker search centos NAME                               DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED centos                             The official build of CentOS.                   4153                [OK] ansible/centos7-ansible            Ansible on Centos7                              105                                     [OK] jdeathe/centos-ssh                 CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x86_…   93                                      [OK] consol/centos-xfce-vnc             Centos container with "headless" VNC session…   49                                      [OK] imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              40                                      [OK] tutum/centos                       Simple CentOS docker image with SSH access      36 gluster/gluster-centos             Official GlusterFS Image [ CentOS-7 +  Glust…   25                                      [OK] centos/python-35-centos7           Platform for building and running Python 3.5…   19 kinogmt/centos-ssh                 CentOS with SSH                                 17                                      [OK] openshift/base-centos7             A Centos7 derived base image for Source-To-I…   17 centos/postgresql-96-centos7       PostgreSQL is an advanced Object-Relational …   12 openshift/jenkins-2-centos7        A Centos7 based Jenkins v2.x image for use w…   10 openshift/mysql-55-centos7         DEPRECATED: A Centos7 based MySQL v5.5 image…   6 darksheer/centos                   Base Centos Image -- Updated hourly             3                                       [OK] pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag names…   3 openshift/wildfly-101-centos7      A Centos7 based WildFly v10.1 image for use …   3 openshift/jenkins-1-centos7        DEPRECATED: A Centos7 based Jenkins v1.x ima…   3 blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1                                       [OK] openshift/php-55-centos7           DEPRECATED: A Centos7 based PHP v5.5 image f…   1 openshift/wildfly-81-centos7       A Centos7 based WildFly v8.1 image for use w…   1 pivotaldata/centos                 Base centos, freshened up a little with a Do…   1 pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile t…   1 pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated wi…   0 jameseckersall/sonarr-centos       Sonarr on CentOS 7                              0                                       [OK] smartentry/centos                  centos with smartentry                          0                                       [OK]


使用第一个官方镜像。

docker pull centos

5.2 运行容器,并配置基本环境

执行以下命令从镜像生成容器stdxip ,并mount本地文件夹/Users/suitm/Persion/DockerFile/xip为xip用户的初始文件夹。

docker run  --name stdxip --mount type=bind,source=/Users/suitm/Persion/DockerFile/xip,target=/home/xip  -it centos bash


新建用户:useradd xip -d/home/xip -p pass

安装基本软件:

yum install gcc yum install make yum install libaio


安装oracle11g的客户端

cd /home/xip/rpm rpm -ivh  oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm rpm -ivh  oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm rpm -ivh  oracle-instantclient11.2-precomp-11.2.0.4.0-1.x86_64.rpm rpm -ivh  oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm


新建tnsnames.ora文件

cd  /usr/lib/oracle/11.2/client64 mkdir -p network/admin touch tnsnames.ora vi tnsnames.ora 填写如下内容: # tnsnames.ora Network Configuration File: /opt/oracle10g/u01/network/admin/tnsnames.ora # Generated by Oracle configuration tools.111 = (DESCRIPTION =     (ADDRESS_LIST =         (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))     )     (CONNECT_DATA =         (SERVICE_NAME = stdxip)     ) )


配置环境变量

export ORACLE_HOME=/usr/lib/oracle/11.2/client64 export ORACLE_BASE=/usr/lib/oracle/11.2 export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH export NLS_LANG=AMERICAN_AMERICA.AL32UTF8 export PATH=$PATH:$ORACLE_HOME/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib


配置zh_CN.gbk环境,locale -a 没有汉字字符集

yum -y install kde-l10n-Chinese  localedef -c -f UTF-8 -i zh_CN zh_CN.utf8


时区修改:

ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime


基本环境处理:

打包并解压xip用户环境,配置。

5.3 启动服务,为运行中的container增加端口

6. 梳理xip环境,使用dockerfile构建

周末重新梳理了一下,由于docker commit 创建镜像不透明,并且不易于后期维护,因此,编写dockerfile来重新构建stdxip环境,当然,前提是/home/xip目录已经部署完成。

文件目录如下:

/Users/suitm/binsh>lf Dockerfile oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-precomp-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm oracle-instantclient11.2-tools-11.2.0.4.0-1.x86_64.rpm


执行构建命令:

docker build -t stdxip .


docker build 是构建镜像、-t 是指定构建的镜像的名字, "." 是上下文context.  如果没有 -f 指定dockerfile,会默认读取当前文件夹下面的Dockerfile文件,类似makefile

默认dokcer 会将上下文的文件夹打包上传到docker服务端,所以docker是CS架构的,因此如果上下文里的路径,到后面docker 中只用COPY等命令的时候,不可以用绝对路径。

Dockerfile文件内容如下:

# base image FROM centos # MAINTAINER 作者信息 MAINTAINER suitianmou@tfrunning.com.cn # 本地环境变量, 需要根据实际情况编写 ENV ORACLE_IP=172.17.0.2 #ARG ORACLE_IP=172.17.0.2 ## ENV是环境变量,在容器运行过程中也有效,ARG是DOCKERFILE变量,仅在该文件执行过程中有效 # 拷贝oracle11g的rpm安装包到镜像中 COPY *.rpm /tmp/ ## 安装gcc、make等软件包 RUN yum install -y gcc \     && yum install -y make \     && yum install -y libaio \     && yum clean all \ # centos无此头文件,编译可能会报错     && touch /usr/include/stropts.h \ # 修改时区     && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ ## 安装oracle_client     &&  rpm -ivh  /tmp/oracle-instantclient11.2-basic-11.2.0.4.0-1.x86_64.rpm \     &&  rpm -ivh  /tmp/oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm \     &&  rpm -ivh  /tmp/oracle-instantclient11.2-precomp-11.2.0.4.0-1.x86_64.rpm \     &&  rpm -ivh  /tmp/oracle-instantclient11.2-sqlplus-11.2.0.4.0-1.x86_64.rpm \     && rm -f /tmp/*.rpm \ # 链接proc     && ln -s /usr/lib/oracle/11.2/client64/lib/precomp /usr/lib/oracle/11.2/client64/precomp \     && ln -s /usr/include/oracle/11.2/client64 /usr/lib/oracle/11.2/client64/lib/precomp/public \ # 配置tnsnames.ora, 使用ln -s     && mkdir -p /usr/lib/oracle/11.2/client64/network/admin \ #   && echo -e 'XE =\n\ #  (DESCRIPTION =\n\ #    (ADDRESS = (PROTOCOL = TCP)(HOST = $ORACLE_IP)(PORT = 1521))\n\ #    (CONNECT_DATA =\n\ #      (SERVER = DEDICATED)\n\ #      (SERVICE_NAME = XE)\n\ #    )\n\ #  )' > /usr/lib/oracle/11.2/client64/network/admin/tnsnames.ora \     && ln -s /home/xip/docker/tnsnames.ora /usr/lib/oracle/11.2/client64/network/admin/tnsnames.ora \ # 修改root密码     && echo "pass"|passwd root --stdin \ # 新建xip用户     && useradd xip -d/home/xip -p pass \ # 新建启动entrypoint脚本     && echo -e '#!/bin/bash\n\nsource $HOME/.profile && sh $1\n\nbash\n' > /docker_start.sh \     && sed -i -E 's/\r/\n/g' /docker_start.sh \     && chmod 777 /docker_start.sh # 指定xip为运行用户 USER xip # 指定ENTRYPOINT ENTRYPOINT ["/docker_start.sh"] ## 容器启动必定会执行的明星,用户输入的CMD会作为参数输入进来,这样就可以达到启动vdmp.sh 的实际启动脚本是docker_start.sh vdmp.sh


启动容器的命令如下:

docker run --name stdvdmp -d -p 9999:9999 -it -v /Users/suitm/Persion/DockerFile/xip:/home/xip stdxip vdmp.sh


这样一个VDMP容器服务就启动完成了。

7. oracle容器的启动梳理

由于容器停止后,非mount的数据都会丢失,因此oracle容器如果重新创建,经常会发生如下错误:

SQL> startup ORACLE instance started. Total System Global Area  601272320 bytes Fixed Size          2228848 bytes Variable Size         201330064 bytes Database Buffers      394264576 bytes Redo Buffers            3448832 bytes Database mounted. ORA-01122: database file 5 failed verification check ORA-01110: data file 5: '/u01/app/oracle/oradata/XE/datafile/spc_stdxip_01.dbf' ORA-01207: file is more recent than control file - old control file


因此,重新梳理一下数据库文件,将变化的文件数据库文件都放在挂载目录下:

8. 总结

至此,基本上使用docker就完全搭建了一个渠道环境。后续再运行项目,则在stdxip镜像基础上,运行新的容器即可。

在本机启动docker的服务之后。(我本机docker设置为默认启动)

执行: docker start oracle 就可以启动oracle的监听了数据库服务了。

执行: docker start vdmp就可以启动vdmp服务了。

另外对于docker的使用回顾注意一下几点:

附录: 常用命令

docker image ls (-a)  查看镜像

docker container ls (-a)  查看容器

docker volume ls  查看文件卷

docker run --name oracle -d -p 1521:1521 -it -v /Users/suitm/Persion/DockerFile/oracle_data:/u01/app/oracle/oradata/XE/datafile alexeiled/docker-oracle-xe-11g bash


docker attach 容器名称/容器id

docker inspect 容器名/容器ID

docker exec -it 容器名 bash 进入已经运行的容器,并运行bash命令



作者:冰天
链接:https://www.jianshu.com/p/e3426223b528

點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 1
  • 收藏
  • 共同學(xué)習(xí),寫下你的評論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號

舉報(bào)

0/150
提交
取消