우당탕탕 개발일지
[Docker & Back] Dockerfile? Docker Image? 본문
[ Docker 설치 ]
아래 블로그 보고 EC2(우분투)에 도커 설치 완료...
[Docker적용] EC2에 Docker 설치
개요EC2 인스턴스에 대략적인 설정은 다 끝냈고, 일단 먼저 EC2에 Docker를 설치할 계획이다. 1. EC2 접속> 환경1) AWS EC2 Ubuntu(프리티어)2) MAC OS1-1. EC2 인스턴스에 SSH 접속EC2 인스턴스에 접속하기 위해
goodbegunishalfdone.tistory.com
[ Docker란? ]
Dockerfile
Docker Image
[ Docker 사용해서 배포해보기 ]
1. 환경 설정
내가 원하는 형태로 폴더를 생성했다.
지금은 백엔드만 배포할거지만, 추후에 프론트와 연결하기 위해서 해당 경로로 설정했다.
Dockerfile이 jar 파일과 동일한 폴더 안에 있어야, 빌드가 쉽다고 해서 아래와 같이 구성했다.
Dockerfile은 아래와 같이 작성했다.
FROM openjdk:17-jdk-slim
# 애플리케이션 JAR 파일을 컨테이너에 복사합니다.
COPY Moivo-0.0.1-SNAPSHOT.jar Moivo-0.0.1-SNAPSHOT.jar
# 컨테이너가 실행될 때 JAR 파일을 실행하는 명령어를 지정합니다.
ENTRYPOINT ["java","-jar","/Moivo-0.0.1-SNAPSHOT.jar"]
도커 파일 내용 확인
2. Docker Build
오류 발생....
/var/run/docker.sock에 대한 권한 문제라고 한다
해당 폴더의 권한 확인
srw-rw---- 1 root docker
s: 파일 종류
rw-: 관리자 권한
rw-: 그룹 권한
---: 일반 계정(관리자, 그룹이 아닌 계정) 권한
그래서 내가 생각한 방법은 3가지이고, 3가지 방식 중 어떤 방안을 가장 추천하는지 제미나이한테 물어봤다.
내가 생각한 해결 방법
- root 계정으로 전환하기
- docker 그룹에 들어가기
- 일반 계정 권한 부여하기
아래는 제미나이 대답
1. root 계정으로 전환하기
sudo su 명령어로 root 계정으로 전환하여 Docker 명령을 실행하는 방법입니다.
- 장점: 가장 빠르고 확실한 방법입니다. root는 모든 권한을 가지고 있으므로 권한 관련 오류가 발생할 가능성이 거의 없습니다.
- 단점: 보안상 가장 위험한 방법입니다. root 권한은 시스템의 모든 파일을 수정, 삭제할 수 있으므로, 실수로 중요한 파일을 건드려 시스템을 망가뜨릴 수 있습니다. 일반적으로 꼭 필요한 경우가 아니라면 root 계정으로 작업하는 것은 권장되지 않습니다.
2. docker 그룹에 들어가기 (권장)
ubuntu 계정을 docker 그룹에 추가하여 sudo 없이도 Docker를 실행할 권한을 얻는 방법입니다.
- 장점: 가장 안전하고 일반적인 해결책입니다. docker와 관련된 작업만 sudo 없이 수행할 수 있어 보안상 안전합니다. 한 번만 설정하면 이후에는 번거로운 과정 없이 바로 도커 명령어를 사용할 수 있습니다.
- 단점: 설정 변경 후 재로그인 또는 newgrp 명령어를 실행해야 변경 사항이 적용됩니다.
3. 일반 계정 권한 부여하기
이는 docker.sock 파일의 권한을 모든 사용자가 접근할 수 있도록 변경하는 방법입니다.
- 장점: 임시로 문제를 해결할 수 있습니다.
- 단점: 보안상 매우 취약합니다. 이 방법은 시스템의 모든 사용자가 sudo 없이 Docker 데몬에 접근할 수 있게 만들기 때문에 절대 권장되지 않습니다. 이 방법은 절대 사용하지 마세요.
나는 가장 권장하는 2번 방안으로 진행하려고 한다. 1, 3번의 단점은 '보안 취약'이라는 큰 위험이 있지만, 2번 방안의 단점은 큰 위험이 없기 때문이다.
Docker 그룹에 들어가기
아래 명령어 입력 후, 재로그인
sudo usermod -aG docker ubuntu
다시 build
3. Docker 컨테이너 실행
컨테이너 실행했지만, 종료됐다.....
내가 예상하기엔 프로젝트에서 redis를 사용하는데, redis 서버가 없어서 그런것 같다..!
그래서 Docker에 있는 Redis를 가져와 컨테이너를 만들었다.
moivo-container를 중지 후 제거했다.
아래 명령어를 사용하여 다시 moivo-container를 생성했다. 이번엔 moivo-redis와 묶어서 컨테이너를 만들었다.
docker run -d -p 80:8080 \
-e SPRING_DATASOURCE_URL="jdbc:mysql://[RDS_엔드포인트]:3306/[데이터베이스명]" \
-e SPRING_DATASOURCE_USERNAME="[사용자명]" \
-e SPRING_DATASOURCE_PASSWORD="[비밀번호]" \
-e SPRING_DATA_REDIS_HOST="moivo-redis" \
--name moivo-container moivo-backend
계속 알 수 없는 이유로 종료되고 있다...
그래서 깡통 프로젝트 배포하면서 문제점을 찾아가려고 했다. (참고 블로그)
[Docker] AWS Docker 배포 Test
이전 블로그에서 빌드는 했는데 배포가 계속 안되고 있다...이유를 계속해서 찾아가보겠다... 먼저 테스트 삼아 api 단 1개만 있는 프로젝트를 만들었고, 이전 블로그 도커 배포 과정과 동일하게
coding-document.tistory.com
'개발 프로젝트 > Moivo' 카테고리의 다른 글
[Back] NullPointerException 발생: JDK와 컨터이너와의 상호작용 문제? (0) | 2025.09.03 |
---|---|
[Back] AWS Docker 배포 Test (0) | 2025.09.02 |
[AWS] EC2 생성, SSH 접속, RDS(Mysql) 구축 (1) | 2025.08.28 |
AWS + Kubernetes + Docker + GitLab CI (3) | 2025.08.27 |
상품 추출 API 속도 개선 (0) | 2025.06.09 |