목차
- 레지스트리, 리포지터리, 이미지 태그 다루기
- 도커 허브에 직접 빌드한 이미지 푸쉬하기
- 나만의 도커 레지스트리 운영하기
- 이미지 태그를 효율적으로 사용하기
- 공식 이미지에서 골든 이미지로 전환하기
- 연습문제: 도커 레지스트리 API v2 명세가 담긴 문서를 조사하기
레지스트리, 리포지터리, 이미지 태그 다루기
도커 이미지 참조의 구조
docker.io/diamol/golang:latest
- docker.io : 이미지가 저장된 레지스트리의 도메인. 기본값은 도커 허브
- diamol : 이미지 작성자의 계정 이름. 개인 혹은 단체의 이름에 해당
- golang : 이미지 레포지토리 이름. 일반적으로 애플리케이션의 이름에 해당. 하나의 레포지토리는 여러 버전의 이미지를 담을 수 있다.
- latest : 이미지 태그. 애플리케이션의 버전 혹은 변종을 나타낸다. 기본값은 latest
참고로 규모가 큰 회사는 사내 네트워크나 전용 클라우드 환경에 자사의 도커 레지스트리를 별도로 꾸리는 경우가 많음
만약 해당 도메인이 r.sixeyed.com 이고 위와 같은 파일을 레지스트리에 푸쉬한다면 아래와 같이 변경하면 된다.
r.sixeyed.com/diamol/golang:latest
- 앞의 도메인 주소만 바꾸어 주면 된다.
도커 허브에 직접 빌드한 이미지 푸쉬하기
필요한 것
- 도커 허브 계정
도커 허브 계정 이름(가입할 때 기입한 이메일)을 환경 변수로 정의하기
# window 환경
dockerId="도커허브계정이름"
# 리눅스 또는 macOS
export dockerId="도커허브계정이름"
도커 허브에 로그인
docker login --username $dockerId
기존의 이미지에 새로운 이미지 참조 부여
# docker image tag (image ls 에 있는 이름) (자신의 도커허브 계정 이름)/access-log/(version)
docker image tag image-gallery jeoy/image-gallery:v1
docker image ls
이미지를 레지스트리에 푸시
docker image push jeoy/image-gallery:v1
아래의 그림에 출력 내용을 나타낸 그림을 보면 Pushed 된 것들은 이미지 레이어다.
레지스트리 역시 도커 엔진과 같은 방식으로 이미지 레이어를 다루면 그만큼 Dockerfile 스크립트의 최적화가 더욱 중요해진다.
이유는 레지스트리에서도 캐시상에 레이어 해시와 일치하는 레이어가 없을 경우에만 실제로 업로드가 이루어지는데 이는 도커 엔진의 레이어 캐시와 완전 같은 방식이다.
→ 최적화 된 Dockerfile 스크립트는 빌드 시간, 디스크 요량, 그리고 네트워크 대역폭까지 영향을 미치는 중요한 요소다.
도커 허브에 새로 푸쉬된 이지미에 대한 도커 허브 웹페이지 URL을 출력하는 명령
echo "https://hub.docker.com/r/jeoy/image-gallery/tags"
출력 내용
https://hub.docker.com/r/jeoy/image-gallery/tags
접속 하면 보여주는 이미지 정보
레지스트이에 이미지를 푸시하고 확인 하는 방법은 위의 내용이 전부다.
이제 모든 사람들이 이 애플리케이션을 검색하고 내려받고 실행할 수 있다.
나만의 도커 레지스트리 운영하기
로컬 네트워크에 전용 레지스트리가 있으면 좋은점
- 인터넷 회선 사용량을 줄여 전송시간 절약
- 주로 사용하는 공개 레지스터리가 다운됐을때 신속하게 전환가능
- 중요한 데이터를 외부 클라우드 서비스나 제3자에게 의존하지 않고, 자체적으로 관리가능
책에서 패키징한 이미지를 사용해 컨테이너 형태로 도커 레지스트리 실행 -> 전용 레지스트리 생성
docker container run -d -p 5000:5000 --restart always diamol/registry
- --restart : 도커를 재시작했을 때 해당 컨테이너(diamol/registry)도 자동으로 재시작
- localhost:5000 을 사용해 이미지에 태그를 부여하면 새로운 레지스트리에 이미지 푸쉬 가능
도메인 네임을 별명으로 붙이기
#윈도우
Add-Content -Value "127.0.0.1 registry.local" -Path /windows/system32/drivers/etc/hots
#리눅스 macOS
echo $'\n127.0.0.1 registry.local'| sudo tee -a /etc/hosts
registry.local 을 이용한 ping test
이제 이미지 참조에 도메인 네임registry.local :5000 을 사용 가능
image-gallery 이미지에 새로 만든 레지스트리 도메인 네임을 추가해 이미지를 참조를 부여
docker image tag image-gallery registry.local:5000/gallery/ui:v1
docker image tag image-of-the-day registry.local:5000/gallery/api:v1
docker image tag access-logs registry.local:5000/gallery/logs:v1
이제 HTTP 를 사용하여 이미지 푸시하고 내려받는 로컬 컴퓨터의 레지스트리에 HTTPS를 적용해야 한다.
(도커 데스크탑) 오른쪽 위에 있는 톱니바퀴(⚙️) 를 클릭 -> Docker Engine 에서
"insecure-registries": ["registry.local:5000"] 를 추가 그 후 도커 를 restart
태그를 부여한 이미지를 푸시
docker image push registry.local:5000/gallery/ui:v1
에러 발생...
이미지 태그를 효율적으로 사용하기
이미지 태그를 붙이는 방법 [major].[miner].[patch] 형태를 따라하기
- patch 만 바뀐 버전 : 변경 내용이 버그 수정뿐만이고, 기능은 지난 버전과 같다.
- minor 자리가 바뀜 : 추가된 기능은 있지만, 기존 기느은 모두 유지
- majot 자리가 바뀜 : 완전히 다른 기능을 가진다는 정보 유추 가능
공식 이미지에서 골든 이미지로 전환하기
도커허브는 검증된 퍼블리셔(verified publisher) 와 공식 이미지(official image) 제도를 통해 멀웨어가 배포되는 것을 방지한다.
골든 이미지는 공식이미지를 기반 이미지로 삼아 인증서나 환경 설정값 등 자신이 필요한 설정을 추가 한 것이다.
닷넷 코어 애플리케이션을 위한 골든 이미지를 빌드할 수 있는 스크립트를 이용하여 이미지 빌드하기
cd ch05/exercises/dotnet-sdk
docker image builid -t golden/dotentcore-sdk:3.0 .
cd ../aspnet-runtime
docker image build -t golden/aspnet-core:3.0
위에서 사용 된 Dockerfile 스크립트
FROM mcr.microsoft.com/dotnet/core/sdk:3.0.100
LABEL framework="dotnet"
LABEL version="3.0"
LABEL description=".NET Core 3.0 SDK"
LABEL owner="golden-images@sixeyed.com"
WORKDIR src
COPY global.json .
다른 멀티 스테이지 빌드 스크립트와 같은 구조지만
- 기반 이미지는 우리가 만든 이미지
- LABEL을 이용하여 이미지의 메타테이터 정의 및 일반적인 설정을 추가
연습문제: 도커 레지스트리 API v2 명세가 담긴 문서를 조사하기
'책 > 도커 교과서' 카테고리의 다른 글
[ 책 ] [ 도커교과서 ] 7장 도커 컴포즈 분산 애플리케이션 실행하기 (0) | 2024.12.23 |
---|---|
[책] [ 도커교과서 ] 6장 도커 볼륨을 이용한 퍼시스턴트 스토리지 (0) | 2024.12.15 |
[책] [ 도커교과서 ] 4장 애플리케이션 소스코드에서 도커 이미지까지 (0) | 2024.12.13 |
[ 책 ] [ 도커교과서 ] 3장 도커 이미지 만들기 (0) | 2024.12.08 |
[ 책 ] [ 도커교과서 ] 1장 (0) | 2024.12.02 |