이 글은 2022년 11월 기준 기록입니다.
준비물은 다섯 가지다
시작하기 전에 다음이 갖춰져 있어야 합니다.
- Kubernetes Cluster
- kubectl
- Helm
- Docker
- Git
이미지는 오라클이 제공하는 Dockerfile로 직접 빌드한다
오라클은 공식 GitHub 저장소 oracle/docker-images에 Dockerfile을 제공합니다. 먼저 이 저장소를 받아 옵니다.
$ mkdir oracle
$ cd oracle
$ git clone https://github.com/oracle/docker-images.git
빌드에 필요한 설치 파일은 저장소에 들어 있지 않습니다. 이미지를 만들고자 하는 Dockerfile 위치에 들어가서, 각 버전에 맞는 설치 파일(.zip)을 Oracle Database Software Downloads에서 내려받아 그 자리에 둡니다.
그다음 해당 위치에서 이미지 빌드를 실행합니다. 방법은 두 가지입니다.
# 직접 docker 명령으로 이미지를 빌드하는 경우
$ cd OracleDatabase/SingleInstance/dockerfiles/21.3.0
$ docker build -t oracle/database:21.3.0-ee .
# 오라클에서 제공하는 buildContainerImage.sh를 이용하는 경우
$ cd OracleDatabase/SingleInstance/dockerfiles
$ ./buildContainerImage.sh -v 21.3.0 -e
Helm 차트는 템플릿 하나에 세 오브젝트를 담는다
차트 디렉터리 oracle-db-21c는 templates 폴더 아래에 oradb.yaml 하나를 두고, 그 옆에 Chart.yaml과 values.yaml을 둔 구성입니다.
oradb.yaml에는 StatefulSet·Service·ConfigMap 세 오브젝트가 함께 들어갑니다.
apiVersion: apps/v1
kind: StatefulSet
metadata:
name: {{ .Values.name }}
spec:
serviceName: {{ .Values.name }}
replicas: 1
selector:
matchLabels:
app: {{ .Values.name }}
template:
metadata:
labels:
app: {{ .Values.name }}
spec:
containers:
- name: {{ .Values.name }}
image: oracle/database:21.3.0-ee
env:
- name: ORACLE_SID
value: "ORCL"
- name: ORACLE_EDITION
value: "enterprise"
resources:
requests:
memory: "2Gi"
limits:
memory: "2Gi"
ports:
- containerPort: 1521
- containerPort: 5500
volumeMounts:
- name: oradb
mountPath: /opt/oracle/oradata
- name: {{ .Values.name }}-init
mountPath: /opt/oracle/scripts/startup
volumes:
- name: {{ .Values.name }}-init
configMap:
name: {{ .Values.name }}-init-config
volumeClaimTemplates:
- metadata:
name: oradb
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 15Gi
---
apiVersion: v1
kind: Service
metadata:
name: {{ .Values.name }}
labels:
app: {{ .Values.name }}
spec:
selector:
app: {{ .Values.name }}
type: NodePort
ports:
- name: ora-listener
port: 1521
protocol: TCP
nodePort: 31521
- name: ora-xmldb
port: 5500
protocol: TCP
---
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ .Values.name }}-init-config
data:
init.sql: |
alter session set "_ORACLE_SCRIPT"=true;
CREATE USER 'username' IDENTIFIED BY 'password';
GRANT CONNECT, RESOURCE, DBA TO 'username';
ConfigMap으로 넣은 init.sql은 StatefulSet에서 /opt/oracle/scripts/startup에 마운트되어 기동 시점에 실행됩니다.
_ORACLE_SCRIPT를 켜야 C##이 붙지 않은 계정을 만들 수 있다
init.sql 첫 줄이 있는 이유가 있습니다. Oracle DB 최근 버전부터는 사용자명에 C##을 붙여야만 계정 생성이 가능합니다(예: C##testuser). _ORACLE_SCRIPT = true 설정을 하면 C##으로 시작하지 않는 계정도 생성할 수 있습니다.
Chart.yaml과 values.yaml이 나머지를 채운다
apiVersion: v1
appVersion: "1.0"
description: Oracle 21c EE DB Test Helm Chart
name: oracle-db-21c-ee
version: 0.1.0
values.yaml에는 템플릿 곳곳에서 {{ .Values.name }}으로 참조하던 값 하나만 있으면 됩니다.
name: "oracle-db"
배포는 한 줄이다
$ helm install oracle-db oracle-db-21c/ 'IT·테크 > 인프라' 카테고리의 다른 글
| 이더넷 — LAN을 움직이는 프레임 포맷과 허브·스위치·라우터의 차이 (1) | 2026.08.03 |
|---|---|
| 네트워크 개론 — LAN·WAN부터 OSI 7계층과 TCP/IP까지 (0) | 2026.08.02 |
| kubeconfig로 여러 쿠버네티스 클러스터 오가기와 사설 레지스트리 사용 (0) | 2026.07.31 |
| 쿠버네티스 오브젝트 — 의도를 적으면 클러스터가 그 상태를 유지한다 (0) | 2026.07.30 |
| 컨테이너 오케스트레이션과 쿠버네티스 — Docker와 무엇이 다른가 (0) | 2026.07.29 |