AWS/Docker+CICD

Docker Image 심화

sehunbang 2024. 4. 8. 20:52

Docker hub repositories에 image push

 

  • push: 이미지 올리기
    • registry: Dockerfile 을 통해 생성한 이미지나 docker commit 을 통해 생성된 이미지를 저장하는 곳
    • Public registry: 공개적으로 사용할 수 있어 아무나 접근 가능
    • Private registry: 특정인이나 특정 그룹만 접근 가능
    • Docker Hub: hub.docker.com은 Docker 공식 Registry
    • Docker Hub 내 나의 계정의 Registry에 push하기 위해서 docker 계정 생성 및 로그인 필수
    • Docker image tag → push
      • hub.docker.com 에 본인 계정의 repositories에 생성한 이미지를 업로드하기 위해서는, 본인 계정을 이미지명 앞에 붙여야 docker push 수행 시 계정으로 찾아가 저장된다.

docker logout
docker login

docker image pull nginx:latest
docker image pull ubuntu:22.04

docker images

docker image tag nginx:latest nbcdocker0000/nginx-test:1.0

docker push nbcdocker0000/nginx-test:1.0

docker images
docker image rm nbcdocker0000/nginx-test:1.0
docker container rm nginx-test --force
docker image rm nginx-test:1.0 --force

docker pull nbcdocker0000/nginx-test:1.0
docker run -d -p 8001:80 --name=nginx-test nbcdocker0000/nginx-test:1.0

 

push 한 이미지를 웹사이트를 통해 확인

 

 

Dockerfile 최적화

  • 왜 Dockerfile을 최적화해야 하나요?
    • 빠르게 만들기 위해서: Docker 이미지를 만드는 시간을 줄이면, 일이 더 빨리 끝나고 다른 일에 시간을 더 쓸 수 있어요.
    • 이미지 크기 줄이기: 이미지가 작으면 저장 공간을 덜 차지하고, 다운로드나 전송할 때도 더 빨라져요.
    • 재사용성 높이기: 잘 만들어진 Dockerfile은 여러 번, 여러 곳에서 쓸 수 있어서 편리해요.
    • 보안 강화: 보안을 잘 고려해서 만들면 해킹 같은 문제에서 더 안전해져요.
    • 유지보수 쉽게: 잘 정리된, 깔끔한 Dockerfile은 나중에 수정하거나 업데이트할 때 훨씬 쉬워요.

Java 환경 image build

Dockerfile

# build 는 gradle 이미지에서 `builder`라는 이름으로.
FROM gradle:8.5-jdk21-alpine AS builder

WORKDIR /app
COPY ./ ./
RUN gradle clean bootJar


# App
FROM eclipse-temurin:21-jre-alpine

WORKDIR /app
COPY --from=builder /app/build/libs/spring-boot-0.0.1-SNAPSHOT.jar .

EXPOSE 8080

ENTRYPOINT ["java", "-jar", "spring-boot-0.0.1-SNAPSHOT.jar"]

 

  • alpine 이미지를 사용해서 최소한의 라이브러리만 설치된 이미지를 사용하여 빌드
  • multi stage를 사용하여 application 실행 Container에 gradle이 설치되는 것을 방지