나그네소

Goldilocks Docker 가이드 본문

sunjesoft/Goldilocks 가이드

Goldilocks Docker 가이드

나그네소티 2022. 1. 3. 17:25

이 문서는 가상 화 개요 및 Docker Image 이용하여 Goldilocks Container 생성 및 사용 방법을

기술 한다.

 

가상화 개요


  • 온프레미스
     저희 데이터베이스는 온프레미스 환경에서 성능시험을 해보면, 초당 약 10  TPS 이상의 Throughput 을 낼 수 있습니다. ”
  • 베이메탈
    “저희 데이터베이스는 베어메탈 환경에서 성능시험을 해보면, 초당 약 10  TPS 이상의 Throughput 을 낼 수 있습니다.”
    온프레미스  베어메탈
    베이메탈은 가상 환경으로 구성 되지만 실제 물리적 장비를 이용 하는 것이기에 온프레미스 환경과 동일하다
    생각 하면 된다.
  • 가상 머신(Virtual machine) / 하이버 바이져
    • vCPU /vCORE
      • 16 core 물리 장비 한대로 8 vcore VM 서버 24 대 할당 가능.
        하이퍼바이저에 의해 물리 core 당 vcore 수가 결정 됨.
      • 16 core * Hypervisor = 32Core(물리코어)
        32 Core * vm 6 Core(1 logical core) = 192 Core 할당 가능
        ex) 192 / 24대(VM Instance) = 8 Core (VM당 8core씩 할당 가능)

  • 가상화 운영 환경 종류
    • 가상 머신 (Virutal Machine)
      하이퍼바이저를 이용하여 하드웨어 스택 전체를 가상화
    • 컨테이너 (Container)
      운영체제 수준에서 프로세서를 컨테이너 형태로 격리화하여 가상화.

 

  • 하이퍼바이저
    물리적으로 한 대의 베어메탈 위에서 다수의 가상 베어메탈을 만들 수 있는 일련의 기술. VMM
    (Virtual Machine Manager)
  • 하이퍼바이저 종류
      • TYPE1 : Bare Metal Type Hypervisor
      • TYPE2 : Hosted Hypervisor

  • 하이퍼바이저 Type1 다시 분류(베어메탈)
    • 반 가상화(Para-Virutalization)
    • 전 가상화(Full Virtualization)

 

  • Hyperversion(TYPE1)
    • 호스트 하드웨어에 하이퍼바이져 설치( 가상화 설치)
    •     windows or linux 설치 하듯이 아무것도 설치 되는 않은 컴퓨터에 hypervisor 설치.
    • 하드웨어를 제어하는 역할과 VM등을 관리 하는 역할을 Hypervisor가 담당 한다.
    • Type1 Hypervisor 종류
      (Xen), KVM(Kernel-based Virtual Machine), CitrixXenServer

XenSErver 설치 화면

Win 10MS Hyper-V 설치 OS 설치 시 기본으로 제공되어 옵션을 통해 활성화

 

  • Hypervision (TYPE2)
    • 호스트 OS 위에 설치되는 방식의 Hypervisor
    • 기존의 컴퓨터 환경을 그대로 이용하기 방식이므로 설치 및 구성이 편리
    • Guest OS가 3번째 수준에서 실행(TYPE1은 2번째) // Host OS-Hypervisor-Guest OS
    • BareMetal(TYPE1)보다 한단계 더 거치므로 느림(Public 가상화)
  • HyperVisor(TYPE2) 구조
    • VM ware Workstation , VM ware Player
    • Virtual Box

Virtaul Box Architecture

 

  • 대표적인 오픈 소스 Hypervisor - XEN, KVM

그림출처 : https://wiki.xen.org/wiki/Xen_Project_Software_Overview

 

  • OpenStack Nova의 Hypervisor Dirver

그림출처 : https://xenproject.org/2015/05/20/xen-project-now-in-openstack-nova-hypervisor-driver-quality-group-b/

  • LIVBIRT
    ibvirt는 플랫폼 가상화 관리를위한 오픈 소스 API, 데몬 및 관리 도구입니다. KVM, Xen, VMware ESXi, QEMU 및 기타 가상화기술을 관리하는 데 사용할 수 있습니다.
  • OpenStack Nova Hypervisor 간의 Interface libvirt 를 사용하거나, Hypervisor 에서 제공하는 Driver API 를 사용해야 함.
  • 위와 같이 Group 으로 나눈 것으로 보아 libvirt + KVM 을 가장 주력으로 사용. (Openstack)

 

Docker & Container


    • Container 단점
      • Linux 에서만 동작
      • Container에 다른 OS 설치 불가 ( Linux의 모든 배포판은 설치 가능 windows x)
      • 모든 컨데이너가 같은 커널 공유
      • 보안 검증이 안된 이미지를 다운받아 사용 할 수 있음
      • Host OS의 보안 취약 성이 모든 컨테이너에 미칠 수 있음
      • Host OS dependent
      • Container별 Kernel 구성 불가능
      • 보안 취약
  • Docker = Container ?
    DockerLXC 기반으로 사용자가 Container를 쉽게 주무를 수 있게 도와주는 관리 도구 이지(Llinux Container, Control Group, Namespace, AUFS등의 기술 사용) DockerContainer 자체를 가리키는 것은 아니다.

 

  • Docker API

그림 출처 : http://www.studytrails.com/devops/docker-architecture-engine-containerd-runc/

  • Docker 사용하는 기술

그림 출처 : http://www.studytrails.com/devops/docker-architecture-engine-containerd-runc/

    • Docker 사용 하는 기술
      • LXC(Linux Container), libcontainer, runC
        cgroups, namepsaces를 표준으로 정의해둔 OCI(open container initiative) 스펙을 구현한 컨테이너 기술의 구현.
      • LXC(Linux Container)
        초기 Docker 에서 사용된 Linux 용 컨테이너 관리 기술. Namespaces, cgroups를 사용해 컨테이너를 생성, 관리 함. Linux 2.6.24에서 처음 발표
      • Libcontainer
        Docker Version 0.9 이후부터 Default로 사용.
        Linux 플랫폼 의존적인 LXC를 대체하기 위해 Docker에서 만든 컨테이너 관련 기술.
        Host OS 의존성을 제거해 다양한 플랫폼 지원(Red Hat, MS Windwos, etc) / Go 언어로 구현.
      •  runC
        컨테이너를 실행하는 런타임이며, CLI 툴 입니다.
        runCcontainer의 생성/실행 등을 위한 기본적인 기술이며 CLI 도구입니다. , container의 조작을 위해 존재 한다고 생각하면 될 것 같습니다. runCDocker, containerd, Podman CRI-O가있는 컨테이너의 기본 런타임으로 사용됩니다.

 

  • Docker가 사용 하는 기술
    시스템 상에서 동작중인 task들을 임의로 Group지어 제어 할 수 있는 기능. (cgroup 생성 -> task 연결 -> subsystem(각종 자원) 할당.
    • Resource limitation : 설정한 메모리 이상 사용하지 못하도록 보호
    • Prioritization : 그룹에 따라 cpu 사용량 또는 디스크 I/O 분배
    • Accounting : 자원 사용량 측정
    • Control : 사용 중단, 체크 포인트 설정, 재 시작
    • 컨테이너 컴퓨팅 자원을 제어 하는 기술
    • 프로세스 집단의 자원(CPU, Memory, disk i/o, network, etc..) 관리 기능
    • 2006년 Google에서 개발 시작
    • Linux 2.6.24 이상 버전부터 지원
    • 기능
  • Namespace
    • Clone() – 새로운 프로세스와 새로운 namespace 생성
    • Unshare() – 존재하는 프로세스에 새로운 namespace 생성
    • Setns() – 존재하는 namespace에 합류
    • 컨테이너를 만들기 위한 프로세스 가상화 기술
    • Hypervisor를 사용하지 않고 격리된 공간을 제공
    • 구현 기술
  • Namespace 종류
    • Mount namespace(mount point, file system)
    • Network namespace ( network interface, routing, etc …)
    • UTS namespace (hostname, domain name)
    • PID namespace ( process )
    • IPC namespace ( IPC )
    • User namespace (UID )

출처 : https://www.slideshare.net/rkawkxms/docker-container

 

  • Docker Bianry & Process

파일 이름에 current 가 없는 것은 x-current binary 를 실행하기 위한 script

  • docker-current : 도커 데몬 프로세스로 command 실행
  • dockerd-current : 도커 Engine 데몬
  • docker-ctr-current : Container 데몬 프로세스의 debug, events 수신 등에 사용
  • docker-containerd-current : Container 를 관리해주는 데몬
  • docker-containerd-shim-current : Container 자체 (초기화 등 수행 후 Container 자체 가 됨)

 

  • Docker 동작 구조

Docker Log 및 컨테이너 생성 디렉토리
그림 출처 : https://i.stack.imgur.com/lAtSR.png

각각의 containers 디렉토리에 shim 거쳐 Container가 생성 된 것을 확인 할 수 있다.

 

  • Image , Container

그림 출처 : https://www.joinc.co.kr/w/man/12/docker/storage

  • Image Layer, Container Layer

그림 출처 : http://www.studytrails.com/devops/docker-architecture-engine-containerd-runc /

 

  • Docker Network
    Docker 에서 지원 하는 Network
    • Bridge : Default
    • Host
    • Container
    • None
    • Network List 조회

 

  • Docker Network(Bridge 모드)
    Docker0 virtual interface : docker host를 설치하면 자동으로 생성

Docker() = virtual ethernet bridge( virtual switch )

Docker() 이외 원하는 bridge를 직접 생성하여 사용하고자 할 경우

 

  • Docker Network(Bridge 모드)

  • Docker Network ( Bridge 모드 )

Host 에서 ip addr 과 brctl 명령어를 통해 Virtual interface 가 bind 되어 있는 master interface 를 알 수 있음
Bridge 모드에 대한 상세 정보 조회

  • Docker Ntwork (Host 모드)
    컨테이너가 Docker Bridge를 이용하지 않고 Host Network 스펙을 그대로 사용
    이너 와 컨테이너는 연결 못하는 건가?
    $ docker run -d --name node-2-server --network host kimjeongchul/node-app-server
    Container 내부 에서도 HostProcess들이 Network Interface 사용하는 것처럼 사용 하면 됨.

 

  • Docker Network (Container 모드)
    컨테이너간 네트워크를 공유 한다.
    tech9:/home/son2865] docker run --net=container:06454eb50456 -dit --name connect2 ubuntu
    2b036806f58a57a377ea84a23a72f6578e2741a1e5f3230b2273d54adec1103d
    Container 간의 network 공유 하여 사용 한다

 

 

 

Docker 설치


  • docker 설치
    • $> wget -qO - https://get.docker.com/ | sh
      docker repository에서 docker를 받아와 설치 한다.
  • docker 기동
    • docker start
      $> service docker start
    • docker 실행 및 자동 실행 서비스 등록
      $> systemctl enable docker.service //service 등록
      $> systemctl start docker.service //docker start
      $> sysctemctl status docker.service //docker service 확인.
    • 권한 부여
      docker root에 설치 되어 있기 때문에 user에서 실행을 하려면 Group 권한을 주어야 한다.
      $> usermod -aG docker sunje //확인 id
  • docker 설치 확인
    $> docker version

 

Goldilocks 도커 이미지 다운로드(Standalone)


  • Goldilocks에서 제공 하는 Docker Image는 Dockr Hub Site에서 pull로 다운 받아 사용 할 수 있다.
  • Goldilocks Docker Image Download 받는법(standlaone version)
    host disk 와 volumn을 공유 하지 않고 Goldilocks Database 자체가 생성 된 Docker Image로
    Image만 받아 기동만 하면 바로 사용 할 수 있다.

    $> docker pull sunjesoft/standalone:21c_1_10_v_binary
    21c_1_10_v_binary: Pulling from sunjesoft/standalone
    2d473b07cdd5: Pull complete 
    347a3b2242a6: Pull complete 
    9341ba4e4de9: Pull complete 
    3dd858060b15: Pull complete 
    ef1922fe4b8d: Pull complete 
    eb75017f0afa: Pull complete 
    27e01d205f6c: Pull complete 
    3b0264d8a24f: Pull complete 
    e81c7a12b7e6: Pull complete 
    f79a5ad59c5d: Pull complete

Goldilocks 도커 컨테이너 생성 및 실행(Standalone)


  • Goldilocks 에서 제공 하는 Image 다운 받아 컨테이너를 실행 하는 방법이다.
  • Goldilocks Docker Execute(standlaone version)
    host disk 와 volumn을 공유 하지 않는 버젼으로 컨테이너를 실행 하면 바로 DB를 사용 할 수 있다.

    $> docker run -it --rm  --name goldilocks-0 -p 17101:10101 -p 27581:22581 --sysctl kernel.shmmax=50359959552 --sysctl kernel.shmmni=4096 --sysctl kernel.shmall=12294912 --sysctl kernel.sem="250 32000 100 128" 
    --hostname goldilocks-0 -e TABLE_SPACE_SIZE=100M -e TEMP_TABLESPACE_SIZE=100M -e SERVICE_ACCOUNT=SA sunjesoft/standalone:21c_1_10_v_binary

    ------start:bashrc------
    /home/sunje/goldilocks_home
    /home/sunje/goldilocks_data/goldilocks/goldilocks-0
    ------end:bashrc--------

     Copyright (C) 2010 SUNJESOFT Inc. All rights reserved.
     Release 21c 21.1.10 revision(8656ab6)


    Connected to an idle instance.

    gSQL> 
    Startup success

    Elapsed time: 44157.82100 ms 

    gSQL> db startup success !!!!

     Copyright (C) 2010 SUNJESOFT Inc. All rights reserved.
     Release 21c 21.1.10 revision(8656ab6)

    Listener is started successfully.

     Copyright (C) 2010 SUNJESOFT Inc. All rights reserved.
     Release 21c 21.1.10 revision(8656ab6)

    Listener process ID : 58
    Listener configuration file : /home/sunje/goldilocks_data/goldilocks/goldilocks-0/conf/goldilocks.listener.conf
    Unix Domain Path : /tmp/unix-glsnr.22581.0
    TCP Listen Host : 0.0.0.0, Port : 22581
    default C/S mode : Dedicated
    Connection Timeout(second) : 100

    Listener is running.
    [STARTUP-SM] LOCAL OPEN PHASE
  • Goldilocks Containr 실행

    $> docker exec -it goldilocks-0 bash
    ------start:bashrc------
    /home/sunje/goldilocks_home
    /home/sunje/goldilocks_data/goldilocks/goldilocks-0
    ------end:bashrc--------
    goldilocks-0:/home/sunje] 
    goldilocks-0:/home/sunje] 
    goldilocks-0:/home/sunje] gst

     Copyright (C) 2010 SUNJESOFT Inc. All rights reserved.
     Release 21c 21.1.10 revision(8656ab6)


    Connected to GOLDILOCKS Database.

    gSQL> select * from t1;

    C1
    --
     1

    1 row selected.

 

Goldilocks 도커 이미지 다운로드(Cluster)


  • Goldilocks에서 제공 하는 Docker Image는 Dockr Hub Site에서 pull로 다운 받아 사용 할 수 있다.
  • Goldilocks Docker Image Download 받는법(Cluster version)
    host disk 와 volumn을 공유 하지 않고 Goldilocks Database 자체가 생성 된 Docker Image로
    Cluster Docker Image만 받아 기동만 하면 바로 사용 할 수 있다.

    $> docker pull sunjesoft/cluster:21c_1_10_G1N1_v_binary
    21c_1_10_G1N1_v_binary: Pulling from sunjesoft/cluster
    2d473b07cdd5: Already exists 
    4de87e242d53: Already exists 
    99e30912b677: Already exists 
    48886335bafd: Already exists 
    c3502c69e489: Already exists 
    a6ae56625c76: Pull complete 
    b67f13ab199b: Pull complete 
    9303b6cbcb05: Pull complete 
    5ff4a7ff3eb2: Pull complete 
    b6d734b4a643: Pull complete

    $> docker pull sunjesoft/cluster:21c_1_10_G1N2_v_binary
    21c_1_10_G1N2_v_binary: Pulling from sunjesoft/cluster
    2d473b07cdd5: Already exists 
    4de87e242d53: Already exists 
    99e30912b677: Already exists 
    48886335bafd: Already exists 
    c3502c69e489: Already exists 
    a6ae56625c76: Already exists 
    b67f13ab199b: Already exists 
    9303b6cbcb05: Already exists 
    5ff4a7ff3eb2: Already exists 
    967bc82385dd: Pull complete

Goldilocks 도커 컨테이너 생성 및 실행(Cluster)


  • Goldilocks 에서 제공 하는 Image 다운 받아 컨테이너를 실행 하는 방법이다.(Cluster)
  • Goldilokcs Cluster 제공 받기 위해서는 고정 IP를 사용 하여야 하기 때문에 아래 와 같은 Network 작업을 수행 한다.

    $> docker network create --gateway 172.19.0.1 --subnet 172.19.0.0/21 mybridge
    $> docker network ls
    docker-test.novalocal:/home/sunje/work/docker_cluster_no_volumn] docker network ls
    NETWORK ID     NAME       DRIVER    SCOPE
    a59c8a462830   bridge     bridge    local
    e7ade4581582   host       host      local
    6cbfb6cd0047   mybridge   bridge    local
    4914990bb263   none       null      local
    $> docker inspect mybridge|grep -Ei "Subnet|Gateway"
    "Subnet": "172.19.0.0/21",
    "Gateway": "172.19.0.1"

    -> container 안에서 172.19.IP 대역대를 사용 할 수 있다록 한다
         (컨테이너 Cluster IP 172.19망으로 고정되어 이씩 때문에)
     
    $> docker pull sunjesoft/cluster:21c_1_10_G1N1_v_binary //docker hub image pull (g1n1)
    $> docker pull sunjesoft/cluster:21c_1_10_G1N2_v_binary //docker hub image pull (g1n2)
  • Goldilocks Docker Execute(cluster version)
    host disk 와 volumn을 공유 하지 않는 버젼으로 컨테이너를 실행 하면 바로 DB를 사용 할 수 있다.

    $> docker run -it --rm  --name goldilocks-1 --net mybridge --ip 172.19.0.102 -p 30101:10101 -p 42581:22581 --sysctl kernel.shmmax=50359959552 --sysctl kernel.shmmni=4096 --sysctl kernel.shmall=12294912 --sysctl kernel.sem="250 32000 100 128" --hostname goldilocks-1  sunjesoft/cluster:21c_1_10_G1N2_v_binary

    $> docker run -it --rm  --name goldilocks-0 --net mybridge --ip 172.19.0.101 -p 20101:10101 -p 32581:22581 --sysctl kernel.shmmax=50359959552 --sysctl kernel.shmmni=4096 --sysctl kernel.shmall=12294912 --sysctl kernel.sem="250 32000 100 128" --hostname goldilocks-0 -e CLUSTER_CHECK=0 -e MEMBER_NAME=G1N1 sunjesoft/cluster:21c_1_10_G1N1_v_binary
  • Goldilocks Containr 실행

    $> docker exec -it goldilocks-0 bash
    ------start:bashrc------
    /home/sunje/goldilocks_home
    /home/sunje/goldilocks_data/goldilocks/goldilocks-0
    ------end:bashrc--------
    goldilocks-0:/home/sunje] 
    goldilocks-0:/home/sunje] 
    goldilocks-0:/home/sunje] gsrt
    bash: gsrt: command not found
    goldilocks-0:/home/sunje] gst

     Copyright (C) 2010 SUNJESOFT Inc. All rights reserved.
     Release 21c 21.1.10 revision(8656ab6)


    Connected to GOLDILOCKS Database.

    gSQL> desc t1

    COLUMN_NAME TYPE         IS_NULLABLE
    ----------- ------------ -----------
    C1          NUMBER(10,0) TRUE       


    gSQL> select * from t1;

    C1
    --
     1

    1 row selected.

    Elapsed time: 0.19900 ms 

    gSQL> select * from x$instance;

    VERSION                               STARTUP_TIME               STATUS OS_USER_ID IS_CLUSTER LOCAL_GROUP_ID LOCAL_MEMBER_ID LOCAL_MEMBER_NAME LOCAL_MEMBER_POSITION
    ------------------------------------- -------------------------- ------ ---------- ---------- -------------- --------------- ----------------- ---------------------
    Release 21c 21.1.10 revision(8656ab6) 2022-01-10 07:41:26.460110 OPEN         1000 TRUE                    1               1 G1N1                                  0
    Release 21c 21.1.10 revision(8656ab6) 2022-01-10 07:40:10.332635 OPEN         1000 TRUE                    1               2 G1N2                                  1

    2 rows selected.


    Connected to GOLDILOCKS Database.

    gSQL> select * from t1;

    C1
    --
     1

    1 row selected.

Goldilocks 도커 이미지 만들기(Standalone)


Goldilocks Docker File을 이용하여 Docker Image 생성 한다.

  1. Goldilocks Docker File를 Down 받는다.
    son2865@sunjesoft.com 으로 요청 하면 전달.
    • Docker 파일 구성
      • build 세부 내역
        docker build -t $(NS)/$(IMAGE_NAME):$(VERSION) -f Dockerfile .

        [Dockerfile]
        FROM centos:7

        # centos update
        RUN yum update -y
        RUN yum install -y net-tools whtich crontabs vim locales tzdata gdb

        RUN  useradd -m -s /bin/bash sunje 

        COPY *.sh /home/sunje/
        COPY ./goldilocks/goldilocks_home /home/sunje/goldilocks_home
        COPY ./goldilocks/goldilocks_data /home/sunje/goldilocks_data_create

        RUN chown -R sunje:sunje /home/sunje/ \
            && mkdir -p /home/sunje/nfs_volumn \
            && mkdir -p /home/sunje/goldilocks_data \
            && chown -R sunje:sunje /home/sunje/nfs_volumn \
            && chown -R sunje:sunje /home/sunje/goldilocks_home \
            && chown -R sunje:sunje /home/sunje/goldilocks_data \
            && chmod 777 -R /home/sunje

        USER root
        RUN echo "root:root" | chpasswd

        USER sunje

        WORKDIR /home/sunje

        ENV CREATE_TABLE_QUERY="CREATE TABLE TEST (C1 INT PRIMARY KEY)"

        ENTRYPOINT ["/bin/bash"]
        CMD ["./entrypoint.sh"]
        - Cent OS 7 설치 / os update / sunje user create / sunje directory create / root passwd change
        - container os 및 계정 생성 후 entrypoint.sh shell 수행
        - entrypoint.sh 에서 실제 DB 생성 및 Startup 처리 한다.
      • dockerenv.default
        Docker File에서 사용 하는 환경 변수를 설정 한다.

        #!/usr/bin/env

        # docker image create
        NS ?= sunjesoft
        VERSION ?= 21c_1_10_v
        VERSION_BINARY ?= 21c_1_10_v_binary
        IMAGE_NAME ?= standalone

        CONTAINER_NAME ?= goldilocks
        CONTAINER_INSTANCE ?= 0

        # docker run
        PORTS =  -p 17101:10101 -p 27581:22581
        ENV = -e TABLE_SPACE_SIZE=100M -e TEMP_TABLESPACE_SIZE=100M -e SERVICE_ACCOUNT=SA
        OPTION= --sysctl kernel.shmmax=50359959552 \
          --sysctl kernel.shmmni=4096 \
          --sysctl kernel.shmall=12294912 \
          --sysctl kernel.sem="250 32000 100 128" \
          --hostname goldilocks-0
      • entrypoint-init.sh
        docker container 수행 시 DB를 생성 및 table create shell 이다.

        #!/bin/bash

        # DB CREATE START

        #DB STARTUP
        function db_startup
        {
        gsql sys gliese --as sysdba <<EOF
        \startup
        \q
        EOF
            check=`ps -ef|grep gmaster|grep -v "grep"|wc -l`
            if [ $check -eq 1 ]
            then
                echo "db startup success !!!!"
                glsnr --start
                glsnr --status
            else
                echo "db startup failure !!!"
            fi
        }

        #DB CREATE
        function init_cluster(){

            gcreatedb

        gsql sys gliese --as sysdba <<EOF
        STARTUP
        \q
        EOF

        gsql sys gliese --as sysdba <<EOF
        ALTER TABLESPACE $TABLE_SPACE_NAME ADD DATAFILE '$TABLE_SPACE_FILE_NAME' SIZE $TABLE_SPACE_SIZE;
        ALTER TABLESPACE $TABLE_UNDO_NAME ADD DATAFILE '$TABLE_UNDO_FILE_NAME' SIZE $TABLE_UNDO_SIZE;
        ALTER TABLESPACE $TEMP_TABLESPACE_NAME ADD MEMORY '$TEMP_TABLESPACE_FILE_NAME' SIZE $TEMP_TABLESPACE_SIZE;
        CREATE USER $SERVICE_ACCOUNT_NAME IDENTIFIED BY $SERVICE_ACCOUNT_PASSWD DEFAULT TABLESPACE $TABLE_SPACE_NAME TEMPORARY TABLESPACE $TEMP_TABLESPACE_NAME;
        GRANT ALL ON DATABASE TO $SERVICE_ACCOUNT_NAME;
        CONNECT $SERVICE_ACCOUNT_NAME $SERVICE_ACCOUNT_PASSWD;
        $CREATE_TABLE_QUERY;

        \q
        EOF

            gsql sys gliese --as sysdba -i $GOLDILOCKS_HOME/admin/standalone/DictionarySchema.sql --silent
            gsql sys gliese --as sysdba -i $GOLDILOCKS_HOME/admin/standalone/InformationSchema.sql --silent
            gsql sys gliese --as sysdba -i $GOLDILOCKS_HOME/admin/standalone/PerformanceViewSchema.sql --silent

        glsnr --start
        glsnr --status

        }

        DBF_CHECK=`find "${HOME}" -type f -name "*.dbf"|wc -l`
        if [ $DBF_CHECK -gt 0 ]
        then
            db_startup
        else

            rm ~/.bashrc
            cp /home/sunje/goldilocks_home/bashrc-init ~/.bashrc
            cp /home/sunje/goldilocks_home/gsql.ini ~/.gsql.ini
            cp /home/sunje/goldilocks_home/odbc.ini ~/.odbc.ini
            source ~/.bashrc
            
            set -euxo pipefail
            MY_NAMESPACE=goldilocks
            MY_POD_NAME=${HOSTNAME}
            
            #환경 설정 값이 있으면 ENV에 있는 값으로 없으면 아래 정의 되어 있는 값으로 한다.
            TABLE_SPACE_SIZE=${TABLE_SPACE_SIZE:-100M}
            TABLE_UNDO_SIZE=${TABLE_UNDO_SIZE:-128M}
            TABLE_SPACE_NAME=${TABLE_SPACE_NAME:-MEM_DATA_TBS}
            TABLE_UNDO_NAME=${TABLE_UNDO_NAME:-MEM_UNDO_TBS}
            TABLE_SPACE_FILE_NAME=${TABLE_SPACE_FILE_NAME:-data_01.dbf}
            TABLE_UNDO_FILE_NAME=${TABLE_UNDO_FILE_NAME:-undo_01.dbf}
            TEMP_TABLESPACE_SIZE=${TEMP_TABLESPACE_SIZE:-100M}
            TEMP_TABLESPACE_NAME=${TEMP_TABLESPACE_NAME:-MEM_TEMP_TBS}
            TEMP_TABLESPACE_FILE_NAME=${TEMP_TABLESPACE_FILE_NAME:-temp_01}
            SERVICE_ACCOUNT_NAME=${SERVICE_ACCOUNT_NAME:-SA}
            SERVICE_ACCOUNT_PASSWD=${SERVICE_ACCOUNT_PASSWD:-passwd}
            CLUSTER_PORT=${CLUSTER_PORT:-10101}
            GOLDILOCKS_HOME=/home/sunje/goldilocks_home
            export ODBCINI=/home/sunje/goldilocks_data/$MY_NAMESPACE/$MY_POD_NAME/conf/odbc.ini
            
            echo $GOLDILOCKS_DATA
            echo $SERVICE_ACCOUNT_NAME
            echo $SERVICE_ACCOUNT_PASSWD
            echo $TABLE_SPACE_SIZE
            echo $TABLE_UNDO_SIZE
            echo $TEMP_TABLESPACE_SIZE
            
            # Kubernetes stop 없으므로 무조건 삭제 -shw-
            rm -rf /home/sunje/goldilocks_data/$MY_NAMESPACE/$MY_POD_NAME
            mkdir -p /home/sunje/goldilocks_data/$MY_NAMESPACE/$MY_POD_NAME
            mkdir -p /home/sunje/nfs_volumn/$MY_NAMESPACE
            export GOLDILOCKS_DATA=/home/sunje/goldilocks_data/$MY_NAMESPACE/$MY_POD_NAME
            cp /home/sunje/goldilocks_data_create/init-data/* /home/sunje/goldilocks_data/$MY_NAMESPACE/$MY_POD_NAME -R

            #DB CREATE
            init_cluster
        fi


        tail -f $GOLDILOCKS_DATA/trc/system.trc
  • make build
    goldilocks dokcer image를 생성 한다.
    $>make build

  • make run_shell
    생성 한 Image를 이용하여 Goldilocks DB Container 생성 한다.
    $> docker run -it --rm --name $(CONTAINER_NAME)-$(CONTAINER_INSTANCE) $(PORTS) $(OPTION) $(ENV) $(NS)/$(IMAGE_NAME):$(VERSION)

  • make exec_shell
    생성한 Container를 수행 한다.
    $> docker exec -it $(CONTAINER_NAME)-$(CONTAINER_INSTANCE) bash

 

 

 

 

 

 

 

 

 

 

 

'sunjesoft > Goldilocks 가이드' 카테고리의 다른 글

Goldilocks 운영 가이드  (0) 2021.12.30
Goldilocks / Oracle 비교 자료  (0) 2019.10.16