클라우드/도커
[도커] 도커 8: 도커 이미지 심화
KyuminKim
2024. 11. 18. 20:37
지난번에는 Dockerfile을 통한 이미지 구축을 알아봤었다!
오늘은 조금 더 이미지에 대해 알아보자!
도커 이미지 등록 (Docker Hub)
도커파일로, 또는 도커 컨테이너(docker commit)로부터 이미지를 만들 수 있었다!
이제, 이 파일을 전세계 어디서나 조회하고 사용할 수 있도록 도커 허브에 등록해보자!
docker tag my-image:0.0 my_account/my-image:0.0 # 이미지명 수정
docker login
docker push my_account/my-image:0.0
단, docker hub에 등록하기 위해 이미지명을 [계정명]/(이미지명):(태그) 형식으로 맞춰야 한다 !
그리고, docker push 전에 docker에 로그인해야 한다.
그러므로 https://hub.docker.com 에 들어가 회원가입하자!
(docker login 시 나오는 username, password에 생성한 정보를 입력하면 된다)
도커 이미지 용량 줄이기
컴퓨터 리소스의 효율적인 사용을 위해
도커 이미지의 용량을 줄이는 것도 중요하다!
1️⃣ 가벼운 Base Image
도커 이미지를 생성할 때에는, 모두 Base image가 필요하다.
이 Base Image로 가벼운 용량의 것을 선택하면
전체 이미지의 용량을 줄일 수 있다
- scratch 이미지: 빈 베이스 이미지, 어떠한 라이브러리도 없으므로 정적 바이너리로 컴파일
- alpine 이미지: 보안성이 뛰어난 가벼운 리눅스 배포판
2️⃣ .dockerignore
- 호스트 영역의 파일 또는 디렉토리를 컨테이너로 복사할 때 (COPY), 특정한 파일을 복사에서 배제
마치 gitignore와 같은 개념으로,
host -> container로 전체 복사하는 대신 (COPY . .)
몇몇 파일만 복사하여 용량을 줄이는 방법이다
3️⃣멀티 스테이지 빌드
- Dockerfile 하나에 여러 개의 FROM 사용 (최종적으로 생성되는 이미지는 하나)
- FROM을 기준으로 스테이지 구분 -> 이전 스테이지의 결과물 중 원하는 부분만 다음 스테이지에서 사용
- 각 스테이지에 이름을 붙여 사용
멀티 스테이지 빌드
FROM golang as first # 이름을 붙여 가능
ADD main.go /root # 호스트 컴퓨터의 main.go를 /root로 이동
WORKDIR /root # 컨테이너에서 /root로 위치 이동
RUN go build -o /root/mainApp /root/main.go # /root/mainApp을 /root/main.go로 컴파일
# --------------------------
FROM alpine:latest
WORKDIR /root
COPY --from=first /root/mainApp .
두 개의 FROM 구문이 사용된 것을 볼 수 있다.
여기서 이름 붙인 first는
base 이미지 뿐 아니라 앞 스테이지의 결과물 전부를 가리킨다!
즉, first 에서 생성한 /root/mainApp 실행파일을
두번째 이미지로 복사해서 실행하게 하는 개념이다
이번 시간에는 도커 이미지에 대해서 더 알아봤다.다음 시간에는 docker 컨테이너에 대해 더 알아보자!