在Docker中安装配置Oracle12c并实现数据持久化

在Docker中安装配置Oracle12c并实现数据持久化

  • 在ubuntu中按安装Docker Ce

  • 在docker 中获取oracle镜像信息

    $ docker search oracle
  • 选定镜像,并pull到系统中,一定要先配置加速,不然超级慢

    eric@userver:~$ docker pull sath89/oracle-12c
    Using default tag: latest
    latest: Pulling from sath89/oracle-12c
    863735b9fd15: Downloading   5.25MB/65.67MB
    4fbaa2f403df: Download complete 
    44be94a95984: Download complete 
    a3ed95caeb02: Download complete 
    b8bc6e8767ee: Download complete 
    c918da326197: Download complete 
    448e1619a038: Download complete 
    faadd00cf98e: Downloading  2.625MB/2.768GB
    94c8eec9fdf0: Download complete 
    58e66654f771: Downloading    1.3MB/4.437MB

  • 查看已经下载的镜像

    eric@userver:~$ docker images
    REPOSITORY         TAG    IMAGE ID     CREATED    SIZE
    sath89/oracle-12c latest 17cd1ab9d9a7 12 days ago 5.7GB
    hello-world    latest  f2a91732366c 4 weeks ago 1.85kB
  • 列出运行中的容器

    
    #暂时没有运行中的
    
    eric@userver:~$ docker ps
    CONTAINER ID IMAGE COMMAND  CREATED  STATUS PORTS NAMES
    

使用oracle12c创建容器

  • 方式一:创建端口并运行,这样每次退出数据不会保留

    $ docker run -d -p 8080:8080 -p 1521:1521 sath89/oracle-12c
  • 方式二:用数据卷实现容器和数据的有效分离,实现数据持久化

    $ docker run -d -p 8080:8080 -p 1521:1521 -v /local_dir:/data sath89/oracle-12c
    
    #参数 -d 后台运行容器,并返回容器ID ;  -p 指定端口 , -v 指定数据卷位置
    
  • 数据卷的特点:

    1、可以供多个容器访问,直接共享或者重用

    2、独立于容器周期,不会在删除容器时删除其挂载的数据卷

    3、数据卷在容器启动时初始化,如果容器使用的镜像在挂载点包含的数据这些数据会复制到新的容器中

    4、可以直接对数据卷里的内容进行修改

  • 数据持久化

    
    #启动
    
    eric@userver:~$ docker run -d -p 8080:8080 -p 1521:1521 -v /home/eric/oradata:/u01/app/oracle sath89/oracle-12c
    
    7485d22f2fd5c5d7023407d280fb68b0251841560c121bb2be5954954aa7a698
    
    #查看运行容器
    
    eric@userver:~$ docker ps
    CONTAINER ID     IMAGE                 COMMAND         
    7485d22f2fd5    sath89/oracle-12c   "/entrypoint.sh "
    
    
    #查看本地目录,发现有个oradata目录
    
    
    #在该目录下新建测试文件
    
    eric@userver:~/oradata$ sudo touch test.txt
    
    
    #查看容器中的内容是否新增
    
    $ sudo docker exec 7485d22f2fd5 ls /u01/app/oracle
    ...
    test.txt
    ...
    
    #其实 本地卷中的数据和容器中是同步的
    
    
  • 删除容器,数据不会一同删除

    $ docker stop 7485d22f2fd5
    $ docker rm 7485d22f2fd5
    $ ls oradata #数据依然存在
    audit  checkpoints  diag  oradata   test.txt
    
  • 重新启动一个容器,挂载该数据卷

    $ sudo docker run -it --name oracle2 -v /home/eric/oradata:/datatest sath89/oracle-12c
    
    #--name 指定一个名字,不指定会默认随机分配一串字符
    
    $ sudo docker exec oracle2 ls /data_test
    $ docker exec oracle2 ls /data_test
    ...    test.txt     ...
    
    
    #可以同样看到数据
    
    
  • 运行该容器

    eric@userver:~$ docker exec -it 7485d22f2fd5 /bin/bash
    root@7485d22f2fd5:/

连接oracle12c

--使用此镜像创建的oracle用户和密码: systme/oracle|sys/oracle
hostname:localhost
port: 1521
sid: xe
service name: xe
username: system
password: oracle

--sqlplus 连接:
root@7485d22f2fd5:/# sqlplus system/oracle@//localhost:1521/xe

SQL*Plus: Release 12.1.0.2.0 Production on Wed Dec 20 06:25:21 2017
Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit PrSQL

SQL> -- 修改密码有效期,由180天改成无限制

SQL> ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;

Profile altered.
SQL> -- 解锁用户
alter user SYSTEM account unlock

你可能感兴趣的:(Oracle,Linux,docker)