ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Rancher/Docker/oracle 서버 실행하기
    ETC/MacOS,Rancher 2024. 11. 9. 12:15

     

    도커 이미지 조회

    버전 확인

    https://hub.docker.com/

    https://hub.docker.com/r/gvenzl/oracle-xe

     

    이미지 확인 및 다운로드

    oracle-xe로 검색하니 `gvenzl/oracle-xe`가 제일 인기가 좋은듯하다. 당첨!

     

    사전작업

    볼륨마운트 폴더 생성

    컨테이너 안의 오라클 데이터파일이 위치한 경로 `/opt/oracle/oradata`를 mac에서 

    `/Users/deokjoonkang/dev/opt/database/data/rancher/oracledb` 경로로 설정을 하기 위해서 폴더를 생성해 준다.

    $ mkdir /Users/deokjoonkang/dev/opt/database/data/rancher/oracledb

     

    컨테이너로 오라클 올리기 (Rancher) - 실패

    다운로드

    $ nerdctl pull gvenzl/oracle-xe:21-slim

    nerdctl pull gvenzl/oracle-xe

     

    컨테이너 띄우기

    그나마 경량인 21-slim로 설치

    $ nerdctl run -d --name oracle21c \
    -p 1521:1521 \
    -e ORACLE_PASSWORD=Test1234@ \
    -v /Users/deokjoonkang/dev/opt/database/data/rancher/oracledb:/opt/oracle/oradata \
    gvenzl/oracle-xe:latest

     

    ORA-00443: background process "PMON" did not start

    ORA-00443: background process "PMON" did not start

     

    Rancher 메모리 설정 및 CPU코어 수도 변경해주고 컨테이너 실행 옵션까지 변경해주었다.

     

    옵션 변경

    $ nerdctl run -d \
    --name=oracle21 \
    -p 15210:1521 \
    -e ORACLE_PASSWORD='Test1234' \
    -e ORACLE_EDITION=EXPRESS \
    -e ORACLE_CHARACTERSET=AL32UTF8 \
    -e INIT_SGA_SIZE=1024 \
    -e INIT_PGA_SIZE=512 \
    --memory="4g" \
    --shm-size="4g" \
    --cpus=2 \
    -v /Users/deokjoonkang/dev/opt/database/data/rancher/oracledb:/opt/oracle/oradata \
    container-registry.oracle.com/database/express:latest

     

     

    별짓을 다했다. 근데 안된다.. 공식사이트에서 확인해보니 M칩에서는 안된단다... 젝12 간단히 될줄 알고 시간만 허비해버린..

     

     

    컨테이너로 오라클 올리기 (Colima -> Docker)

    위 문제로 Colima로 docker 명령어로 container를 실행하려고 한다.

    Colima를 설치 - 깃허브

    $ brew install colima
    $ brew install qemu

     

    Colima 실행

    도커허브 공식사이트에서 알려준대로 메모리를 4로 설정하고 실행해준다.기동되는데 시간이 오래걸린다.

    $ colima start --arch x86_64 --memory 4

    4GB의 메모리를 할당한 x86_64 아키텍쳐의 Colima VM 를 시작하겠다는 뜻이다.

     

    컨테이너 띄우기

    rancher를 사용하지 않고 docker 명령어로 실행한다.

    # 이미지 확인
    $ docker images
    
    # 실행
    $ docker run -d \
    --name=oracle21 \
    -p 1521:1521 \
    -e ORACLE_PASSWORD=Test1234 \
    -e ORACLE_EDITION=EXPRESS \
    -e ORACLE_CHARACTERSET=AL32UTF8 \
    -v /Users/deokjoonkang/dev/opt/database/data/rancher/oracledb:/opt/oracle/oradata \
    gvenzl/oracle-xe:21-slim
    
    # 실행 확인
    $ docker ps -a

    실행확인 해 보았더니 컨테이너가 정상적으로 실행되지 않았다.

     

    로그를 확인

    $ docker logs -f oracle21

     

    ORA-00205: error in identifying control file, check alert log for more info

    ORA-00205: error in identifying control file, check alert log for more info

     

    볼륨마운트 경로 확인

    컨테이너 안의 오라클 데이터파일이 위치한 경로 `/opt/oracle/oradata`를 mac에서 `/Users/deokjoonkang/dev/opt/database/data/rancher/oracledb` 경로로 설정하였는데 권한이 부족한 이유였다.

    아래와 같이 파일을 모두 삭제한 후 권한을 부여한다.

    $ rm -rf /Users/deokjoonkang/dev/opt/database/data/rancher/oracledb/*
    $ sudo chmod -R 777 /Users/deokjoonkang/dev/opt/database/data/rancher/oracledb

     

    다시 실행

    주의할점은 ORACLE_PASSWORD='Test1234'로 싱글 쿼테이션도 같이 넣게 되면 '도 패스워드로 인식하게 됨으로 '은 빼고 넣도록하자. 삽질했다.ㅠ

    $ docker run -d \
    --name=oracle21 \
    -p 1521:1521 \
    -e ORACLE_PASSWORD=Test1234 \
    -e ORACLE_EDITION=EXPRESS \
    -e ORACLE_CHARACTERSET=AL32UTF8 \
    -v /Users/deokjoonkang/dev/opt/database/data/rancher/oracledb:/opt/oracle/oradata \
    gvenzl/oracle-xe:21-slim

     

    실행 확인

    정상적으로 컨테이너가 기동되었다.

     

    컨테이너 진입

    $ docker exec -it oracle21 /bin/bash

     

    오라클 접속

    system계정으로 접속할때는 패스워드를 Test1234로 넣으면 된다.

    # dba권한 접속
    sqlplus / as sysdba
    
    # 설정한 패스워드 변경시
    ALTER USER system IDENTIFIED BY "Test1234";

     

    IntelliJ에서 확인

     

    쉘스크립트

    이제 매번 서비스를 실행할때마다 docker명령어를 넣기 귀찮으니 쉘로 만들어 두자.

    # 파일 만들기
    $ vi build-oracle21.sh
    
    # 실행 권한 주기
    $ chmod +x ./build-oracle21.sh

     

    build-oracle21.sh

    #!/bin/sh
    
    IMAGE_NAME=gvenzl/oracle-xe
    IMAGE_VERSION=21-slim
    CONTAINER_NAME=oracle21
    
    usage(){
      if [ -z "$1" ]; then
        echo "사용법: $0 help|run|stop|rm"
        echo "명령어: ./build-mariaDB.sh run"
        exit
      fi
    }
    
    run() {
      echo ""
      echo "############### [RUN] - docker run ##### - STARTED"
      stop
      echo ""
      rm
      echo ""
      echo "##### [RUN] - docker run $CONTAINER_NAME ...options"
    
      docker run -d \
            --name=oracle21 \
            -p 1521:1521 \
            -e ORACLE_PASSWORD=Test1234 \
            -e ORACLE_EDITION=EXPRESS \
            -e ORACLE_CHARACTERSET=AL32UTF8 \
            -v /Users/deokjoonkang/dev/opt/database/data/rancher/oracledb:/opt/oracle/oradata \
            gvenzl/oracle-xe:21-slim
    
      docker ps -a
      echo "############### [RUN] - docker run ##### - ENDED"
      echo ""
    }
    
    stop() {
      echo "##### [STOP] - docker stop $CONTAINER_NAME"
      docker stop "$CONTAINER_NAME"
    }
    
    rm() {
      echo "##### [RM] - docker rm $CONTAINER_NAME"
      docker rm "$CONTAINER_NAME"
    }
    
    main() {
      local cmd=${1:-''}
    
      case "${cmd}" in
        "run")
          run
          ;;
        "stop")
          stop
          ;;
        "rm")
          rm
          ;;
        "help"|*)
          usage
          exit
          ;;
      esac
    }
    
    main ${@}

     

    실행 및 확인하기

    컨테이너가 있으면 내리고, 지우고 다시 올리는 스크립트 실행!

    $ ./build-oracle21.sh run

     

    끝!

     

     

    재부팅 되면

    # colima 실행
    $ colima start --arch x86_64 --memory 4
    
    # oracle21 서비스 실행 (/Users/deokjoonkang/dev/opt/database/build-oracle21.sh)
    $ ./build-oracle21.sh run
    OR
    $ /Users/deokjoonkang/dev/opt/database/build-oracle21.sh run

     

     

     

     

     

     

    'ETC > MacOS,Rancher' 카테고리의 다른 글

    Rancher - nginx 쉘로 띄워보기  (0) 2024.07.11
    Mac에서 Python으로 된 thumbor Rancher로 기동  (0) 2024.04.12
    Mac crontab 설정  (0) 2024.04.08
    Rancher - react build html nginx로 띄워보기  (0) 2024.03.15
    Ruby 버전 업데이트  (1) 2023.11.03

    댓글

Designed by Tistory.