| 드라이버 | 설명 |
|---|---|
| bridge | 도커 기본 네트워크 드라이버로, 동일 호스트 내에서 격리된 네트워크 환경을 제공 |
| host | 컨테이너가 호스트의 네트워크 스택을 직접 사용 |
| overlay | 여러 도커 호스트에 걸쳐 있는 컨테이너 간 통신을 지원 |
| macvlan | MAC 주소 기반 가상 네트워크 인터페이스를 생성해 컨테이너에 할당 |
| 명령어 | 설명 |
|---|---|
docker network ls | 네트워크 목록 표시 |
docker network inspect my_network | 특정 네트워크의 세부 정보 확인 |
docker network create my_network | 새로운 네트워크 생성 |
docker network connect my_network my_container | 컨테이너를 네트워크에 연결 |
docker network disconnect my_network my_container | 컨테이너를 네트워크에서 분리 |
docker network rm my_network | 네트워크 삭제 |
docker network prune | 사용하지 않는 네트워크 모두 삭제 |
docker network create --driver bridge my_bridge_network
docker network create --driver overlay my_overlay_network
docker run -d -it --name oracle11g -p 1521:1521 --network mynetwork jinkyoungheo/oracle11g
docker run -d -it --name tomcat10 -p 8888:8080 --network mynetwork tomcat:10
docker network connect mynetwork oracle11g
docker network connect mynetwork tomcat10
docker container inspect oracle11g
docker container inspect tomcat10
docker network create mynetwork
🔎 역할: mynetwork은 Tomcat과 Oracle 컨테이너가 서로 IP로 접근할 수 있게 해주는 가상 연결망입니다.docker run -d -it --name oracle11g -p 1521:1521 --network mynetwork jinkyoungheo/oracle11g
🔎 역할: 내부적으로 SID=xe, 포트 1521으로 Oracle DB가 열리고, Tomcat에서 JDBC로 접근 가능해집니다.docker run -d -it --name tomcat10 -p 8888:8080 --network mynetwork tomcat:10
🔎 역할: index.jsp 파일을 웹으로 서비스하는 역할. JSP 실행 시 Oracle JDBC를 통해 DB에 접속합니다.docker network connect mynetwork oracle11g
docker network connect mynetwork tomcat10
index.jsp)webapps/ROOT/ 또는 webapps/myapp/ 디렉토리에 JSP 파일을 배치했습니다.<%@ page contentType="text/html;charset=utf-8" %>
<%@ page import="java.sql.*" %>
<!DOCTYPE html>
<html>
<head>
<title>Index</title>
</head>
<body>
<h1>Welcome...</h1>
<%
Connection con = null;
try {
out.println("1");
Class.forName("oracle.jdbc.OracleDriver");
out.println("2");
con = DriverManager.getConnection(
"jdbc:oracle:thin:@192.168.0.32:1521:xe", // Oracle 컨테이너 IP 또는 호스트명
"hr", // 아이디
"hr" // 비밀번호
);
out.println("OK");
} catch (Exception e) {
out.println(e.getMessage());
} finally {
if (con != null) {
try { con.close(); } catch (Exception e) { }
}
}
%>
</body>
</html>
🔎 역할:클라이언트가 Tomcat에 접속하면 JSP 실행
내부적으로 Oracle DB에 연결 시도 → 결과 반환
오류 시 ORA-01882 등 출력
setenv.sh)타임존 관련 오류를 해결하기 위해 Tomcat에 환경 변수를 추가했습니다.
# setenv.sh (경로: /usr/local/tomcat/bin/setenv.sh)
#!/bin/bash
export CATALINA_OPTS="$CATALINA_OPTS -Dfile.encoding=UTF8 -Duser.timezone=Asia/Seoul"
복사 명령어:
docker cp ./setenv.sh tomcat10:/usr/local/tomcat/bin/setenv.sh
docker restart tomcat10
🔎 역할:
JVM 타임존 설정 변경 → Oracle이 인식 가능한 Asia/Seoul 사용
ORA-01882 오류 방지
브라우저에서 http://localhost:8888/index.jsp 요청
Tomcat 컨테이너 → JSP 실행
JSP 내부에서 Oracle DB 컨테이너로 JDBC 접속 시도
Oracle 응답 → JSP에서 결과 출력
| 유형 | 설명 |
|---|---|
| ClusterIP | 클러스터 내부 접근 전용 |
| NodePort | 노드의 지정 포트를 통해 외부 접근 가능 |
| LoadBalancer | 클라우드 기반 외부 로드 밸런서 사용 |
| ExternalName | 외부 CNAME을 통해 외부 서비스 접근 지원 |
{서비스명}.{네임스페이스}.svc.cluster.local 형식쿠버네티스(Kubernetes)에서 애플리케이션을 배포, 업데이트, 유지하는 데 사용되는 리소스입니다.
디플로이먼트는 쿠버네티스의 상위 리소스로서, 애플리케이션을 효율적이고 안정적으로 배포하기 위한 기능을 제공합니다.
레플리카셋은 디플로이먼트의 하위 구성 요소로서, 애플리케이션이 항상 지정된 수의 파드를 유지하도록 하는 역할을 합니다.
"app: myapp"이라는 레이블을 가진 파드들만 제어| 구성 요소 | 역할 |
|---|---|
| 디플로이먼트 | 전체 애플리케이션의 배포 및 업데이트 제어 |
| 레플리카셋 | 원하는 수의 파드를 유지하는 컨트롤러 |
| 파드 | 실제로 컨테이너를 실행하는 최소 단위 |
apiVersion: v1 # 사용할 API 버전 (Pod은 core API 그룹의 v1)
kind: Pod # 리소스의 종류 (Pod)
metadata:
name: my-nginx-pod # 파드의 이름
spec:
containers: # 파드 안에 포함된 컨테이너 목록
- name: nginx-container # 컨테이너 이름
image: nginx:latest # 사용할 도커 이미지
ports:
- containerPort: 80 # 컨테이너가 사용하는 포트
apiVersion: apps/v1 # ReplicaSet은 apps API 그룹을 사용
kind: ReplicaSet # 리소스 종류 (ReplicaSet)
metadata:
name: nginx-replicaset # ReplicaSet 이름
spec:
replicas: 3 # 파드를 몇 개 유지할지 설정
selector: # 파드를 선택하는 기준
matchLabels:
app: nginx # app=nginx 라벨을 가진 파드를 관리함
template: # 생성할 파드의 템플릿
metadata:
labels:
app: nginx # 파드에 부여할 라벨 (selector와 일치해야 함)
spec:
containers:
- name: nginx # 컨테이너 이름
image: nginx:latest # 컨테이너에 사용할 이미지
ports:
- containerPort: 80 # 컨테이너가 사용할 포트
apiVersion: apps/v1 # Deployment은 apps API 그룹 사용
kind: Deployment # 리소스 종류 (Deployment)
metadata:
name: nginx-deployment # Deployment 이름
spec:
replicas: 2 # 실행할 파드 개수
selector:
matchLabels:
app: nginx # 관리할 파드의 라벨
template: # 파드 정의 템플릿
metadata:
labels:
app: nginx # 파드 라벨 (selector와 매칭)
spec:
containers:
- name: nginx # 컨테이너 이름
image: nginx:1.21 # 사용할 nginx 이미지
ports:
- containerPort: 80 # 컨테이너 포트
apiVersion: v1 # Service는 core API 그룹 사용
kind: Service # 리소스 종류 (Service)
metadata:
name: nginx-service # 서비스 이름
spec:
selector:
app: nginx # 연결할 파드의 라벨
ports:
- protocol: TCP # 통신 프로토콜
port: 80 # 서비스가 노출하는 포트
targetPort: 80 # 파드 내부 컨테이너가 사용하는 포트
type: ClusterIP # 클러스터 내부에서만 접근 가능한 기본 타입
apiVersion: v1 # ConfigMap도 core API 그룹 사용
kind: ConfigMap # 리소스 종류 (ConfigMap)
metadata:
name: app-config # ConfigMap 이름
data: # key-value 형태의 설정 데이터
DATABASE_URL: "mysql://..." # 예시 데이터베이스 접속 주소
API_KEY: "abc123xyz456" # 예시 API 키
apiVersion: v1 # Pod 정의
kind: Pod
metadata:
name: app-pod # 파드 이름
spec:
containers:
- name: app-container # 컨테이너 이름
image: my-app-image # 사용자 앱 이미지
env: # 환경변수를 정의하는 섹션
- name: DATABASE_URL # 환경변수 이름
valueFrom: # 외부 ConfigMap에서 값을 가져옴
configMapKeyRef:
name: app-config # 사용할 ConfigMap 이름
key: DATABASE_URL # 가져올 key 값
- name: API_KEY
valueFrom:
configMapKeyRef:
name: app-config
key: API_KEY