Docker

[Docker] 2.도커 허브

szoo_ 2024. 9. 13. 15:42

도커 허브란?

도커 이미지를 공유하고 관리할 수 있는 클라우드 기반의 서비스이다.

 

도커 이미지를 검색하고, 공유하고, 관리하고, 다운로드할 수 있는 점에서

소스 코드를 관리하고, 버전관리 하는 깃허브의 도커 버젼이라 생각하면 좋을 것이다.

 

주요 기능

        • 이미지 저장소(Repository): 사용자가 개인 또는 공개 이미지를 업로드 할 수 있다.
          이 저장소에서 컨테이너화된 이미지에 대해 버젼 관리를 할 수 있고, 개인 저장소는 제한된 사용자만 접근 할 수 있지만
          공개 저장소는 누구나 이미지를 검색해서 다운로드 할 수 있다. 
        • 자동 빌드(Automated Builds): GitHub 또는 Bitbucket과 같은 소스 코드 저장소에 연결하여 소스 코드의 새로운 커밋이 발생할 때마다 자동으로 도커 이미지를 빌드하고 업데이트할 수 있다. 
        • 웹훅(Webhooks): 이미지가 업데이트되었을 때 트리거되는 웹훅을 설정할 수 있어, 연속적 통합/배포 파이프라인(CI/CD)과 같은 다른 서비스와의 통합이 용이하다. 
        • 공식 이미지(Official Images): 도커와 협력하여 만들어진 검증된 고품질의 공식 이미지들을 제공한다. 이 이미지들은 다양한 소프트웨어와 서비스를 신속하게 배포하고 실행하기 위한 신뢰할 수 있는 기반이 된다.

만약, docker run으로 어떤 컨테이너를 실행하려할 때, 실행하려는 이미지가 없다면 여기 도커허브의 공개 저장소에서 해당 이미지가 있는지 검색하여 가져오게 된다.

 


자 이제,  도커 허브를 이용해보자

https://hub.docker.com/?_gl=1*54xr6j*_gcl_au*NjY1NDE4Njc4LjE3MjYyMDUyMzU.*_ga*ODc4ODYwOTI4LjE3MjYxMTY2MzM.*_ga_XJWPQMJYHQ*MTcyNjIwNTIyOC4zLjEuMTcyNjIwNTM3Mi41OS4wLjA.

 

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

 

1. 회원가입하기

도커 허브는 깃허브, 구글 계정으로 가입하거나 이메일을 통해 가입 할 수 있다.


2. 로그인하기

도커허브에 로그인을 한다면 아래와 화면이 보일 것이다.

도커 허브의 개인 레포지토리


3. 레포지토리 생성하기

 오른쪽 위 Create Repository 를 클릭하여 생성해보자

  • Namespace : 개인 또는 조직을 선택
  • Repository Name : 도커 이미지를 저장하는 저장소의 이름. username/image-name 형태로 저장된다.
  • Short description: 레포지토리에 대한 설명
  • Visibility: 레포지토리의 공개 범위
    • Public: 모든 사용자가 레포지토리를 볼 수 있고, 다운로드 할 수 있다.
    • Private: 지정된 사용자 또는 그룹만 접근 할 수 있다. 하지만 무료로는 1개까지만 사용 할 수 있다.

 

생성한다면 위의 사진과 같이 아무것도 없을 것이다. 왜냐하면 레포지토리를 생성하기만 하고 아무런 이미지를 업로드하지 않았기 때문이다.


4. 터미널에서 도커 허브 로그인하기

- 명령어 docker login

 

Username은 도커 허브에서 생성한 계정이름이다.
아래 사진과 같이 레포지토리에 동일한 값을 입력하고 비밀번호를 입력하여 로그인하면 된다.

 

Login Succeeded 라는 문구가 나면 정상적으로 생성된 것이다.


5. 도커 이미지 빌드하기

생성한 도커 허브 레포지토리에 업로드를 하려면 해당 레포지토리와 동일한 이미지의 이름과 태그가 생성되어야 한다. 

따라서 나의 레포지토리는 lyleseungju/blog_dockerhub이므로

docker build -t <레포지토리명>:<태그> .

이미지를 빌드하겠다.


6. 도커 이미지 업로드하기

docker push repositoryname:tagname

docker push lyleseungju/blog_dockerhub:latest

만약, 업로드가 되지 않는다면 도커 로그인이 제대로 되어 있는지? 레포지토리명과 태그를 정확하게 지정했는지 확인하길 바란다.

맨 마지막 줄처럼 뜬다면 업로드가 성공적으로 된 것이다. 

그럼 이제 실제로 내가 만든 도커 허브 레포지토리에도 업로드가 되었는지 확인해보자

2분전에 lastest라는 태그로 새로운 것이 업로드 된 것을 확인 할 수 있다. 

해당 태그를 클릭해보면 좀 더 자세한 정보를 조회해볼 수 있다.

 


7. 도커 이미지 다운해서 실행해보기

방금까진 로컬에서 이미지를 빌드해서 도커허브에 올리는 것을 해봤다.

자, 이번엔 거꾸로 도커 허브에 있는 이미지를 로컬에 다운해서 실행시켜보자.

 

도커 허브의 이미지를 가져오기 전 이전에 있던 로컬의 이미지와의 구분이 어려우므로 사전 작업으로

기존 로컬의 이미지는 지우고 시작하겠다.(안해도 된다. 헷갈리는 것뿐)

# 도커 이미지 리스트 보기
docker images

# 도커 이미지 삭제
docker rmi <imagename>:<tagname>

# 도커 안쓰는 파일 정리하기
docker system prune -f

만약 지워지지 않는다면 해당 이미지를 사용하고 있는 컨테이너가 존재하고 있을 수도 있다.
그러면 docker ps -a를 해서 해당 이미지를 사용하고 있는 컨테이너를 지워주자.

 

 

 

도커 허브에서 이미지를 다운해보겠다.

다운 방법은 레포지토리명과 원하는 태그명을 지정하면 된다.

# 도커 이미지 파일 다운하기
docker pull <repositoryname>:<tagname>

# 도커 이미지 리스트 확인하기
docker images

 

 

이제 실행해보자

# 도커 컨테이너 실행하기
docker run -d -p 8080:8080 <imagename>:<tagname>

# 도커 실행 중인 컨테이너 목록 보기
docker ps

# 도커 컨테이너 모두 보기
docker ps -a

컨테이너는 성공적으로 띄웠다. 

 

 

 

그럼 이제 정상적으로 작동하는지 테스트 해보자.

curl localhost:8080

 


도커 허브 100% 활용하기 1

추가적으로 도커 허브를 잘 이용하는 방법을 알려주겠다.

만약 내가 가상서버를 만들어 node express를 사용 할 수 있는 환경을 구성하려할 때라면

 

먼저, 

우분투os를 설치하고..

node.js를 설치한 뒤..

express를 설치해야 할 것이다.

만약 설치 과정 중에 버젼이나 종속성 문제를 만난다면 그 문제를 해결하고 다시 구성하는데 애를 먹을 것이다.

 

근데 도커 허브에서 express를 검색하면 아래의 결과를 볼 수 있을 것이다.

 

 

mongo-express를 클릭해 확인해보면

다양한 버젼의 도커 이미지가 있는 것을 볼 수 있는데,

 

해당 도커 이미지를 가져와서 사용하면

바로 mongo-express를 바로 실행 할 수 있는 환경이다.

 

주의할점!!

도커허브는 누구에게나 자신의 이미지를 공유 할 수 있고, 이미지를 자유롭게 가져다 쓸 수도 있다.

하지만 반대로 말하면 인증되지 않은 사용자의 이미지를 쓸 수도 있다는 것이다.

그러므로 만약 어떤 새로운 이미지를 사용하려할 땐

도커 허브에서 다운로드 수가 10M이상 이거나, 아래 이미지처럼 인증된 마크가 붙은 이미지만을 사용하길 바란다.


도커 허브 100% 활용하기 2

기본적으로 도커에 있는 이미지를 이용한다면 OS가 차지하고 있는 용량과 의존성으로 인해 많은 용량을 깔고 간다.

그러면 쓰지 않는 의존성들도 다 들고있어야한다면 얼마나 비효율적인가!

 

그래서 모든 이미지가 그렇지 않지만 몇몇 이미지들은 최소한의 필요한 기능만을 포함하여 상대적으로 작게 제작된 이미지들이 있다.

 

대표적으로 두가지의 이미지가 있는데

1. -alpine 이미지: 보안, 단순성, 자원 효율성에 중점을 두고 있다.  
이 이미지는 alpine linux os로 제작되었는데 기본적인 os크기가 5MB 정도로 매우 작아 컨테이너의 크기를 대폭 줄일 수 있다.
하지만 최소한의 필수적인 기능만을 포함하기에 필요한 패키지는 직접 apk를 통해 설치해야한다는 단점이 있다.

  

2. -slim 이미지: 표준 이미지에 비해 불필요한 파일들을 제거하여 크기가 최소화된 버전이다.

이 이미지는 Debian이나 Ubuntu를 기반으로하지만 필요한 기능과 호환성을 유지하며 크기를 최소화하여 호환성 문제를 줄이면서도 이미지 크기를 상대적으로 줄일 수 있다.

 

그래서 이미지 크기를 비교해보면  표준 이미지 > slim 이미지 > alpine 이미지 이다.

node 22 버젼 기준

 

 

이상으로 도커 허브 사용법에 대해 알아보았다.