Docker Hub는 사용자가 Docker 컨테이너 이미지를 저장, 공유 및 관리할 수 있는 클라우드 기반 레지스트리 서비스입니다. 개발자와 IT 전문가가 미리 빌드된 Docker 이미지에 액세스하고 협업할 수 있는 중앙 리포지토리 역할을 하므로 Docker 환경에서 애플리케이션을 더 쉽게 빌드, 배포 및 실행할 수 있습니다.
Docker Hub를 통해 사용자는 다른 개발자가 만든 이미지를 검색하고 다운로드할 수 있을 뿐만 아니라 자신의 이미지를 저장하고 관리할 수 있습니다. 또한 사용자는 자동 빌드를 생성하여 소스 코드가 변경될 때마다 이미지를 자동으로 빌드하고 테스트할 수 있습니다.
Docker Hub는 공용 및 개인 리포지토리를 모두 제공하여 사용자가 이미지를 커뮤니티와 공유하거나 내부용으로 비공개로 유지할 수 있는 유연성을 제공합니다. 또한 버전 관리, 액세스 제어, 협업 도구와 같은 기능을 제공하여 컨테이너 개발 프로세스를 단순화합니다.
핵심 기능 외에도 Docker Hub는 보안 검색, 이미지 취약성 검색, GitHub 및 Bitbucket과 같은 다른 도구와의 통합과 같은 추가 기능을 제공합니다. 전반적으로 Docker Hub는 Docker 컨테이너로 작업하는 모든 사람에게 필수적인 도구로, 컨테이너화된 환경에서 애플리케이션을 구축하고 배포하는 간소화된 접근 방식을 제공합니다.
Docker push 를 하려면 Docker Hub의 계정이 있어야함은 물론이고, 본인의 Repository가 있어야 push 할 수 있다. Github을 생각해본다면 올리고 싶은 프로젝트에 대해 git repository 생성이 안되어있는데 올릴수는 없는것과 같다.
docker_hub 라는 repository를 만들었고 이곳에 로컬에서 만든 image파일을 push할 예정이다.
먼저 docker hub에 업로드 할 수 있는 권한을 얻기 위해 로컬 터미널 창에 다음과 같은 명령어를 입력한다.
docker login
이후 docker hub의 userID, password를 입력한 후, Login suceed가 확인된다면 docker image에 태그를 달아 보자.
docker tag hubtest arnold1998/docker_hub:test
docker tag [이미지 명][docker hub id]/[repository 명]:[태그명] 이렇게 입력한다. 그리고 터미널창에 $ docker images를 입력하면 arnold1998/docker_hub repository에 test 태그가 걸린 이미지가 확인된다.
REPOSITORY TAG IMAGE ID CREATED SIZE
hubtest latest 4d9e768b23e5 About a minute ago 1.01GB
docker push arnold1998/docker_hub:test
docker push [docker hub id]/[repository 명]:[태그명]
push가 완료되면 다음과 같이 repository에 test tag가 달린 이미지가 올라간걸 확인할 수 있다.
$ docker build -t arnold1998/docker_hub .
=> [internal] load build definition from Dockerfile 0.0s
=> => transferring dockerfile: 31B 0.0s
=> [internal] load .dockerignore 0.0s
=> => transferring context: 2B 0.0s
=> [internal] load metadata for docker.io/library/node:latest 1.5s
=> [auth] library/node:pull token for registry-1.docker.io 0.0s
=> [internal] load build context 0.0s
=> => transferring context: 184B 0.0s
=> [1/5] FROM docker.io/library/node@sha256:876aa3dc96feb9363331dec40795f1e74d12184fcbd77f5b4d1eb070d2aae16f 0.0s
=> CACHED [2/5] WORKDIR /app 0.0s
=> CACHED [3/5] COPY package.json /app 0.0s
=> CACHED [4/5] RUN npm install 0.0s
=> CACHED [5/5] COPY . /app 0.0s
=> exporting to image 0.0s
=> => exporting layers 0.0s
=> => writing image sha256:4d9e768b23e5514b58b485d60c29d113ff74c012f4575f55518bdffa73f78ecb 0.0s
=> => naming to docker.io/arnold/docker_hub
이미지 이름을 리포지토리와 동일하게 맞추면 push를 바로 할 수 있다.
단 tag를 달지 않을경우만 해당된다.
$ docker push arnold1998/docker_hub
The push refers to repository [docker.io/arnold1998/docker_hub]
eadeb73dde8e: Pushed
2a649b38d6ba: Pushed
5abfce964856: Pushed
b2bd39c71994: Pushed
ca2e9a309a5b: Pushed
d0463bd2584b: Pushed
b74b0839756a: Pushed
7efd70d0bc36: Pushed
d4514f8b2aac: Pushed
5ab567b9150b: Pushed
a90e3914fb92: Pushed
053a1f71007e: Pushed
ec09eb83ea03: Pushed
test: digest: sha256:a3048199a09e3bd1b82e7420b99185cbcbb835095197e298c66655a985356d91 size: 3048
태그를 없이 이름을 맞춰서 push를 할경우에 자동으로 latest라는 태그가 달려서 push가 된다.
커맨드 창에 다음과 같은 명령어를 입력하여 pull 해보려한다.
docker pull arnold1998/docker_hub:test
docker push [docker hub id]/[repository 명]:[태그명]
$ docker pull arnold1998/docker_hub:test
test: Pulling from arnold1998/docker_hub
Digest: sha256:a3048199a09e3bd1b82e7420b99185cbcbb835095197e298c66655a985356d91
Status: Image is up to date for arnold1998/docker_hub:test
docker.io/arnold1998/docker_hub:test