본문 바로가기
SI 업무/linux

2. 우분투에 Docker 로 OracleXE 설치 법

by 새로운걸 배우는게 너무 싫은 IT 복붙러 2024. 11. 18.
728x90

사전 준비 사항

 

사전 준비로 우분투설치 완료.

우분투의 docker 설치 완료.
docker 가 설치 안됐다면 여기 보고 설치 : https://robin-write.tistory.com/21

 

1. 우분투에 docker 설치

처음엔 virtual box 내에 우분투가 존재 하니해당 우분투에 oracle xe 를 다운 받아서 설치 하려 했다.하지만 요즘 세상은 일일이 다 까는 것보다 docker 로 이미지별 container 에 올리는것이 대세니.대세

robin-write.tistory.com


 

1. Oracle xe 이미지 다운

  Oracle은 공식적으로 Docker 이미지를 제공하지 않지만,

  커뮤니티에서 관리하는 이미지를 사용할 수 있습니다.

  gvenzl/oracle-xe 이미지는 인기 있는 선택입니다.

 

docker pull gvenzl/oracle-xe:latest

 

혹시 명령어 쳐서 permision 어쩌고 하면서 안되면   sudo docker pull gvenzl/oracle-xe:latest 로 해보자.

 

2. Oracle XE 컨테이너 실행

   down 받은 이미지를 실행 한다.

 

docker run -d \
  --name oracle-xe \
  -p 1521:1521 -p 5500:5500 \
  -e ORACLE_PASSWORD=YourPassword \
  gvenzl/oracle-xe:latest

 

혹시나 낫놓고 ㄱ 자도 모를까봐 어린 중생들을 위해 한 줄 더 쓴다. 

아래 처럼 한줄로 쭈욱 써도 된다.

 

\ <- 줄 바꿈 이스케이프 문자다.  한줄로 쭈~욱 치면 오타를 낼수 있고, 가독성이 떨어지니 '\'을 넣어서 줄을 바꾼것이다.

docker run -d --name oracle-xe -p 1521:1521 -p 5500:5500 -e ORACLE_PASSWORD=YourPassword gvenzl/oracle-xe:latest

 

  • -p 1521:1521: Oracle 데이터베이스 기본 포트.
  • -p 5500:5500: Oracle 관리 포트.
  • -e ORACLE_PASSWORD=YourPassword: 데이터베이스 관리자 계정 SYS 및 SYSTEM의 비밀번호.

    명령어 치고 나서 process 가 잘 도는지는 docker ps 로 확인하면 아래처럼 나온다.

수행된 내 pc 화면

 

 

3.  우분투 안에서 sqlplus 로 접속 해 보기

docker exec -it oracle-xe bash
sqlplus sys/YourPassword@localhost/XEPDB1 as sysdba

 

docker exec -it oracle-xe bash < -- 이게 머냐면,

        docker에서 (docker)
        명령어를 실행할건데(exec) 

        상호작용 하는 터미널로다가 (-it)

         oracle-xe 란 컨테이너에서 (oracle-xe)
         bash shell을 실행 할거야 ( bash) 란 의미다.

         공부하면 궁금했다. 꼭 container 이름을 지정해야 하는가? 

         학습할때는 Oraclexe 이미지를 가진 container 하나 띄웠으니 상관 없지만

         사실 docker는 동시에 여러개의 container를 실행 할수 있어서 내가 명령어를 수행할 docker conatiner 이름을
         꼭 명시해줘야 한다.

직접 해본 결과

 


갑자기 궁금

docker 이미지 실행시,

docker run -d xxx 에서

오라클이름으로 XEPDB1를 주지 않았는데 왜 sqlplus에서 명령어 실행시 XEPDB1 라고 이름을 주는가?

 

더보기

Oracle XE Docker 이미지를 사용할 때, XEPDB1이 등장하는 이유는 Oracle XE 컨테이너가 기본적으로

플러그블 데이터베이스(PDB) 구조를 제공하며, 이 구조에서 기본적으로 생성되는 PDB의 이름이 **XEPDB1**으로 설정되어 있기 때문입니다.

이는 Docker 이미지의 기본 설정값으로, 사용자가 별도로 지정하지 않는 한 자동으로 적용됩니다.


Oracle의 컨테이너 데이터베이스(CDB)와 플러그블 데이터베이스(PDB) 구조

Oracle Database 12c 이후부터는 멀티테넌트 아키텍처를 기본으로 채택하고 있습니다. 이 구조에는 다음과 같은 두 가지 주요 구성 요소가 있습니다:

  1. CDB (Container Database): 데이터베이스의 컨테이너 역할을 하는 상위 데이터베이스.
  2. PDB (Pluggable Database): 애플리케이션 데이터가 저장되는 독립적인 데이터베이스.

Docker로 배포되는 Oracle XE 이미지는 기본적으로 하나의 CDB와 하나의 PDB를 생성하며, PDB의 기본 이름이 **XEPDB1**입니다.

 

 

그럼 내가 XEPDB1 을 쓰고 싶지 않으면 어찌 하지????
예를 들어 MY_PDB로 쓰고 싶다면??
그러면 아래처럼 하고 SQLPLUS 접속도 아래처럼..

docker run -d \
  --name oracle-xe \
  -p 1521:1521 -p 5500:5500 \
  -e ORACLE_PASSWORD=YourPassword \
  -e ORACLE_PDB=MY_PDB \
  gvenzl/oracle-xe:latest
sqlplus sys/YourPassword@localhost/MY_PDB as sysdba

 


4. 난 local pc 에서 virtual 머신 내 우분투로 sql을 날리고 싶은데 이때는 어찌 하지?

 

난 window 머신에 오라클이 이미 설치 되어 있다.

virtualbox 내 우분투 안에 docker가 돌고 docker는 1521 port 를 쓴다

local pc 에서 docker 로 붙기 위해 추가로 port fowarding을 등록 해야 한다.

2222->22는 local에서 ssh 접속용.

1521-> 1521 로 못하는 이유는 local 에 깔린 oracle에서 이미 1521을 쓰기 때문이다.

접속정보 넣고 접속해보니 성공.

728x90