[ASAC 06] Docker 명령어

2024. 10. 30. 17:48·ASAC
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
'ASAC' 카테고리의 다른 글
  • Docker Image와 Github Actions를 사용한 CI/CD 자동화
  • [ASAC 06] Docker, CI/CD 기본 개념
  • [ASAC 06] 자바스크립트 객체, 스크립트, Callback과 Promise
  • [ASAC 06] 자바스크립트 일급함수, Hoisting, Scope Chaining
suhsein
suhsein
티끌모아 태산
  • suhsein
    기억 못 할 거면 기록이라는 좋은 수단이 있다
    suhsein
  • 전체
    오늘
    어제
    • 분류 전체보기
      • ASAC
      • Next.js
      • Docker
      • MySQL
      • Java
      • Spring-Proxy, AOP
      • Spring Boot, JPA
      • Spring Security
      • DB
      • 알고리즘
      • PS
      • TOPCIT
      • AWS 자격증
      • 비공개
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 안녕하세요
  • 인기 글

  • 태그

    DP
    티스토리챌린지
    동적프로그래밍
    Alias
    해시
    tsp
    외판원순회
    오블완
    포인터
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
suhsein
[ASAC 06] Docker 명령어
상단으로

티스토리툴바