오늘은 학원에서 오라클 DB를 시작했다.
학원에서는 vmware에 우분투를 올리고 오라클을 설치해서 사용하는데
이 방법에는 가장 큰 문제점이 있다.
나처럼 맥북 air 램 8기가짜리 모델을 쓰면 답도 없다는 것이다.
그렇기에 생각해 낸 것이 지금 개인적으로 돌리고 있는 synology nas에 오라클을 올리면
다 해결되는 문제인 것이다.
그렇게 도커에 오라클을 올려보기로 했다.
하지만 어제까지만 해도 포트바인딩에 대해서 전혀 알지 못하였고
어떻게 오라클에 접속하는지도 알지 못해서
하나부터 찾아보기로 했다.
그렇게 정보를 쌓다 보니 결국 이틀 만에 해결방법을 찾아내고 만다.
그럼 일단 말도 안 되게 많았던 문제점부터 정리해 보겠다.
시작은 우분투를 시놀로지 도커에 올려서 시도해 봤었다.
하지만 도커는 다양한 게시자가 올리기 때문에 파일의 종류, 파일상태가 제각각이다.
즉 명령어도 다르고 환경변수도 다르다는 뜻이다.
단순하게 말하자면 명령어가 다르다는 문제이다.
여러 개의 우분투를 돌려봤지만 가장 큰 문제인 외부접속이 불가하여 결국
오라클 db를 바로 도커에 올리는 방식으로 바꾼다.

내가 지금 돌리고 있는 파일은 가장 아래에 있는 quillbuilduser이다.
오라클 이미지에는 주의해야 할 점이 있는데 그건 오라클의 타입이다.
오라클에는 ee, se, xe 이렇게 있는데
ee는 Enterprise se는 Standard xe는 Express로 ee와 se는 유료버전이고 xe는 cpu한개에 한해서는 무료이다.
그렇기에 xe버전 위주로 찾다 보니 그리 많은 파일은 없었다.
그렇기도 해서 12,18,21c XE버전의 대부분의 파일은 설치해 본 것 같다.
그렇게 다양한 오라클을 실행해 보니 명령어가 없는 파일도 있고 관리자 권한으로 진입하는 방법이 다른
파일도 있었다.
그리고 타 블로그를 보니 ssh에 들어갈 수 있어야 외부에서 진입이 가능하다는 글을 보고
apt-get install openssh_server로 설치를 했지만 오류가 뜨거나
sqlplus sys as / sysdba로 오라클 관리자권한에 진입하려고 해도 오라클 이미지(컨테이너)마다
진입방법이 다르다 보니 상당히 곤욕을 치렀었다.
가장 큰 문제는 PATH_HOME이 지정되어 있지 않다는 에러메시지였다. 도커에는 HOME_PATH라는 환경변수가 들어가고
거기에 중요 커멘드가 저장되어 있는데 그 폴더가 default로 지정되어 있지 않다는 것이다.
만약 시놀로지 도커에서 이 버그를 발견한다면 과감하게 그 컨테이너는 버려라.
모든 방법을 사용해 봐도 그냥 커멘드가 안 먹히는 것이었다.
그럼 이제 혹시나 시놀로지 도커나 타 os의 도커에 오라클을 올리고 외부 ip로 접속하고 싶은 사람들을 위해서
내가 어떻게 구축을 했는지 써보도록 하겠다.
일단 위에서 보여준 이미지를 설치하고
컨테이너를 만들어준다.

이미지를 실행하면 네트워크설정 다음에 일반설정이 나오고 그 페이지에 고급 설정이라고 있다.
여기서 환경변수를 볼 수 있는데 여기서 아까 말한 커맨드의 개수를 짐작할 수 있다.
이미지마다 환경변수가 다르기 때문에(텅텅 빈 파일도 있음) 직접 필요한 환경변수를 만들 자신이 없다면 용량이 큰
이 이미지파일이 맞을 것이다.

다음은 포트설정인데 컨테이너 포트는 내부포트, 로컬 포트는 외부에서 접속하는 포트이다.
1521은 오라클의 기본 포트이고 22는 ssh이다.
내부에서만 사용한다면 상관없지만 외부에서 접속을 하려면 로컬 포트도 반드시 만들어 줘야 한다.


다음은 볼륨설정이다. 도커폴더에 폴더를 하나 만들고 마운트경로는 비슷하게 써주면 된다.
이렇게 하고 다음을 누르면 컨테이너는 완성이다.

시작으로 ssh로 들어가서
sudo i
서버의 root계정으로 로그인을 한다.
그다음 컨테이너의 ID를 알야아 하니까
docker ps
로 컨테이너의 정보를 확인하다.
오라클 컨테이너의 ID를 복사하고
docker exec -it 컨테이너의 ID bash
으로 오라클에 진입한다. 아직은 bash(기본유저)이므로
이제부터 SQL로 진입한다.
su oracle
이렇게 입력을 하면 SQL로 진입할 수 있는데 이건
오라클의 root계정은 아니다(개념을 모르면 답이 없는 부분......)
root로 접속하기 위해서
cd $ORACLE_HOME
로 아까 말한 오라클 환경변수에서 가장 중요한 HOME폴더로 이동한다.
그리고
bin/sqlplus / as sysdba
sqlplus로 관리자권한인 sysdba로 접속한다는 뜻이다.
이렇게 들어왔으면 이제 root계정으로 들어온 것이다.
이제는 똑같이 계정을 만들고 만든 계정에게 session권한을 줘야 한다.
이때 중요해야 할 점이 있는데
create user [id] identified by [pw];
로 쓰면 될 것이라고 생각하기 쉽다. 대부분의 블로그에서도 그렇게 설명하고 있다.
하지만 이런 문장으로 써버리면

이런 식으로 첫 번째 라인에 에러가 있다고 뜨고
아래에 유효하지 않는 일반유저 혹은 역할이름?(롤네임)이다라고 뜬다.
이 두 개의 오류는 단순하지만 초보는 당황하기 쉽기 때문에 유형을 외워두길 바란다.
SQL> create user [c##id]
2 identified by [pw];
이런 식으로 일단 id만 쓰고 엔터를 눌러서 아래에서 나머지를 써야 하고 id는 반드시 c##을 앞에 붙여줘야 한다.
이렇게 하고
GRANT SELECT ON V_$SESSION TO [id];
로 만든 계정이 session에 로그인할 수 있게 권한을 주면 내부에서 사용할 수 있는 세팅은 끝이다.
이제 해야 할 것은 외부접속세팅이다.
일단 도커에서 ip를 확인해 볼 것인데 다양한 방법 중 내가 쓴 방법은
ifconfig 와
docker inspect [컨테이너ID]
이다.
inspect로 ip를 확인하면

긴 글 중 ip를 확인할 수 있다. 내용으로 돌아와서 ip를 보면 172.17.0.1~xx 이런 식으로 적혀있을 것이다.
이건 도커에서 컨테이너를 만들대 호스트모드나 브리지모드 중 고를 것인데 이중 브리지모드를 선택하면
자동으로 할당되는 사설 ip이다.
즉 이 ip와 포트로의 외부에서 접속은 막혀있다.
그렇기에 포트바인딩이라는 걸 해줄 필요가 있다.
포트바인딩이랑 간단히 말해서 포트바인딩을 하기 전에서 외부 ip/포트가 내부 ip/포트가 완전히
분리된 상태인데 그것을 연결시켜 주는 것을 말한다.
이것도 쉬운 것은 아닌데 일단 시놀로지 도커에서의 바인딩은 한 가지 명령어밖에 없는 것 같다.
바인딩을 하기 전에 도커의 오라클을 중지시켜 주고 exit를 사용하여 시놀로지의 root계정까지 돌아간다.
그리고
docker run -p 외부포트:1521 [컨테이너 이미지이름](예시 quillbuilduser/oracle-18-xe)
chatgpt에 의하면 사설 ip:외부포트:1521 이런 식으로도 가능은 한 것 같은데 100% 오류가 뜬다.
이렇게 명령어를 입력하면 도커가 3분 정도 먹통이 되면서 ssh에 엄청나게 많은 글자가 나올 건데
겁먹지 말고 기다리면 success라는 글자가 나온다면 성공이다.
그리고 다시 docker inspect로 들어가서
시놀서버의 ip(사설 ip x)로 OracleDeveloper에서 접속하면 접속이 될 것이다.
최대한 요약해서 써봤지만 정말 많은 오류를 발견했었다.
하지만 앞으로는 컴퓨터로 가상머신을 돌릴 필요가 없어진 것에 대해서
상당히 편하게 공부를 할 수 있을 것을 생각하면 이틀간의 고생이 만족스럽게 느껴진다.
사람은 역시 끈기가 있어야 뭐든 해낼 수 있는 것 같다.
미친 듯이 피곤해도 자신이 해야 한다고 생각한 것에 대해서는
어떻게 해서든 끝내고 맘 편히 잔다라는 생각으로 달려와서 결국 노베이스로
도커에 처음으로 서버를 올려봤다.
이틀 동안 학원수업을 복습할 수없었던 것은 아쉽지만 내일부터라도 다시 분발해 보려고 생각 중이다.
그럼 드디어 이틀간의 고생을 여기서 마치겠다.
'개인 서버(도커등)' 카테고리의 다른 글
톰캣서버 오라클db jdbc로 연동 (JSP) (0) | 2023.05.23 |
---|---|
시놀로지 도커 Tomcat8.5 서버구축 (0) | 2023.05.07 |
도메인을 시놀로지 Web Station의 하위폴더에 연결하기 (0) | 2023.04.23 |
도커 오라클 리눅스 18c 샘플스키마 설치 (0) | 2023.04.19 |
오라클 DB계정관리 (0) | 2023.04.12 |