본문 바로가기
Programming/데이터베이스 \ 오라클

[docker] docker run oracle

by 오뚝오뚝 2023. 4. 25.

아래의 내용들은 몇일에 걸쳐 이루어낸 Ubuntu20.04 LTS에 도커를 활용하여 오라클을 설치하는 방법입니다.

--------------------------------------------------------------------------------------------------------------------------------------------

 

도커의 기본적인 부분들도 조금 정리해보았습니다. 훨씬 더 잘 정리된 글들도 많지만 그래도 적어보았습니다.

 

파일들을 모아놓은 어떤 프로그램의 객체를 컨테이너라고 이해하면 쉽습니다. 환경이라고도 표현을 하곤 하지만, 더 쉽게 설정값들이 미리 설정되어 있어 서로 쉽게 읽어와서 쓸 수 있는 (즉, 설치의 개념과 조금 다른) 그런 객체를 컨테이너라고 생각하면 되는 것이죠. 

 

조금 중요한 부분을 터치하자면, 설치의 개념과 조금 다릅니다. 예를 들면, AWS/Azure에서 가상 기계를 빌려서 사용할때와는 차이가 존재합니다. 가상머신의 경우에는 실제 어딘가에 나의 작은 서버와 HW들이 존재하죠. 하지만 docker를 통한 컨테이너의 경우에는 그렇지 않습니다. 단지 어떠한 환경만을 제공해 주어 process 처리를 가능하게 해주는 것입니다.

 

그럼으로 해당 환경 속에서 어떤 명령어가 처리 되기를 원하는 경우에는 명령어 안에 -it 라는 옵션을 추가해주어야 합니다.

i 는 interactive 그리고 t 는 text 기반의 터미널 정도로 이해하면 됩니다.

 

결국 docker는 어쨋든 나의 컴퓨터 자원을 사용합니다. 그리고 단순히 docker는 환경을 통해 내가 원하는 output이 나오게 해주는 것이죠. 즉, 내 컴퓨터의 프로세서가 종료되면 컨테이너는 멈추게 됩니다. 그럼으로 어떠한 파일들이 돌아가게 하려면 내 컴퓨터의 프로세서가 백그라운드에서 돌아가도록 해 놓아야하는 것이죠.

 

tmux에서 detach라는 것에 익숙한 분들은 쉽게 이해할 수 있으실 겁니다. 마찬가지로 docker 또한 -d 라는 옵션이 존재합니다. 고로 docker run -d --name STRING XXX 명령어를 예로 들면

 XXX라는 이미지를 STRING이라는 이름으로 백그라운드에서 실행해라가 됩니다.

 

 

 

컨테이너를 실행하기 위한 명령어는

 

# docker run [option] image

 

위와 같은 명령어를 사용하는데 옵션 항목 중 가장 필수적인 것이 image 항목이 됩니다.

 

이미지라는 것이 쉽게 생각하면 위에서 언급한 "파일들을 모아놓은 어떤 프로그램" 으로 생각하면 됩니다.

 

이러한 파일들을 모아놓은 것이 docker hub/registry이고 검색을 하셔서 자기에게 필요한 것을 받아올 수 있습니다.

 

받아오는 행위를 Pull 이라고 표현하고, 받아온 이미지를 RUN 하면  host에서 컨테이너가 됩니다.

 

나의 컴퓨터에 pull 되어 있는 이미지들을 조회하는 명령어는 아래와 같습니다.

 

# docker images

 

# docker rmi XXX

 

rmi를 통해 XXX라는 이미지도 제거가 가능합니다.

 

다시 컨테이너의 실행에 대해서 적어보겠습니다. 다만 일반적인 컨테이너의 실행이 아닌 본 글의 취지인 오라클을 설치한 후 실행에서 넣게 되는 다양한 옵션들을 설명해 보겠습니다. 왜 이런 옵션들을 붙여서 사용하는 걸까, 아니 왜 이런 옵션을 붙여야하는거지? 라는 의구심이 출발점이였습니다. 다만, 일부 옵션들의 경우 오라클 설치에 국한되지는 않습니다.

 

 

(1) 포트

- 오라클 공식 문서에는 Oracle Net Listner 에 대해 1521 포트 TCP 프로토콜을 사용하도록 권장하고 있습니다. 클라이언트의 데이터베이스 접속 기본 포트가 1521인거죠. 그리고 이러한 설정은 설치시에도 자동으로 반영이 됩니다. 고로 다른 포트를 설정하는 경우 컨테이너의 파일들로 들어가 수정해주어야합니다.

- 속편하게 1521 쓰시기를 권장합니다.

- 포트는 설정하는 방법은 docker run 이후 적는 옵션에 -p 외부포트번호:컨테이너포트번호 가 되겠습니다. 예를 들어보겠습니다. 즉 외부 포트 번호가 80고 내부 포트 번호가 1521이라고 설정해보면, 80은 도커가 설치된 호스트의 포트 80을 컨테이너의 포트 1521에 바인딩(연결) 한다는 의미입니다.

- 쉽게 설명드리면, 외부에서 내 호스트 컴퓨터의 80번 포트로 연결을 하면 독립되어 있는 환경의 컨테이너로 들어간다는 것이죠.

- 앞서 1521 포트를 사용하는 것으로 설치가 되어 있기 때문에 다른 포트 번호를 적게되면 외부에서 접속이 되지 않을 것입니다.

 

(2) 환경변수 설정

- 오라클 설치를 wizard를 통해 다음, 다음 누르고 데이터베이스 식별자 step에 도달하게 되면 설정하는 정보들이 있습니다.

Oracle SID, 전역데이터베이스 이름 등등.. 그러한 값들을 우리는 설정하지 않았습니다. 고로 최초로 run 할때 환경변수를 지정해주어야 합니다. 

- docker run 에서 환경변수의 경우에는 -e로 설정합니다.

(2-1) SID 설정

- DBMS 서버의 인스턴스 이름이 SID 입니다. 하나의 서버 안에 여러개의 인스턴스가 존재할 수 있기때문에 구동 시에 구별해주어야합니다. SID의 경우에는 최초에 오라클을 설치할때 사용하는 환경 변수 이름입니다.

- docker run -e ORACLE_SID=oracle 와 같이 설정할 수 있습니다.

(2-2) PDB 설정

- Portable Database 설정인데요, 마찬가지로 이름을 지어주면 됩니다. 단 SID와 같은 이름으로 설정하시면 안됩니다.

- docker run -e ORACLE_SID=oraclepdb

(2-3) 암호 설정

- docker run -e ORACLE_PWD=oracle

 

(3) 파일의 저장

- 컨테이너의 경우에는 특정 디렉토리에 저장하는 경우, 컨테이너가 삭제되면 같이 날라갑니다.

- 그렇기 때문에 host에 저장해야합니다. 여기서 등장하는 단어가 볼륨입니다. 볼륨은 단일 파일 시스템을 이용하여 접근할 수 있는 저장공간을 의미합니다. 볼륨이라는 말이 조금 아리쏭한데요, 하나의 SSD를 파티션하여 분리한다고 하죠 그리고 또 파일시스템을 지정해주어야 합니다. 물리 그리고 논리적으로 나뉜 공간을 어떻게 배치 및 사용하고 관리하는지 그게 파일시스템이죠. 볼륨은 파티션을 아우르는 물리 저장공간으로 이해하면 됩니다.

- 그러면 컨테이너를 생성할때 볼륨을 같이 붙여주어야하는 설정이 필요합니다.

- 볼륨 설정은 -v [호스트 경로 : 컨테이너 경로] 가 됩니다.

 

저는 여기서 계속 오류가 발생했었습니다. 볼륨 설정을 해주었으나 디렉토리 생성을 못하는 오류로 설치가 안되었습니다.

cannot create file 이런 오류였던걸로 기억합니다.. 6시간 넘게 찾아본 결과.. 2가지 이유 때문에 발생한 오류였습니다.

 

## 최초 도커 이미지 설치시 user 계정 & 파일 권한

https://docs.oracle.com/en/database/oracle/oracle-database/21/deeck/oracle-database-enterprise-edition-installation-guide-docker-containers-oracle-linux.pdf 

- 위 링크에 들어가보시면 설치에 대한 안내들이 나와있습니다. 그리고 uid=54321 이라는 설정이 필요하다고 적혀있습니다.

- 그리고 저장이 되는 파일의 권한을 모두 허용해주어야 합니다. 저는 혹시해서 파일 소유 자체를 새롭게 만든 계정으로 하였습니다.

 

참고하실 분들을 위해 도커에 오라클 21.3.0 버전 설치 step by step 적어둡니다.

먼저 git을 설치해주시고

 

# git clone https://github.com/oracle/docker-images

다운받은 이후 docker-images 로 들어가면 파일들이 보일겁니다.

다음으로는 공식 홈페이지에서 Linux x86-64 ZIP 파일을 받아줍니다. zip 되어 있는체로 파일을 받은 후에 아래 도커가 있는 디렉토리 경로로 저장해줍니다. 반드시 아래 경로여야 합니다.

docker/docker-images/OracleDatabase/SingleInstance/dockerfiles/21.3.0

그리고 이미지를 만들기 위해 아래 명령어를 칩니다. 대문자 C, I 입니다.

#./buildContainerImage.sh -e -v 21.3.0

 

그러면 이미지 생성을 확인해볼 수 있습니다.

# docker images

oracle/database 라는 항목이 보일겁니다. 이제 도커 실행해보겠습니다. 아래 명령어에 앞서 설명한 설정값들이 들어갑니다.

# docker run --name oracledb -p 1521:1521 -e ORACLE_SID=dreamdb -e ORACLE_PDB=dreampdb -e ORACLE_PWD=XXXXX -v /home/dream/oracle_storage:/opt/oracle/oradata oracle/database:21.3.0-ee

 

여기서 주의할점이 띄어쓰기입니다. 매우 엄격하게 지켜져야하니 주의하시기 바랍니다. 설치는 조금 시간이 걸립니다. 

설치가 완료되면 콘솔에 다음과 같이 출력됩니다.

 

누군가의 몇 시간을 아껴주기를 바라며..

댓글