티스토리 뷰
❗️
도커의 여러 장점 중 중요한 "공유"에 대해 배워보자.
도커에서 이미지 공유란?
=> 로컬 컴퓨터에서 빌드한 이미지를 다른 사람이 사용하게끔 하는 것
📝 목차
1. Registry, Repositery, Image Tag
2. Docker Hub에 직접 빌드한 Image push
3. 나만의 Docker Registry
4. Image Tag 효율적으로 사용
5. 골든 이미지
1. Registry, Repository, Image Tag
· Registry
- Docker Imgae의 저장 및 공유 시스템
- registry의 기본값은 "Docker Hub"
· Repository
- registry내에 도커 이미지가 저장되는 공간
- 하나의 repository에 여러 버전의 이미지 담을 수 있다.
· Image Tag
- 태그의 기본값은 "latest"
- 같은 Application의 서로 다른 버전 구별하기 위해 사용
- 해당 Image를 설명하는 버전 정보 주로 입력
- registry에 Image push할 때 항상 명시적으로 태그를 부여해야 한다.
📍 Docker Image 참조의 구조
도커 이미지의 이름에는 해당 이미지를 내려받기 위해 필요한 모든 정보가 들어 있다.
이미지의 전체 이름은 4개의 요소로 구성된다.
docker.io/diamol/golang:latest
1️⃣ Registry(docker.io)
: 이미지가 저장된 레지스트리의 도메인 (기본값 Docker Hub)
2️⃣ Name(diamol)
: 이미지 작성자의 계정 이름, 개인 혹은 단체의 이름
3️⃣ Repository(golang)
: 이미지 Repository 이름, 일반적으로 application의 이름에 해당
4️⃣ Image Tag(latest)
: application의 버전 혹은 변종 (기본값 latest)
2. Docker Hub에 직접 빌드한 Image push
📍 Registry에 Image를 push하는데 필요한 두 가지 절차
- Registry에 로그인 (Image push 권한 부여)
- Image push 권한을 가진 계정명을 포함하는 이미지 참조
📍Docker Hub 계정 이름 환경변수로 정의
# 리눅스 Mac 환경
export dockerId="Docker Hub계정이름"
아래의 명령어로 자신의 계정 이름이 출력되는지 확인해보자.
echo $dockerId
📍Docker Hub 로그인
Docker Hub는 기본 레지스트리로 도메인 이름 지정할 필요없다.
docker login --username $dockerId
📍기존 Image에 새로운 Image 참조 부여
image-gallery라는 이미지를 아래의 블로그에서 빌드한 적이 있다.
[Docker] 3. Application build
더보기 ❗️이 글은 엘튼 스톤맨의 "도커 교과서" 교재를 참고하여 작성하였습니다. 목차 1. 빌드 서버가 필요할까? 2. 애플리케이션 빌드 예제: JAVA 3. 애플리케이션 빌드 예제: Node.js 4. 애플리케
steelbeartaeng2.tistory.com
해당 이미지에는 계정 이름이 지정되어 있지 않아 registry에 push할 수 없어 새로운 참조를 부여해준다.
Image 참조에 계정이름이 지정되어야 Image를 push할 수 있다.
docker image tag image-gallery $dockerId/image-gallery:v1
📍Image push
Docker Hub 계정 이름이 포함된 Image 참조를 만들었다면,
docker image push 명령을 사용해 Image layer를 registry에 push 하자.
docker image push $dockerId/image-gallery:v1
📍 Docker Registry와 Docker Engine
Image push할 때 실제 업로드 대상은 Image layer다.
=> Dockerfile 스크립트 최적화가 중요하다.
🔎 Docker Registry와 Docker Engine의 차이
Docker Engine
- image build 시 중복 작업을 방지하여 빌드 속도 향상
- 이전에 생성된 layer cash 재사용
Docker Registry
- image push와 pull시 image layer 효율적으로 관리하여 image 배포 속도 향상
- registry에 저장된 layer cash 재사용
3. 나만의 Docker Registry
로컬 네트워크에 전용 Registry가 있다면 전송 시간 절약, 데이터 안전과 같은 장점이 있지만
공개 Registry보다 신속하게 전환되지는 않는다.
📍 Docker Registry 실행
docker container run -d -p 5000:5000 --restart always <image>
위의 명령을 보면 Registry 기본 포트는 5000이다.
도메인 localhost:5000을 사용해 이미지에 태그를 부여하면 새로운 Registry에 이미지 push할 수 있다.
=> 해당 Registry는 로컬 컴퓨터에만 접근가능해 유용하진 않다.
📍도메인 네임 추가해 Image 참조 부여
#도메인 네임 설정 (registry.local)
echo $'\n127.0.0.1 registry.local' | sudo tee -a /etc/hosts
#도메인 네임 추가해 이미지 참조 부여
docker image tag image-gallery registry.local:5000/gallery/ui:v1
- 로컬 컴퓨터에 도메인 네임을 붙이면 활용도가 높아진다.
📍 HTTPS vs HTTP
HTTPS = 보안 프로토콜
HTTP = 비보안 프로토콜
HTTP 문제점
- Registry 통신 내용 유출
- Imgae push 과정에서 layer 유출
- 가짜 Image 받아 올 가능성
도커의 기본 설정에서는 HTTP가 적용된 Registry 사용할 수 없다.
HTTP 사용을 위해 로컬 컴퓨터의 Registry를 HTTP 허용 목록에 추가해야 한다.
Registry를 HTTP 허용 목록에 추가하기 위해, 도커 설정을 수정한다.
설정 수정을 위해 daemon.json 파일에 접근하여 아래의 코드를 추가해준다.
"insecure-registries" : ["registry.local:5000"]
docker engine 재시작 후 docker info 명령을 통해 registry 허용 목록을 확인할 수 있다.
✏️ daemon.jason
- Image layer 저장경로
- 도커 API가 주시하는 포트 번호
- 허용된 비보안 Registry 목록
- ...등 Docker Engine의 모든 설정
4. Image Tag 효율적으로 사용
📍Image Tag
Image Tag를 통해 버전 구별을 더 효율적으로 하기 위해 아래와 같은 형태를 따른다.
[major].[minor].[patch]
- patch 수정
- 변경 내용 버그 수정 뿐, 기능은 이전 버전과 같다.
- minor 수정
- 기능 추가 뿐, 기존 기능 모두 유지
- major 수정
- 완전히 다른 기능을 가진다.

✚ 위와 같은 형태로 Image Tag 사용 이유
- 사용자에게 최신 버전 빠르게 따를 수 있는 선택권 제공
- pull과 FROM 명령으로 특정한 패치 버전을 선택해 사용할 수 있다.
- 특정 패치 버전을 선택해 계속 같은 버전을 사용하면, 보안 패치를 받을 수 없다.
5. 골든 이미지
📍 악성 Docker Image의 위험
악성 Docker Image란?
=> 악성코드, 해킹 관련 도구, 취약한 소프트웨어 등 악의적으로 사용될 만한 요소들이 포함된 Docker Image
신뢰성 있는 Docker Image를 이용해 악성 Docker Image로 인한 피해를 줄이자.
신뢰성 있는 Docker Image는 검증된 퍼블리셔와 공식 이미지로 피해를 방지한다.
1️⃣ 검증된 퍼블리셔
- Image 배포 단체(마이크로소프트, 오라클, IBM과 같은 큰 기업)
- 취약점 탐지등의 승인 절차를 거친 Image
- 단체가 배포하는 인증된 Image 사용
2️⃣ 공식 이미지
- 오픈 소스 소프트웨어
- 해당 프로젝트 개발 팀과 도커가 함께 이미지 관리
- 취약적 탐색을 거쳐 주기적으로 업데이트 된다
- 매달 새 버전이 릴리스
📍 골든 이미지
- 공식 이미지를 기반 이미지로 삼아 자신이 필요한 설정(인증서나 환경 설정값 등)을 추가한 것
- Docker Hub의 기업 repository나 자체 repository에서 관리
- 해당 기업의 모든 application Image는 골든 이미지를 기반 이미지로 한다.
- 업데이트 주기 마음대로 설정 가능
=> 조직 내에서 사용하는 표준이미지로 보안과 일관성 유지하는 데 사용한다.
'Docker' 카테고리의 다른 글
[Docker] 5. Docker volume 이용한 Persistent Storage (0) | 2023.07.22 |
---|---|
[Docker] 3. Application build (0) | 2023.07.08 |
[Docker] 2. 도커 이미지 만들기 (0) | 2023.07.08 |
[Docker] 1. Docker란 무엇인가? (수정 중) (0) | 2023.07.05 |