Rancher/Docker/oracle 서버 실행하기
도커 이미지 조회
버전 확인
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
컨테이너 띄우기
그나마 경량인 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
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
볼륨마운트 경로 확인
컨테이너 안의 오라클 데이터파일이 위치한 경로 `/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