9:22 학원 도착
<오전 수업 잠깐>
AWS 키고 yml 파일 작성했던것 보는 중.
docker compose up -d라고 입력하면 컨테이너 3개가 한꺼번에 만들어지고 시작이 되는 형태
본인ip:80으로 접속하면 DockerTest 스프링 프로젝트가 동작하고 심지어 DB에 있는 내용까지도 불러온다.
오늘 하는것
compose2 폴더에 어제 했던것중에 oracle만 설정하여 열어보기
기존에 돌리던 compose의 oracle-xe가 돌고 있으면 정지하고 해야 한다.
#docker-compose.yml
version:'3.8'
services: #run all services
oracle-xe2: #컨테이너 이름
image: my-oracle-xe:final
container_name: oracle-xe2
ports:
- "1521:1521" #호스트의 1521 포트를 컴포즈의 1521 포트로 연결하겠다
- "8080:8080"
shm_size: 1g
volumes:
- ./ora-data/oradata:/u01/app/oracle/oradata
- ./ora-data/fast_recovery_area:/u01/app/oracle/fast_recovery_area
#./는 현재 폴더(compose2)를 가리킴
networks:
- my-net
위에 처럼 ./ 경로로 바꿔서 만들면 compose2 폴더 하위에 ora-data 폴더가 만들어진다.
근데 볼륨을 바로 연결하려니까 오류가 났다!
그래서 샘이 어제 보내줬던거로 해야 한다는 이야기를 다시 하심.
아래꺼로 하면 오류가 안난다.↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓
# 아래의 테스트는 /home/ec2-user/oracle 폴더를 만들어 놓고 해당 폴더 안에서 작업하는 예제입니다.
# 경로가 다르면 아래의 코드에서 경로를 수정해야 합니다.
# 업로드한 오라클tar 파일 이미지 로딩
docker load -i oracle-image-prepared.tar
# 이미지확인
docker images
# container 실행
docker run -d \
--name oracle-xe \
-p 1521:1521 -p 8080:8080 \
-e ORACLE_PASSWORD=oracle \
--shm-size=1g \
my-oracle-xe:final
# container 로 부터 복사할 파일을 저장할 폴더 미리 생성
mkdir -p /home/ec2-user/oracle/ora-data
# container 로 부터 복사
docker cp oracle-xe:/u01/app/oracle/oradata /home/ec2-user/oracle/ora-data/
docker cp oracle-xe:/u01/app/oracle/fast_recovery_area /home/ec2-user/oracle/ora-data/
# oracle container 가 사용할 폴더의 소유자 변경
sudo chown -R 1000:1000 /home/ec2-user/oracle/ora-data/oradata
sudo chown -R 1000:1000 /home/ec2-user/oracle/ora-data/fast_recovery_area
# oracle container 삭제
docker rm -f oracle-xe
# 외부 volumn을 사용할 oracle container 다시 생성
# spring-app 컨테이너와 연동을 위해서 network 설정도 한다.
docker run -d --name oracle-xe \
--network my-net
-p 1521:1521 \
-p 8080:8080 \
--shm-size=1g \
-v /home/ec2-user/oracle/ora-data/oradata:/u01/app/oracle/oradata \
-v /home/ec2-user/oracle/ora-data/fast_recovery_area:/u01/app/oracle/fast_recovery_area \
my-oracle-xe:final
# oracle container 로그 확인해서 아래의 메세지가 있는지 (DB 가 재대로 준비 되었는지) 확인
docker logs oracle-xe
# /nginx-conf/default.conf 파일의 내용
server {
listen 80;
server_name _;
location / {
proxy_pass http://spring-app:9000/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
.sh : shell script file
#!/bin/bash 라고 선언하면 shell에서 사용하는 if문 for 문도 있다.(shell programming)
shell script로 우리가 위에서 수동으로 했던 작업을 다 자동으로 하는걸 월요일에 더 자세히 해주실거라 함.
아래는 start.sh파일이고 ./start.sh 명령어로 사용할 수 있음
#!/bin/bash
# ../oracle/ora-data 폴더가 없을 경우에만 실행
if [ ! -d "../oracle/ora-data" ]; then
echo "../oracle/ora-data 폴더가 없어서 Oracle 컨테이너를 시작하고 복사를 시작합니다."
# 1. oracle-tmp 컨테이너 실행
docker compose up -d oracle-tmp
# 2. Oracle ready 될 때까지 대기
echo "Waiting for Oracle to be ready..."
for i in {1..60}; do
if docker logs oracle-tmp 2>&1 | grep -q "DATABASE IS READY TO USE"; then
echo "Oracle is ready!"
break
fi
sleep 5
done
# 3. 복사할 폴더 미리 생성
mkdir -p ../oracle/ora-data
# 4. container로부터 데이터 복사
docker cp oracle-tmp:/u01/app/oracle/oradata ../oracle/ora-data/
docker cp oracle-tmp:/u01/app/oracle/fast_recovery_area ../oracle/ora-data/
# 5. oracle container가 사용할 폴더의 소유자 변경
sudo chown -R 1000:1000 ../oracle/ora-data/oradata
sudo chown -R 1000:1000 ../oracle/ora-data/fast_recovery_area
# 6. oracle-tmp 컨테이너 삭제
docker rm -f oracle-tmp
else
echo "../oracle/ora-data 폴더가 이미 존재합니다. 복사를 생략합니다."
fi
# 7. oracle-tmp만 제외하고 나머지 서비스 실행
docker compose up -d oracle-xe spring-app my-nginx
<이제 남은 시간 프로젝트>
뭐지 오늘은 또 잘 되네. 음.. 흠... 어제 새로고침 안하고 했거나 그랬나....
학원 컴퓨터에서 작업하던 내용이 어느 순간부터 제대로 git에 업로드 되지 않았던게 다른 워크스페이스 사용하면서부터 origin에서 벗어나서 그런건가 싶기도 하고 아직 정확히 잘모르겠다. 노트북에서 하려니 기능이 안돼서 일단 USB 로 노트북에 이식하려고 하는 중.
깃허브에서 차이점 찾아냄. 이 체크표시의 의미를 알아내야겠어.
는 해결 못해서 선생님께 여쭤봤더니 내가 그동안 잘못하고 있던거라고.....
이클립스 워크스페이스와 깃에서 클론해온 리포지토리 위치는 서로 다른 곳에 있어야 한다고 ㅠㅠㅠㅠㅠㅠ
(와중에 샘이 이렇게 기형적인 깃프로젝트는 첨이라고 하시던데 도대체 조장은 무엇을 어떻게 한걸까...)
결국 깃허브에도 새로 리포지토리 만들었음... 휴 ㅠㅠㅠ 근데 여긴 gemini 키 때문에 private으로 돌림는 근데 내 리포지토리니까 지우고 올려도 되겠다.
오늘 오전 중에는 노트북에 환경 이식하는거 성공적으로 진행함.
이후 작업한 내용 오늘 한 것 영상으로 찍음
'자바풀스택 과정 > 자바 풀 스택 : 수업내용정리' 카테고리의 다른 글
자바 풀 스택 5/1 하루 기록 111(110은 대학원 세미나 때문에 기록 없음)(최종프로젝트 26일차) (1) | 2025.05.01 |
---|---|
자바 풀 스택 4/29 하루 기록 109(최종프로젝트 25일차) (1) | 2025.04.29 |
자바 풀 스택 4/28 하루 기록 108(최종프로젝트 24일차) (1) | 2025.04.28 |
자바 풀 스택 4/26 하루 기록 107(멘토링 3차시)(최종프로젝트 23일차) (0) | 2025.04.26 |
자바 풀 스택 4/25 하루 기록 106(최종프로젝트 22일차) (0) | 2025.04.25 |