[Docker] 도커에 Oracle12C 설치하기

요새 타의에 의해 오라클 강의를 듣고 있다. 이제 막 설정하기 시작하는데, 계속 막혀서 기록으로 남겨두고자 한다.

오라클에서 제공하는 Oracle12C 도커 이미지가 있다.
XE버전이 아닌 EE 버전이다.
Oracle Database Enterprise Edition (docker.com)

도커 이미지를 다운받으려면 위 링크에 방문해서 도커허브에 로그인 후 Proceed Checkout을 눌러 진행해야 한다.

다음페이지에서는 간단하게 개인정보를 입력하고, Developer Tier 라이센스에 동의하면 그후에 도커 이미지를 받아오는 것이 가능하다.

본격적인 도커 환경설정

먼저 도커이미지를 다운받으려면 docker login 을 통해 docker hub 계정 로그인을 해주어야 한다.

이후 docker pull store/oracle/database-enterprise:12.2.0.1을 하거나 , 바로 컨테이너를 생성하는 명령어를 사용한다.

이미지를 pull한 이후에 docker run 명령어를 통해 컨테이너를 올려도 되지만, 어짜피 로컬에 이미지가 업으면 docker run 명령어를 실행시켜도 자동으로 이미지를 다운 받아온다.

docker run -d -it --name <Oracle-DB> store/oracle/database-enterprise:12.2.0.1

–name을 사용하면 컨테이너의 이름을 지정할 수 있다. <Oracle-DB> 이부분을 사용하고 싶은 컨테이너 이름으로 치환해서 사용하면 된다.
-p 를 이용해서 컨테이너에 접속할 수 있는 포트를 설정할 수 있는데, 나중에 외부에서 접속하려면 필요하니 컨테이너 생성시 바로 생성하겠다.

docker run -d -p 8080:8080 -p 1521:1521 --name oracle store/oracle/database-enterprise:12.2.0.1

나는 컨테이너 이름을 oracle로 설정했고, 8080포트와 1521포트를 각각 컨테이너의 8080, 1521에 매칭시켜 주었다.

Oracle 컨테이너 접속

docker container에 접속하려면 원래는 attach 명령어를 사용하기도 한다.
그런데 이때까지 mongodb 컨테이너를 쓰면서도 그랬던 것 같은데, attach를 사용하면 제대로 db에 접속이 되지 않았다.
접속은 되는데, 단순히 DB의 시스템 로그를 보여주는등 내가 원하는 커맨드 작업이 불가능하다.

컨테이너 실행시 shell이나 몽고디비 같은 경우 mongod 등이 실행되지 않아서 라고 생각되는데, 이부분에 대해서 아시는 분은 답을 달아주시면 좋겠다.

어쨋든 docker exec 명령어를 활용해 oracle 컨테이너에 접속한다.

docker exec -it oracle bash

명령어 실행시 쉘이 뜬다.
여기에서 sqlplus를 통해서 DB서버에 접속할 수 있다.

SQLPLUS 이용해서 sys계정 접속

sqlplus 명령어를 치면 유저이름과 비밀번호를 입력하는 창이 뜬다. 오라클 sys계정의 기본 패스워드는 oracle이다.
하지만 우리가 다운받은 도커이미지에서의 sys유저의 비밀번호는 oracle이 아니라 Oradoc_db1 이다.

sqlplus system/Oradoc_db1

이것 때문에 조금 당황했다.
오라클 강의를 들으면서 설정을 하고있어서 강사님은 sys, oracle이라고 알려주셨는데, 아무리 실행시켜도 안되는 것이었다.
해당 이미지 레포지토리에서 Instruction을 확인하면서 해당 내용을 발견했다.

웃긴건 sysdba계정은 그대로 비밀번호가 oracle이다.
sysdba 계정으로 로그인 하려면 sqlplus sys as sysdba 라고 치면 된다.

PERL 명령어가 작동을 하지 않을 때

확인해보니 .bashrc 의 환경변수 설정이 되어있지 않아 perl이 있음에도 제대로 실행되지 않았다.
vi ~/.bsahrc 명령어를 이용해 bash 쉘의 환경변수를 수정할 수 있다.

PERL이 위치한 경로는
/u01/app/oracle/product/12.2.0/dbhome_1/perl/bin
이다.

해당 경로를 vi에서 연 .bashrc파일에 추가해주어야 하는데, PATH라고 써진 부분에 추가해주어야 한다.

어떻게 해야할지 모르는 사람이 있을까봐 추가적으로 설명을 한다.
vi에서 a키를 누르면 현재 커서가 있는 위치에서 텍스트를 추가할 수 있다.

  1. vi ~/.bashrc
  2. 먼저 키보드 방향키를 이용해 export PATH 라고 써진 줄에 간다.
    export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/u01/app/oracle/product/12.2.0/dbhome_1/bin:
    대충 원래는 이렇게 써져있다.
  3. 해당 줄의 제일 끝으로 이동한다. (키보드에서 End키를 누르면 바로 끝으로 간다)
  4. a키를 누른다.
  5. PERL 실행파일이 위치한경로 -> /u01/app/oracle/product/12.2.0/dbhome_1/perl/bin 를 복사해서 ctrl+v 붙여넣는다.
  6. esc키를 누르고 wq 라고 치고 엔터를 친다.(vi에서 수정된 내용을 저장하고 종료하는 명령어)
  7. 수정이 되었으면 source ~/.bashrc 라고 치면 방금 수정한 내용이 쉘에 반영된다.

-> 아래 한줄로 bashrc에 추가 가능
echo "export PATH='$PATH:/u01/app/oracle/product/12.2.0/dbhome_1/perl/bin'" >> ~/.bashrc

혹시 키를 잘못눌렀다면 esc키를 누르고 q! 라고 친 후 엔터를 누르면 수정된 내용이 적용되지 않고, 종료된다.
그럼 처음부터 다시 시작하면 된다.

SQL PLUS 명령어가 안먹을 경우

오랜만에 다시 오라클 컨테이너를 띄워서 테스트를 해보니 SQLPLUS 명령어도 먹히지 않았다.
sqlplus가 없는 건 아니었고, 당연히 path 설정이 안되어 있었다.

$ORACLE_HOME/bin 여기에 sqlplus가 있는데 이를 사용하기 위해 위에서처럼 환경변수를 셋업해주었다.

echo "export PATH='$PATH:$ORACLE_HOME/bin'" >> ~/.bashrc

source ~/.bashrc

이제 잘 된다.

ORACLE 컨테이너에 파일 옮기기

도커 컨테이너에 파일을 옮기려면 어떻게 해야할까..
git에서 소스를 받으려고 했는데, git이 설치가 안되어 있었다.
그래서 알아보니 docker cp라는 명령어를 이용해 로컬의 파일을 컨테이너로 복사할 수 있었다.

사용법
docker cp <Local에서 옮길 파일이름> <오라클 컨테이너 name>:<컨테이너내 파일을 복사할 주소>

내 경우는 이렇게 했다.
docker cp db-sample-schemas.zip oracle:/home/oracle

저기에서 귀찮아서 oracle:/ 이렇게 해버리면 루트 디렉토리에 복사가 되어, 귀찮아진다.
왠지 모르게 oracle 컨테이너에서 sudo 명령어가 안먹는다. 이건 알아보는 중이다.


일단 이렇게 환경설정을 간단하게 해봤는데, 아직 외부에서 제대로 접속을 안해봐서 이상태로 잘 동작하는 지 잘 모르겠다.
뭔가 설정해주어야 할 것들이 더 있을 것 같은데, 일단 PASS

나중에 생기면 추가할 예정~