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

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

运维笔记本 2019-11-14
554

一.安装 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                    评论