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 설치 등은 추후에 정리할 수 있도록 하겠습니다.