Infra/Docker, Kubernetes

[Docker] 도커 환경의 이해 - 도커허브, 레지스트리

Kangjieun11 2025. 1. 29. 00:18
728x90

 

 

 

✅ 도커 허브 

 

 

도커 베이스이미지/ 공식 이미지를 제공한다. 

회원가입만 하면 이미지를 무료로 저장할 수 있다. 

 

기본적으로 모든 이미지는 공개되어 있어 누구나 접근이 가능하다 

>> 비공개로 사용하려면 유료 서비스를 이용해야한다. 

>> 개인사용자는 1개의 이미지만 private으로 사용할 수 있다. 

 

https://hub.docker.com/

 

Docker Hub Container Image Library | App Containerization

Increase your reach and adoption on Docker Hub With a Docker Verified Publisher subscription, you'll increase trust, boost discoverability, get exclusive data insights, and much more.

hub.docker.com

 

외부에 공개되어있는 도커 이미지 레포지토리로

docker pull 명령을 이용해 컨테이너를 로컬에 받아오거나,

도커 이미지 빌드시 베이스 이미지 등을 받아오는데 주로 사용된다.

 

 

✎  도커 허브를 쓰는 이유

  • 도커이미지를 새로 만들지 않아도, 필요한 이미지를 가져다 바로 쓸 수 있음.
  • 프로그램 만들 때 필요한 기본 이미지를 여기서 쉽게 가져올 수 있음!

 

 

 

 도커 레지스트리 

도커 이미지 저장소 호스팅 서비스

도커 허브에 로그인해 레포지토리를 생성하여  이미지를 등록 및 관리할 수 있다.

 

 

 

https://hub.docker.com/_/registry

 

registry - Official Image | Docker Hub

Docker Official Images are a curated set of Docker open source and drop-in solution repositories. Why Official Images? These images have clear documentation, promote best practices, and are designed for the most common use cases.

hub.docker.com

 

도커 이미지를 공유하기 위한 애플리케이션이다 .

도커파일등을 제공하고, 레포지토리를 생성해 도커를 관리할 수 있따. 

 

 

 

 

 

 

  • 레지스트리(Registry)
    • Docker Hub : https://hub.docker.com/
    • 도커 이미지를 관리하는 공간
    • 특별히 다른 것을 지정하지 않는다면, 도커 허브(Docker Hub)를 기본 레지스트리로 설정함
    • 레지스트리는 Docker Hub, Private Docker Hub, 회사 내부용 레지스트리 등으로 나뉠 수 있다
  • 레포지토리(Repository)
    • 레지스트리 내에 도커 이미지가 저장되는 공간이다.
    • 이미지 이름이 사용되기도 함
    • GitHub의 레포지토리와 유사하게 생각
  • 태그(Tag)
    • 같은 이미지라고 할지라도 버전 별로 안의 내용이 조금은 다를 수 있다.
    • 해당 이미지를 설명하는 버전 정보를 주로 입력합니다.
    • 특별히 다른 것을 지정하지 않는다면 latest 태그를 붙인 이미지를 가져옴

 

 

 

  도커 허브에서 이미지 가져와 컨테이너 실행 테스트

 

 

1. 도커 허브에서 이미지 가져오기 

 

docker pull

  • docker/whalesay:latest 이미지는 누군가(주로 도커 공식팀이나 커뮤니티 사용자)가 만들어서 도커 허브에 올려둔 것

해당 이미지를 로컬에 다운로드

docker image pull docker/whalesay:latest

 

 

 

2.이미지가 잘 받아졌는지 확인

 

docker image ls

  • 다운로드한 이미지가 내 컴퓨터에 있는지 리스트를 확인할 수 있다.

 

 

3. 이미지 실행 

 

docker container run [OPTIONS] IMAGE [COMMAND] [ARG...]

 

  • 가져온 이미지로 컨테이너를 실행한다.
  • [COMMAND] : 초기 컨테이너 실행시 수행되는 명령어이다
  • -name   옵션은 컨테이너 이름을 지정할 수 있다.
  • 실행 시 cowsay 명령어를 사용하여 "2025.01.25 test"라는 메시지를 출력하도록 설정한다.

 

 

docker container run --name testWhalesay docker/whalesay cowsay 2025.01.23 test

 

 

testWhalesay생성

 

 

testWhalesay2 생성

 

 

 

 

4. 컨테이너 리스트 확인 

 

docker container ps -a

 

  • 실행 중이거나 실행했던 컨테이너 목록을 확인한다. 

 

 

 

 

 

 

도커 프로그램에서 다양한 API를 제공하여 원하는 만큼 자동화가 가능하다. 

 

 

위에 whalesay 예시를 보면  run할 때 붙히는 옵션이 있다. 

옵션을 통해  컨테이너 별로 다른 값을 줄 수도 있다. !

 

 

 

MYSQL_PASS=password와 같이 컨테이너를 띄울 때 환경변수를 같이 지정하여 설정을 제어할 수 있다.

** 이미지가 환경변수에 따라 동적으로 설정파일을 생성하도록 만들어야 한다.

 

 

공유 자원 : 컨테이너는 삭제후 새로 만들면 모든 데이터가 초기화 되기 때문에 

업로드 파일을 외부스토리지 (S3) 를 사용하면 좋다. 

--  세션이나 캐시를 파일로 사용할 경우에도  memcached  redis와 같이 외부로 분리할것 

 

 

 




 

 서비스 빌드 및 배포 

 

 

도커 레지스트리 허브에서  이미지를 가져와 서버에서 사용할 수 있게 되는데

만약 사내에 별도 저장소를 구축해두면  각 서버로 가져와 바로 구축/운영에 사용할수 있게 된다.

 

 

 

서비스 운용시  도커가 제시하는 개발배포 FLOW 

 

  초기 구축

코드가 배포될 인프라를 구축하는 일을 의미한다. 

 

만약 100대의 피씨서버가 있다고 할때 모든 피씨에 도커환경을 세팅하고 하나씩 도커파일을 올리기엔 너무 귀찮다.

Swarm이라는 도구를 이용하면 100대의 도커 환경을 한 손으로 관리할 수 있다 

 

1단계 : Swarm 도커 머신 클러스터를 구축한다.

이를 이용하면 n대의 서버를 하나로 묶어 하나의 큰 서버처럼 사용하게 만들어줄 수 있다. 

 

2단계 : docker-compose.yml로  스택을 구성하고 실행하는것

>> docker-compose.yml 은  서비스 구성에 필요한 모든 설정을 적어놓은 파일인데 

이 파일을 이용해  웹서비스 + 데이터베이스를 한번에 실행하도록 구성이 가능하다 

 

 

 스케일조정  >> 사용자가 많아졌을때 규모를 조정하는 것 

유저가 많아지면 로드밸런싱이 필요할 수 있따.  (2가지 패러다임 존재) 

 

1) 클러스터의 worker node를 추가함으로써 부하분산을 취하는 방식

>>  물리PC 서버   한대를 클러스터에 포함하여 부하를 나눈다. 

 

2) 서비스의 task container를 늘림으로써 부하분산을 취하는 방식

>>  기존 PC 서버에서 실행되는 컨테이너의 수를 늘린다. 

 

 

⏺ 코드배포

만약 이미지의 코드를 변경하고 수정하고 싶을 수 있다. 

 

1) 소스코드를 추가한 후 도커 이미지를 빌드한다. 

2) 만들어진 이미지를   도커 허브에 올린다.   (새로운 버전의 프로그램 설치파일을 올림)

 

3) 변경된 파일을 SCP를 사용해 원격서버로 전송한다. 

 

4) 원격서버에 접속해   스택(docker compose) 을 다시 배포한다 

 docker stack deploy -c ./docker-compose.yml

 

이 과정을 거치면 새로운 환경을 재배포하여 업데이트 된 상태로 만들어 줄 수 있따.