Docker Image 심화
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이 설치되는 것을 방지