본문 바로가기
DevOps/Docker

Docker 오라클 이미지 생성 및 실행 21c ( 공식 github 제공 sh 활용 )

by 맑은안개 2022. 5. 31.

docker - oracle 21c

들어가며

Oracle에서 제공하는 Dockerfile, sh 프로그램을 사용하여 오라클에서 제공하는 설치바이너리를 이미지로 만드는 방법을 알아보도록 한다.

1.실행환경

  • Windows 10
  • Git bash
  • Docker

2.준비사항

  • 오라클DB 설치바이너리 다운로드를 위해 Oracle 계정필요

3.Dockerfile download

설치되는 위치는 D:\Project\docker로 설정하였다.

PS D:\Project\docker> git clone https://github.com/oracle/docker-images
Cloning into 'docker-images'...
remote: Enumerating objects: 15633, done.
remote: Counting objects: 100% (88/88), done.
remote: Compressing objects: 100% (71/71), done.
remote: Total 15633 (delta 26), reused 49 (delta 15), pack-reused 15545Receiving objects: 100% (15633/15633), 5.15 MiB | 10.29 MiB/s
Resolving deltas: 100% (9210/9210), done.
  • 다운로드 후 D:\Project\docker\docker-images로 이동하면 오라클에서 제공하는 수 많은 제품군들의 dockerfile을 볼 수 있다.
  • OracleDatabase\SingleInstance\dockerfiles로 이동하면 buildContainerImage.sh파일을 확인할 수 있다. ( 설치된 Git bash를 사용하여 해당 위치로 이동한다. )
    |✔ buildcontainerImage.sh은 오라클 설치바이너리를 사용하여 Docker 이미지를 간단하게 생성할 수 있게 도와주는 헬퍼 프로그램이다.
  • dockerfiles폴더를 확인해보면 다음과 같이 오라클 버전 별 디렉토리가 생성되어 있음을 확인할 수 있다.
PS D:\Project\docker\docker-images\OracleDatabase\SingleInstance\dockerfiles> tree
폴더 PATH의 목록입니다.
볼륨 일련 번호는 606A-EE0F입니다.
D:.
├─11.2.0.2
├─12.1.0.2
├─12.2.0.1
├─18.3.0
├─18.4.0
├─19.3.0
└─21.3.0
  • 여기서는 21.3.0 버전의 오라클 Docker 이미지를 생성하도록 한다.

4.오라클 설치파일 다운로드

아래 사이트로 접속하여 21c Linux x86-64 zip 버전을 다운받는다. ( ❗ 다운로드후 압축을 풀지 않는다. )

https://www.oracle.com/database/technologies/oracle-database-software-downloads.html

21c Linux x86-64 download

다운로드 된 파일명은 다음과 같다. LINUX.X64_213000_db_home.zip 여기서 파일명이 중요한 이유는 Dockerfile에 파일명이 상수로 지정되어 있기 때문이다.

ARG INSTALL_FILE_1="LINUX.X64_213000_db_home.zip"

다운로드 된 파일을 D:\Project\docker\docker-images\OracleDatabase\SingleInstance\dockerfiles\21.3.0로 이동한다.

5.buildcontainerImage.sh 실행

설치바이너리를 해당 버전의 디렉토리에 넣으면, 이미지를 만들기 위한 준비는 모두 끝이난다.

sh 프로그램을 실행시켜 도커 이미지를 만든다.

$ ./buildContainerImage.sh -e -v 21.3.0
WARNING: No blkio throttle.read_bps_device support
WARNING: No blkio throttle.write_bps_device support
WARNING: No blkio throttle.read_iops_device support
WARNING: No blkio throttle.write_iops_device support
Checking Docker version.
Checking if required packages are present and valid...
LINUX.X64_213000_db_home.zip: OK
==========================
...중략...
Building image 'oracle/database:21.3.0-ee' ...
[+] Building 346.3s (16/16) FINISHED
 => [internal] load build definition from Dockerfile             0.1s 
...중략...
 => exporting to image    
  • oraclelinux이미지를 베이스로 만들어지는데, 용량이 7GB가 넘으므로 다운로드에 수 분이 소요된다.

6.docker images 확인

$ docker images
REPOSITORY        TAG         IMAGE ID       CREATED         SIZE
oracle/database   21.3.0-ee   db82de8540ca   8 minutes ago   8.07GB

7.docker run

testuser@DESKTOP-D2AU7KF MINGW32 /d/Project/docker/bookstore
$ docker run --name bookstoredb \
> -p 1521:1521 \
> -e ORACLE_SID=book \
> -e ORACLE_PDB=book \
> -e ORACLE_PWD=book1234 \
> -v /oradata:/opt/oracle/oradata \
> oracle/database:21.3.0-ee
  • 데이터 영속화를 위해 -v 옵션으로 마운트될 디렉토리를 설정한다. ( 별도의 프로젝트 디렉토리를 만들어 진행 )
  • 설치에 수 분이 소요.
  • -e 환경변수는 다음을 참고 한다.
Parameters:
   --name:        The name of the container (default: auto generated).
   -p:            The port mapping of the host port to the container port.
                  Two ports are exposed: 1521 (Oracle Listener), 5500 (OEM Express).
   -e ORACLE_SID: The Oracle Database SID that should be used (default: ORCLCDB).
   -e ORACLE_PDB: The Oracle Database PDB name that should be used (default: ORCLPDB1).
   -e ORACLE_PWD: The Oracle Database SYS, SYSTEM and PDB_ADMIN password (default: auto generated).
   -e INIT_SGA_SIZE:
                  The total memory in MB that should be used for all SGA components (optional).
                  Supported 19.3 onwards.
   -e INIT_PGA_SIZE:
                  The target aggregate PGA memory in MB that should be used for all server processes attached to the instance (optional).
                  Supported 19.3 onwards.
   -e AUTO_MEM_CALCULATION:
                  To enable auto calculation of the DBCA total memory limit during the database creation, based on
                  the available memory of the container, which can be constrained using the `docker run --memory`
                  option. If set to 'false', the total memory will be set as 2GB (default: true).
                  Note that this parameter is not taken into account if the `-e INIT_SGA_SIZE` or `-e INIT_PGA_SIZE`
                  are set.
                  Supported 19.3 onwards.
   -e ORACLE_EDITION:
                  The Oracle Database Edition (enterprise/standard).
                  Supported 19.3 onwards.
   -e ORACLE_CHARACTERSET:
                  The character set to use when creating the database (default: AL32UTF8).
   -e ENABLE_ARCHIVELOG:
                  To enable archive log mode when creating the database (default: false).
                  Supported 19.3 onwards.
   -v /opt/oracle/oradata
                  The data volume to use for the database.
                  Has to be writable by the Unix "oracle" (uid: 54321) user inside the container!
                  If omitted the database will not be persisted over container recreation.
   -v /opt/oracle/scripts/startup | /docker-entrypoint-initdb.d/startup
                  Optional: A volume with custom scripts to be run after database startup.
                  For further details see the "Running scripts after setup and on startup" section below.
   -v /opt/oracle/scripts/setup | /docker-entrypoint-initdb.d/setup
                  Optional: A volume with custom scripts to be run after database setup.
                  For further details see the "Running scripts after setup and on startup" section below.
#########################
DATABASE IS READY TO USE!
#########################
  • 다음메세지가 콘솔에 출력되면 완료.

8.컨테이너 접속, SYSDBA 로그인

PS D:\Project\docker\bookstore> docker ps
CONTAINER ID   IMAGE                       COMMAND                  CREATED          STATUS                    PORTS                    NAMES
fb1c632750b5   oracle/database:21.3.0-ee   "/bin/sh -c 'exec $O…"   33 minutes ago   Up 33 minutes (healthy)   0.0.0.0:1521->1521/tcp   bookstoredb
PS D:\Project\docker\bookstore> docker exec -it bookstoredb /bin/bash
bash-4.2$
  • docker ps 명령으로 이미지가 정상 기동되었는지 확인한다.
  • docker exec -it 명령으로 컨테이너에 접속한다.
  • git bash에서 오류나는 경우 powershell로 실행
bash-4.2$ sqlplus sys/<password> as sysdba

SQL*Plus: Release 21.0.0.0.0 - Production on Tue May 31 08:35:58 2022
Version 21.3.0.0.0

Copyright (c) 1982, 2021, Oracle.  All rights reserved.


Connected to:
Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0

SQL>

SQL> select 'hello world' from dual;

'HELLOWORLD
-----------
hello world

9.DBeaver 접속 테스트

  • 패스워드는 docker run 실행시 -e 패스워드 환경변수에 입력 한 값을 넣는다.

Reference

https://eherrera.net/using-oracle-docker-container/
https://github.com/oracle/docker-images/blob/main/OracleDatabase/SingleInstance/README.md
https://hub.docker.com/_/oraclelinux

반응형