들어가며
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
다운로드 된 파일명은 다음과 같다. 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
반응형
'DevOps > Docker' 카테고리의 다른 글
문제 해결: Error: Error loading shared library /app/node_modules/bcrypt/lib/binding/napi-v3/bcrypt_lib.node: Exec format error (0) | 2023.02.03 |
---|---|
Jenkins로 Spring boot 배포 후 반영 안되는 문제. (0) | 2023.02.02 |
Docker container 정지 & 실행(재실행) 방법 ( stop, start ) (2) | 2022.11.23 |
몽고디비(MongoDB) docker-compose 설치 및 데이터 CRUD 예제 (0) | 2022.01.28 |
Docker - MySql 8 개발환경, docker-compose로 간단하게 구성하기 (0) | 2022.01.05 |