Q1. 도커 허브는 도커에서 제공하는 기본 이미지 저장소
Q2. 도커 레지스트리는 레지스트리 API에 응답하는 도커 이미지 저장소를 포함한 호스팅 서비스.
도커 허브와 레지스트리
Docker 사설 Registry 구축
Docker Registry 구축
도커 레지스트리 또한 도커 이미지로 배포되고 있음
Registry 이미지 다운로드
docker pull registry
Registry 컨테이너 생성
docker run -d -p 5000:5000--restart=always--name registry registry
도커 이미지 저장
도커 이미지 태깅 후 레지스트리에 추가
docker pull ubuntu
docker image tag ubuntu localhost:5000/myfirstimage
도커이미지 배포
docker pull localhost:5000/myfirstimage
Dockery Registry 삭제
실행중인 레지스트리 종료, 컨테이너 삭제
기존 레지스트리에 저장된 도커 이미지는 모두 다 삭제되므로 주의!
docker container stop registry && docker container rm -v registry
도커 서비스 환경 구성
확장성
- 이미지만 만들어두면 컨테이너만 관리하면 됨
- 서비스 이전이나 신규 서버에 서비스 추가 시 docker run 명령어로 처리
- 개발 서버나 테스트 서버 운용 간편
표준성
- 도커를 사용하지 않는 경우 ruby, node.js, go, php로 만든 서비스들의 배포 방식 제각각
- 컨테이너라는 표준으로 서버를 배포하므로 모든 서비스들의 배포 과정 동일
이미지
- 이미지에서 컨테이너를 생성하므로 반드시 이미지를 만드는 과정 필요
- 이미지를 저장할 곳 필요
설정
- 환경 변수로 제어
- MYSQL_PASS=password와 같이 컨테이너를 띄울 때 환경변수 같이 지정
- 하나의 이미지가 환경 변수에 따라 동적으로 설정 파일을 생성하도록 함
서비스 빌드 및 배포
배포 FLOW
1. 초기 구축
코드가 배포될 클라우드의 인프라를 구축하는 일
도커를 이용한 개발- 베포 플로우에서 초기 구축은 2단계
1단계. Swarm(Docker Machine Cluster)를 구축
2단계. docker-compose.yaml로 Stack을 구성하고 실행
2. 스케일 조정
docker 로드 밸런싱(부하분산) : 2가지 패러다임
1. 클러스터의 워크 노드를 추가해서 부하분산을 취함
2. 서비스의 Task Container 수(replicas : 5)를 늘림으로써 부하분산을 취함
- Swarm Cluster의 로드밸런싱
각 노드에 존재하는 swarm loadbalancer가 하나의 도커 실행환경처럼 작동해서 필요한 적절한 컨테이너로 연결
3. 코드 배포
- 소스 코드 수정 후 docker image build
- Docker Hub Repository에 새로 만든 이미지 push
- docker-compose.yaml 파일 또는 swarm에 bind-mount 파일이 변경되었다면 docker-machine scp로 전송
- docker-machine ssh myvm1 "docker stack deploy -c ./docker-compose.yml"로 Stack 재배포 시, Repositroy에서 이미지를 새로 끌고 와서 업데이트된 컨테이너 구축
Summary