ETC/MacOS,Rancher

Rancher/Docker/oracle 서버 실행하기

건담아빠 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