본문 바로가기
카테고리 없음

[docker] Oracle19c 설치

by 쿡노트 2024. 7. 11.
반응형

Docker로 Oracle19c 설치를 해보고, 정리한 내역을 작성하였습니다.
oracle19c 이미지를 먼저 build 하고, oracle19c 설치를 헀습니다. (docker compose 활용)
(oracle19c 이미지를 먼저 build 하는 이유는 docker hub에 Oracle 사에서 제공하는 공식 이미지가 현재로선 없다. 
docker hub 사용자들이 올려놓은 이미지는 존재하지만 직접 oracle에서 제공하는 docker file로 이미지를 build 해보기로 함) 

oracle19c 설치 관련 하여 아래 블로그 글을 참조하여, 이미지 build 및 설치를 수행하였고, 설치 수행 하면서 겪은 내용을 덧 붙였습니다.
https://growupcoding.tistory.com/18

1. Oracle Docker image 다운로드 (git clone하면 'docker-images' 디렉터리 다운로드하여짐)

참조 : Oracle의 Docker images
This repository contains Dockerfiles and samples to build Docker images for Oracle commercial products and Oracle sponsored open source projects.

 

oracle19c 설치를 위한 별도의 디렉터리를 생성 한 후 git clone 한다.

$ mkdir oracle19c
$ cd oracle19c
$ git clone https://github.com/oracle/docker-images.git

[root@oracle_test oracle19c]# git clone https://github.com/oracle/docker-images.git
Cloning into 'docker-images'...
remote: Enumerating objects: 17905, done.
remote: Counting objects: 100% (2438/2438), done.
remote: Compressing objects: 100% (626/626), done.
remote: Total 17905 (delta 1969), reused 2057 (delta 1790), pack-reused 15467
Receiving objects: 100% (17905/17905), 15.27 MiB | 9.86 MiB/s, done.
Resolving deltas: 100% (10528/10528), done.
[root@oracle_test oracle19c]# ll
합계 4
drwxr-xr-x. 35 root root 4096  7월  8 17:02 docker-images
[root@oracle_test oracle19c]# du -hs
31M .

2. Oracle 설치를 위한 바이너리 파일 다운로드하기

아래 오라클 사이트로 접속해서 오라클 계정으로 로그인 후 오라클 19c 바이너리(LINUX.ZSERIES64_193000_db_home.zip) 다운로드합니다. (약 2.8GB 파일 다운 docker-images와 같은 디렉터리에 옮김)
https://www.oracle.com/kr/database/technologies/oracle19c-linux-downloads.html

3. Oracle19c 설치

1번과 2번을 수행하면, oracle19c 디렉터리에 아래와 같이 docker image, oracle19c 바이너리 파일이 존재한다.

[root@oracle_test oracle19c]# ll
drwxr-xr-x. 35 oracle oinstall       4096 Jul  8 17:14 docker-images
-rw-r--r--.  1 oracle oinstall 3059705302 Jul  8 17:12 LINUX.X64_193000_db_home.zip

3.1 oracle19c 바이너리 파일 복사

[root@oracle_test oracle19c]# cp LINUX.X64_193000_db_home.zip ./docker-images/OracleDatabase/SingleInstance/dockerfiles/19.3.0

3.2 Docker image build

$ cd docker-images/OracleDatabase/SingleInstance/dockerfiles
$ ./buildContainerImage.sh -e -v 19.3.0

[root@oracle_test oracle19c]# cd docker-images/OracleDatabase/SingleInstance/dockerfiles
[root@oracle_test dockerfiles]# ./buildContainerImage.sh -e -v 19.3.0
...
  Oracle Database container image for 'ee' version 19.3.0 is ready to be extended: 
    
    --> oracle/database:19.3.0-ee

  Build completed in 221 seconds.
  
#buildContainerImage.sh File 권한 오류 시 실행 권한 부여 (root 기준)
[root@oracle_test dockerfiles]# ./buildContainerImage.sh -e -v 19.3.0
-bash: ./buildContainerImage.sh: Permission denied
[root@oracle_test dockerfiles]# chmod 744 buildContainerImage.sh

3.3 Docker 이미지 확인

[root@oracle_test dockerfiles]# docker images
REPOSITORY        TAG         IMAGE ID       CREATED         SIZE
oracle/database   19.3.0-ee   0feac9109d86   3 minutes ago   6.54GB

 

3.4 디렉터리 생성 및 소유 권한 변경

컨테이너에서 oracle data file이 저장될 로컬(Host) 디렉터리를 생성한다.

Oracle Datafile 저장 로컬 디렉터리 : ora19_data

Oracle19c 컨테이너가 실행되면 컨테이너 내의 Oracle User default UID가 54321 임으로 로컬(Host) 디렉터리인 ora19_data 소유 권한을 변경해둔다. 
이렇게 하는 이유는 컨테이너 실행 시 권한이 불충분하여, Oracle Database가 정상적으로 실행되지 않는다. 

docker log 에러 메시지 : 'Cannot create directory "/opt/oracle/oradata/ORCL".'

(또는 chmod 777 ora19_data 디렉터리 권한을 변경할 수 있는데, 보안상 권장하지 않는다.)

[root@oracle_test oracle19c]# mkdir -p /data/oracle19c/oradata/ora19_data
[root@oracle_test oracle19c]# ll
drwxr-xr-x. 35 root root      4096 Jul  8 17:14 docker-images
-rw-r--r--.  1 root root 408479808 Jul  8 17:17 LINUX.X64_193000_db_home.zip
drwxr-xr-x.  3 root root        24 Jul  8 17:16 oradata
[root@oracle_test oracle19c]# cd /data/oracle19c/oradata
#디렉터리 소유 권한 변경
[root@oracle_test oradata]# chown 54321:54321 ora19_data
[root@oracle_test oradata]# ll
drwxr-xr-x. 2 54321 54321 6 Jul  9 15:44 ora19_data

3.5 Docker 컨테이너 실행

Docker image build 후 docker run 실행하면, oracle19c 컨테이너가 실행된다.

 

Syntax
docker run --privileged -d --name <container name> \
-e <env> \
-p HostPort:ContainerPort \
-v HostPath:ContainerPath \
Image:Tag

참조
privileged: 컨테이너의 권한 확대, 모든 Linux 커널기능 활성화, 모든 호스트 장치에 대한 액세스 권한 부여
-d : deamon 실행 (백그라운드)
-p (port): 1521 (Orace 기본 port) Host:Container , 5500 (Oracle Manager Database 웹 접속 port)

 

docker run 시 env 파라미터 또는 docker compose 환경 파일 작성 참고

ORACLE_PWD : The Oracle Database SYS, SYSTEM and PDBADMIN password (default: auto generated).
ORACLE_SID : The Oracle Database SID that should be used (default: ORCLCDB).
https://github.com/oracle/docker-images/blob/main/OracleDatabase/SingleInstance/README.md

[root@oracle_test oracle19c]# cd /data/orac19c
[root@oracle_test oracle19c]# docker run --privileged -d --name ora19c \
-e ORACLE_PWD=oracle \
-e ORACLE_SID=orcl \
-p 1521:1521 -p 5500:5500 \
-v ./oradata/ora19_data:/opt/oracle/oradata \
oracle/database:19.3.0-ee

#docker run 후 log 확인
[root@oracle_test oracle19c]# docker logs ora19c
...
Prepare for db operation
8% complete
Copying database files
...
100% complete
Database creation complete. For details check the logfiles at:
...
SQL> 
System altered.
...
Version 19.3.0.0.0
The Oracle base remains unchanged with value /opt/oracle
The Oracle base remains unchanged with value /opt/oracle
#########################
DATABASE IS READY TO USE!
#########################

 

Docker 프로세스  확인

[root@oracle_test oracle19c]# docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED        STATUS                            PORTS                                                                                  NAMES
73a8c9025a7b   oracle/database:19.3.0-ee   "/bin/bash -c 'exec …"   42 hours ago   Up 2 seconds (health: starting)   0.0.0.0:1521->1521/tcp, :::1521->1521/tcp, 0.0.0.0:5500->5500/tcp, :::5500->5500/tcp   ora19c

4. Oracle 접속

4.1 컨테이너 접속 후 Oracle DB 접속

[root@oracle_test oracle19c]# docker exec -it ora19c /bin/bash
bash-4.2$ sqlplus sys/oracle as sysdba

 

4.2 Host에서 Oracle DB접속 (ora19c : Container Name)

[root@oracle_test data]$ docker exec -it ora19c sqlplus sys/oracle@//localhost:1521/ORCL as sysdba

 

이상, Docker로 Oracle19c 설치 및 실행을 하였습니다. 정리 하자면, Docker hub에 build된 공식 이미지가 없어서, Oracle에서 제공하는 Docker File(docker-images)로 image build부터, Oracle19c 컨테이너를 실행 하였습니다. 이하 내용은 Oracle19c 설치 및 실행을 docker run이 아닌 docker compose로 실행한 내용입니다.

Docker 컨테이너 실행 (docker compose)

1. 디렉터리 생성 및 소유 권한 변경 (3.4 디렉터리 생성 및 소유 권한 변경 내용과 동일)

2. 환경 파일 생성

[root@oracle_test oracle19c]# vi ora19env
[root@oracle_test oracle19c]# cat ora19env 
ORACLE_PWD=oracle
ORACLE_SID=orcl

3. docker compose 작성

[root@oracle_test oracle19c]# vi docker-compose.yml
[root@oracle_test oracle19c]# cat docker-compose.yml 
version: '3.8'
services:
  ora19c:
    container_name: ora19c
    env_file:
      - ora19env
    image: oracle/database:19.3.0-ee
    ports:
      - 1521:1521
      - 5500:5500
    volumes:
      - ./oradata/ora19_data:/opt/oracle/oradata
    privileged: true

4. docker compose 실행 (-d 옵션 deamon 실행)

docker compose up으로 Container를 실행하면, 몇 초 후에 Container는 Started 된다.
docker 로그를 살펴보면, 아직 Oracle Database를 실행하기 위한 작업이 진행 중이다. 2 Core 기준에 약 10분 정도 소요되었다.

$ docker compose up -d 또는 $ docker compose -f <yml 파일명> up -d

[root@oracle_test oracle19c]# cd /data/orac19c
[root@oracle_test oracle19c]# ll
total 2988008
-rw-r--r--.  1 oracle oinstall        278 Jul  9 14:49 docker-compose.yml
drwxr-xr-x. 35 oracle oinstall       4096 Jul  8 17:14 docker-images
-rw-r--r--.  1 oracle oinstall 3059705302 Jul  8 17:12 LINUX.X64_193000_db_home.zip
-rw-r--r--.  1 oracle oinstall         34 Jul  8 17:19 ora19env
drwxr-xr-x.  4 oracle oinstall         47 Jul 10 17:07 oradata

[root@oracle_test oracle19c]# docker compose up -d
[+] Running 2/2
 ✔ Network oracle19c_default  Created                                                                                                                                                                                                                                    0.2s 
 ✔ Container ora19c           Started


Docker 컨테이너 접속 및 Oracle DB 접속은 위에 기재하였습니다. 컨테이너 내부에서 Oracle 환경 설정이나, 컨테이너 내부의 vi 설치 등은  추후에 정리할 수 있도록 하겠습니다.

반응형