공개 혹은 비공개 소프트웨어 배포
9.1 배포 방법 선택 하기
여러 사항을 고려하여 개발 실정에 맞는 배포 방법을 선택하게 된다.
배포 스펙트럼
왼쪽으로 기술될 수록 배포 방식은 단순하나 제한적인 방식으로 제공된다.
오른쪽으로 기술될 수록 배포 방식은 복잡하나 커스터 마이즈가 쉽게 되므로 유연하다.
선택 기준
배포 방식을 선택함에 있어 기준점이 될 수 있는 요소를 나열 해본다.
Cost 비용
대게 낮은 비용이 최선의 선택이다. 프로젝트에 주어진 예산에 따라 결정된다.
Visibility 가시성
해당 프로젝트는 공개되어서는 안된다.
Transportation 전송
배포 환경의 네트워크 전송 속도와 대역폭은 배포 방식을 선택하는데 영향을 줄 수 있다.
Longevity 지속 가능성
공개되지 않은 배포 방식을 공개된 방식으로 전환했을 때 문제 없이 진행될 것 인가.
Availability 가용성
언제나 사용가능한 가
Access Control 접근 제어
프로젝트 빌드 이미지를 다른 서드 파티에 의해 변경하거나 접근하는 것을 허용할 것인가
Integrity 무결성
신뢰성 있고 일관성 있는 배포 방식. 중간 자 공격과 같은 해킹에 영향이 없도록 함.
Confidentiality 비밀성
프로젝트가 허용하는 공개 범위 내에서 이미지가 배포되는 가.
Expertise 전문성
도구에 대한 전문 지식을 요구하는가. 배포 방법이 복잡해질 수록 더 높은 전문성을 요하게 된다.
호스팅된 저장소를 통한 배포 hosted registries
Docker registries는 docker pull 명령어로 가져올 수 있는 이미지를 관리하는 저장소이다.
그러한 이미 호스팅되고 있는 서비스를 통해 이미지를 배포하는 방식.
예시)
Docker Hub
Quay.io
다음 HelloWorld.df 를 작성하고 이미지를 빌드하여 docker registry에 배포한다.
FROM busybox:latest
CMD echo 'Hello World!'
docker image build -t <insert Docker Hub username>/hello-dockerfile -f HelloWorld.df .
<docker Hub username> 부분은 Docker Hub에 가입하여 생성한 username을 기입한다.
로컬 cli에서 docker login을 통해 배포에 대한 인증을 수행한다.
해당 방식은 비용 효율적(무료)이며 모든 사람에게 공개된 레지스트리를 사용한다. 접근 제어 또한 용이한데, 공개된 사용자들에게는 읽기 가능하고 개인, 조직 단위로 이미지를 업데이트할 수 있는 권한을 가진다. 데이터는 호스팅된 서비스를 통해 일관성있게 유지되며 큰 전문성 없이 유지보수가 가능하다.
반대로 비공개용 프로젝트에는 부적합하다.
비공개 저장소
비공개 저장소는 공개 저장소와 모든 면이 비슷하다. docker registry API는 공개와 비공개 저장소에 대한 구분을 거의 하지 않는다.
차이점은 docker image pull 이나 docker container run 을 비공개 저장소의 이미지를 지정할 때, docker login과 같은 인증 절차를 필요로 한다는 것이다.
공개되지 않기 때문에 비밀성에 대한 충족 사항이 만족된다.
개인 저장소를 도입 private registries
docker registry를 격리된 네트워크에서 서비스하여 직접 저장소 서비스를 구축하고 해당 저장소에 이미지를 배포하는 방식이다. Docker registry는 Apache License 2 하에 배포되는 오픈 소스이다. Docker registry를 직접 구축하여 서비스하여 비용 절감과 서비스 구현 비용을 줄일 수 있을 것 이다.
이미지 배포에 대한 지엽적인 특징을 가지며 호스팅된 서비스와 이미지 소스 배포 사이의 중간 특징을 가진다.
레지스트리에 대한 커스터 마이징과 환경에 맞는 배포 설정을 가능하게 한다.
예시)
도커 레지스트리에서 이미지를 받아 로컬 저장소에 푸시하는 예시
docker image pull dockerinaction/ch9_registry_bound
docker image ls -f "label=dia_exercise=ch9_registry_bound"
docker image tag dockerinaction/ch9_registry_bound localhost:3000/dockerinaction/ch9_registry_bound
docker image push localhost:5000/dockerinaction/ch9_registry_bound
개인 저장소는 localhost:5000에서 서비스 중이다.
직접 수동으로 이미지 배포
FTP 파일전송 형태나 HTTPS와 같은 웹 서비스로 직접 이미지를 다운로드하여 배포하는 방식이다.
도커 이미지를 사용하여 배포하는 경우 그리고 중간 파일 서버를 통해 이미지를 배포하는 방식을 예로 들 수 있다.
이미지는 export를 통해 tar 파일로 내보내지고 FTP 서버를 통해 배포되는 인프라에 전송된다. 전송된 파일은 다시 이미지로 import되어 컨테이너를 실행하는 데 쓰이게 된다.
이미지 소스-배포 워크플로우
Git과 같은 버전 컨트롤 시스템을 사용하여 소스로 부터 직접 빌드 및 배포를 하는 방식이다.
1) git 저장소로 부터 소스를 받는다.
2) 이미지를 빌드 한다.
3) 빌드한 이미지를 저장소로 내보낸다.
요약
여러 사항을 고려하여 배포 방식을 선택하여 프로젝트에 도입하라
hosted public repositories는 프로젝트 가시성, 무료, 낮은 전문성 요구를 가진다.
hosted private repositores는 소규모 프로젝트에 적합하고 접근 제어를 용이하게 한다.
FTP와 같은 file-sharing system을 사용하면 이미지를 파일로서 배포할 수 있다.
이미지 소스 배포는 유연하나 복잡하게 만들려면 얼마든지 가능하다. 기존에 있는 인프라를 사용하여 배포한다.
'Cloud > Docker' 카테고리의 다른 글
Docker In Action 12. First-class configuration abstractions (1) | 2024.12.14 |
---|---|
Docker In Action 11. Services with Docker and Compose (0) | 2024.12.14 |
Docker In Action 8. Building image automaticall with Dockerfiles (1) | 2024.12.08 |
Docker In Action 7. Packaging software in images (1) | 2024.12.06 |
Docker In Action 6. Limiting risk with resource controls (1) | 2024.12.04 |