728x90
Spring Boot Dockerize
Dockerfile 정의
최상위 작업 디렉토리 바로 아래에 Dockerfile 생성
FROM amazoncorretto:17-alpine
# JAR 구동할 JRE(JVM) 버전 설정. 개발한 Java 애플리케이션의 버전
ARG JAR_FILE=build/libs/*.jar
COPY ${JAR_FILE} app.jar
# 구동할 JAR 빌드. 개발한 Java 파일들을 컴파일 및 빌드하여 하나의 JAR로 만들기
ENTRYPOINT ["java", "-jar", "/app.jar"]
# 컴파일 및 빌드 완료된 JAR 파일을 JRE 명령어를 통해 구동. java -jar /app.jar
Java Application Build
최상위 작업 디렉토리에서 다음 명령어 실행
#!/bin/bash
./gradlew clean build # 기존 jar 파일이 있다면 clena(삭제) 후 build
Docker Image Build
최상위 작업 디렉토리에서 다음 명령어 실행
JAR 파일을 사용해 Dockerfile에 정의한 대로 Docker Image를 빌드한다.
docker build -t spring-jpa:5th . # -t는 태그 지정 옵션. 도커이미지명:태그명
docker build --build-arg JAR_FILE=build/libs/RENAMED.jar -t spring-jpa:5th .
# 혹은 ARG 활용한 빌드 및 수행. ARG 전달인수에 값 전달.
# Dockerfile에서 정의한 JAR_FILE ARG로 값 전달
점(.)의 의미 = 지금 내가 있는 디렉토리 내 존재하는 Dockerfile을 사용하여 도커 이미지를 빌드한다는 뜻
점 빼먹으면 Docker Image 빌드되지 않음!
생성된 Docker Image 확인
docker images # 호스트에 존재하는 모든 Docker Images
docker images spring-jpa # 해당 도커 이미지명을 가진 도커 이미지가 존재하는 지 확인
생성된 Docker Image가 실행이 잘 되는지까지 확인
docker run -p 1000:8080 -t spring-jpa:5th
# 실행 시에도 태그 지정 시 -t 옵션 필요
# -p는 포트 지정 옵션. 호스트 포트:Docker Container 포트
Docker Containers 확인
docker ps # 구동 중인 모든 docker containers 확인
docker ps -a # 모든 docker containers 확인 (정지 컨테이너 포함)
docker ps -a --format '{{.Names}}'
# 다른 정보 없이 컨테이너 이름들만 확인
docker ps -a --format 'table {{.ID}}\t{{.Image}}\t{{.RunningFor}}\t{{.Status}}\t{{.Names}}'
# Container ID, Image, Created, Status, Names 포맷으로 정보 출력
docker ps -a --quiet
# 다른 정보 없이 컨테이너 ID만 확인. -q 와 동일
Docker Container 삭제
docker rm <Docker Image명> # 이미지명으로 도커 컨테이너 삭제
docker rm <Docker Image id> # id로 도커 컨테이너 삭제
docker rm `docker ps -a -q` # 모든 컨테이너 (구동 중인 + 정지된) 모두 다 삭제. 완전 리셋
Docker Image 확인
docker rmi <Docker Image명> # 이미지명으로 도커 이미지 삭제
docker rmi <Docker Image id> # 아이디로 도커 이미지 삭제
docker rmi -f <Docker Image명>
# -f 옵션 : 해당 이미지를 사용하는 컨테이너(구동 중인 + 정지된)있어도, 강제 종료 후 이미지를 지워라
도커 이미지 삭제 시 해당 이미지를 사용하는 컨테이너가 존재한다면 삭제되지 않는다.
sed 혹은 grep 명령어를 통해서 해당 IMAGE ID를 사용하는 컨테이너를 검색해서 일일히 삭제 후 이미지를 삭제할 수 있다.
sed 명령어
# sed 는 grep 이랑 유사하게 파일 혹은 출력 결과에 대해서 원하는 부분만 추출하기 위한 리눅스 프로그램
ps sed '1p;/패턴/!d'
# ps : 현재 실행중인 프로세스와 상태
# 1p : 첫번째 라인은 무조건 출력하라
# /패턴/ : 원하는 패턴 입력. 특정 문자열을 포함하는 라인만 선택.(ID, 프로세스명 등) regex 사용 가능
# !d : 해당 라인을 제외하고 모두 다 delete 하라는 뜻
ps aux | sed '1p;/postgres/p;d’
# ps aux : 현재 실행중인 프로세스와 상태를 자세한 형식으로 출력
# 패턴에 맞는 것만 p 출력, 나머지는 d 삭제
Dangling Image
<none>으로 표기되어있는 이미지. Untagged 된 이미지를 뜻한다.
동일 이미지 태그에 대해 새로운 버전의 이미지를 생성했을 때 이전(기존) 이미지가 Untagged 된 것
docker images -f dangling=true # dangling image 확인 명령어
728x90
'ASAC' 카테고리의 다른 글
Docker Image와 Github Actions를 사용한 CI/CD 자동화 (1) | 2024.10.30 |
---|---|
[ASAC 06] Docker, CI/CD 기본 개념 (1) | 2024.10.28 |
[ASAC 06] 자바스크립트 객체, 스크립트, Callback과 Promise (2) | 2024.10.17 |
[ASAC 06] 자바스크립트 일급함수, Hoisting, Scope Chaining (0) | 2024.10.16 |
[ASAC 06] AWS VPC와 서브넷 구성 / Bastion Tunneling, NAT (6) | 2024.10.08 |