暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Docker笔记(2) - centos 7.7 构建单实例Oracle镜像

运维笔记本 2019-11-14
669

一.安装 docker

参考:CentOS 7.7 安装新版本 docker(在线)

二. 构建准备工作

1. 下载 oracle dockerfiles

从 Oracle 官方 Github[1]下载 dockerfiles,如图

各版本目录下存放构建镜像所需要的脚本,包括 Dockerfile。buildDockerImage.sh 为集成 docker build 的自动化脚本。

上传对应版本的 dockerfiles 和 buildDockerImage.sh 脚本到 docker 服务器上,下载[2]数据库安装文件 linuxx64__database.zip 文件,不要解压放到对应版本目录的 dockerfiles 目录下。


2.修改 Dockerfile

在 56 行添加

    RUN chmod 777 $INSTALL_DIR -R    
    #此位置添加上面的语句
    RUN chmod ug+x $INSTALL_DIR/*.sh && \
      sync && \
       $INSTALL_DIR/$CHECK_SPACE_FILE && \
       $INSTALL_DIR/$SETUP_LINUX_FILE && \
       rm -rf $INSTALL_DIR

    如不添加,创建完镜像后,oradata 权限有问题,无法启动容器。报错见最后

    3.开始构建

      # 给脚本执行权限
      [root@host01 oracle19c]# chmod +x buildDockerImage.sh
      # 查看帮助
      [root@host01 oracle19c]# ./buildDockerImage.sh


      Usage: buildDockerImage.sh -v [version] [-e | -s | -x] [-i] [-o] [Docker build option]
      Builds a Docker Image for Oracle Database.
       
      Parameters:
        -v: version to build
            Choose one of: 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.
        [root@host01 oracle19c]# ./buildDockerImage.sh -v 19.3.0 -e

        成功后有如下信息

          Successfully built 1caec1c121df
          Successfully tagged oracle/database:19.3.0-ee




          Oracle Database Docker Image for 'ee' version 19.3.0 is ready to be extended:
             
             --> oracle/database:19.3.0-ee


          Build completed in 747 seconds.

          4.查看本地镜像

            [root@host01 oracle19c]# docker images
            REPOSITORY         TAG                 IMAGE ID           CREATED             SIZE
            oracle/database     19.3.0-ee           1caec1c121df       About a minute ago   6.65GB
            oraclelinux         7-slim             874477adb545        3 months ago         118MB

            5.推送镜像到 Dockers Hub

            • (1) 登陆
              [root@host01 oracle19c]# docker login
              Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one.
              Username: haoxy
              Password:
              WARNING! Your password will be stored unencrypted in root/.docker/config.json.
              Configure a credential helper to remove this warning. See
              https://docs.docker.com/engine/reference/commandline/login/#credentials-store
              Login Succeeded
              • (2) 修改标签名
                [root@host01 oracle19c]# docker tag 1caec1c121df haoxy/oracle:19.3.0-ee
                [root@host01 oracle19c]# docker images
                REPOSITORY         TAG                 IMAGE ID           CREATED             SIZE
                oracle/database     19.3.0-ee           1caec1c121df       8 minutes ago       6.65GB
                haoxy/oracle       19.3.0-ee           1caec1c121df       8 minutes ago       6.65GB
                oraclelinux         7-slim             874477adb545       3 months ago       118MB

                重命名后,原镜像不会删除,上面虽然显示两个镜像名称,但是只占用一个镜像空间的大小。

                • (3) 推送
                  [root@host01 oracle19c]# docker push haoxy/oracle
                  The push refers to repository [docker.io/haoxy/oracle]
                  7dcb96c29b40: Pushed
                  adef7158b341: Pushing [=======>                                           ] 884.3MB/6.194GB
                  5da4f7b166ca: Pushed
                  72cb79fc5cfc: Pushed
                  c22990bcbeec: Pushed
                  4fee40bcfecf: Mounted from library/oraclelinux

                  推送后登陆到 dockerhub 看不到上传的镜像,需要自己创建

                  建 oracle


                  创建完成后返回查看


                  推送到阿里云 Dockers Hub

                    docker login --username=hao_xy registry.cn-beijing.aliyuncs.com
                      [root@host01 ~]# docker tag 29678b999bb3 registry.cn-beijing.aliyuncs.com/haoxy/oracle19c:19.3.0-ee
                      [root@host01 ~]# docker images
                      REPOSITORY                                         TAG                 IMAGE ID           CREATED             SIZE
                      registry.cn-beijing.aliyuncs.com/haoxy/oracle19c   19.3.0-ee           29678b999bb3        25 hours ago        6.65GB
                      haoxy/oracle                                       19.3.0-ee           29678b999bb3        25 hours ago        6.65GB
                      oracle/database                                    19.3.0-ee           29678b999bb3        25 hours ago        6.65GB
                      oraclelinux                                        7-slim              874477adb545        3 months ago        118MB

                      三、启动容器

                        docker run --name <container name> \
                        -p <host port>:1521 -p <host port>:5500 \
                        -e ORACLE_SID=<your SID> \
                        -e ORACLE_PDB=<your PDB name> \
                        -e ORACLE_PWD=<your database passwords> \
                        -e ORACLE_CHARACTERSET=<your character set> \
                        -v [<host mount point>:]/opt/oracle/oradata \
                        oracle/database:19.3.0-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 opt/oracle/oradata
                                        The data volume to use for the database.
                                        Has to be writable by the Unix "oracle" (uid: 54321) user inside the container!
                                        If omitted the database will not be persisted over container recreation.
                          -v opt/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 /opt/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.

                        在本地(宿主机上)创建数据库挂载目录,实现数据文件持久化

                          mkdir -p /oracle/oracle19c/data

                          启动

                            docker run -d -it --name ora19c -p 1521:1521 -p 5500:5500 -e ORACLE_SID=orcl   -e ORACLE_PWD=oracle  -v /oracle/oracle19c/data:/opt/oracle/oradata haoxy/oracle:19.3.0-ee

                            -v  容器的数据放在本地的/oracle/oracle19c/data 下面,不会因为容器的删除而删除数据。相当于在容器的/opt/oracle/oradata 挂载了本地的/oracle/oracle19c/data 目录。

                            四、重用持久化数据文件

                            1.停止现在的容器

                              [root@host01 oracle19c]# docker stop ora19c
                              ora19c

                              2.删除容器

                                [root@host01 oracle19c]# docker rm ora19c
                                ora19c
                                [root@host01 oracle19c]# docker ps -a
                                CONTAINER ID       IMAGE               COMMAND             CREATED             STATUS             PORTS               NAMES

                                3. 重新创建容器

                                使用原来的 SID,进行创建容器,新建的容器会直接重用持久化的数据文件启动数据库。

                                  [root@host01 oracle19c]# docker run -d -it --name ora19c -p 1521:1521 -p 5500:5500 -e ORACLE_SID=orcl   -e ORACLE_PWD=oracle  -v /oracle/oracle19c/data:/opt/oracle/oradata haoxy/oracle:19.3.0-ee

                                  查看 log,创建的容器会使用原来的数据文件,直接启动数据库。

                                  五、外部访问 Docker 内的 oracle

                                  使用 本地的 IP 地址,映射的端口号,容器内 Oracle SID 进行连接。

                                  附一、不修改 Dockerfile 启动镜像报错:

                                  如果不修改 Dockerfile 启动容器的时候报

                                  进入容器查看 oradata 权限为

                                    drwxr-xr-x. 2 root   root        6 Nov 13 04:04 oradata

                                    root 进入容器,修改/opt/oracle/oradata 的权限

                                      docker exec -u 0 -it --privileged ora19c /bin/bash


                                      bash-4.2# cd /opt/oracle/
                                      bash-4.2# ls -l
                                      drwxr-xr-x. 2 root   root        6 Nov 13 04:04 oradata
                                      bash-4.2# chown oracle:dba oradata/
                                      bash-4.2# ls -l
                                      drwxr-xr-x. 2 oracle dba         6 Nov 13 04:04 oradata

                                      重启容器进程,开始创建。

                                        docker stop ora19c
                                        docker start ora19c

                                        附二、Docker Hub 加速器

                                        Docker Hub 提供众多镜像,你可以从中自由下载数十万计的免费应用镜像, 这些镜像作为 docker 生态圈的基石,是我们使用和学习 docker 不可或缺的资源。为了解决国内用户使用 Docker Hub 时遇到的稳定性及速度问题 DaoCloud 推出永久免费的新一代镜像站服务。配置 Daocloud 免费的 Docker Hub 加速器[3]

                                        附三、欢迎使用构建的镜像

                                        1. 拉取镜像

                                          docker pull haoxy/oracle:19.3.0-ee
                                          2. 启动镜像
                                          • 创建本地挂载点
                                            #在本地(宿主机上)创建数据库挂载目录:
                                            mkdir -p /oracle/oracle19c/data
                                            • 启动容器
                                              docker run -d -it --name ora19c \
                                              -p 1521:1521 \
                                              -p 5500:5500 \
                                              -e ORACLE_SID=orcl \
                                              -e ORACLE_PWD=oracle \
                                              -v /oracle/oracle19c/data:/opt/oracle/oradata haoxy/oracle:12.2.0.1\
                                              -ee

                                              -d 在后台运行

                                              -it 提供一个交互界面

                                              -v 容器的数据放在本地的/oracle/oracle19c/data下面,不会因为容器的删除而删除数据。相当于在容器的/opt/oracle/oradata挂载了本地的/oracle/oracle19c/data目录。

                                              • 实时查看日志
                                                docker logs -f ora19c

                                                出现下面提示,表示启动成功

                                                  #########################
                                                  DATABASE IS READY TO USE!
                                                  #########################
                                                  • 3. root用户登陆镜像
                                                    docker exec -u 0 -it --privileged ora19c /bin/bash

                                                    进入后可以修改root密码

                                                    参考资料

                                                    [1]

                                                    从Oracle官方Github: https://github.com/oracle/docker-images/tree/master/OracleDatabase

                                                    [2]

                                                    Oracle软件下载地址: https://www.oracle.com/database/technologies/oracle-database-software-downloads.html

                                                    [3]

                                                    配置Daocloud 免费的Docker Hub加速器: https://www.daocloud.io/mirror#accelerator-doc


                                                    最后修改时间:2019-12-17 13:15:12
                                                    文章转载自运维笔记本,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                    评论