DevOps/Docker

[Docker] 도커 이미지 - 도커 허브(Docker hub)에 이미지 배포하기

seunghwaan 2023. 2. 4. 23:32
반응형

이번 포스트에서는 도커 공식 원격 저장소인 도커 허브(Docker hub)에 도커 이미지를 배포하는 방법을 정리하겠습니다.

도커 이미지 배포 방법

이미지를 생성했다면 이를 다른 도커 엔진에 배포할 방법이 필요합니다. docker save나 docker export 같은 방법으로 단일 파일로 추출해서 배포할 수도 있지만 이미지 파일의 크기가 너무 크거나 도커 엔진의 수가 너무 많다면 이미지를 파일로 배포하기 어렵습니다. 또한 도커의 이미지 구조인 레이어 형태를 이용하지 않으므로 매우 비효율적입니다.

 

이를 해결하기 위한 첫 번째 방법은 도커에서 공식적으로 제공하는 도커 허브(Docker hub) 이미지 저장소를 이용하는 것입니다. 도커 허브는 도커 이미지를 저장할 수 있는 클라우드 서비스이고 사용자는 이미지를 올리고(docker push) 이미지를 내려받기(docker pull)만 하면 되므로 매우 간단하게 사용 가능합니다. 단, 무료 사용자는 비공개(Private) 저장소의 수에 제한이 있습니다. 공개(Public) 저장소는 무료로 사용할 수 있으므로 만든 이미지를 다른 사용자에게 공개해도 상관없다면 도커 허브를 사용하는 것도 좋은 방법입니다.

 

두 번째 방법은 도커 사설 레지스트리(Docker Private Registry)를 사용하는 것으로 사용자가 직접 이미지 저장소를 만들 수 있습니다. 그러나 사용자가 직접 이미지 저장소 및 사용되는 서버, 저장 공간 등을 관리해야 하므로 도커 허브보다는 사용성에서 까다롭습니다. 그러나 회사의 내부망과 같이 보안이 중요한 곳에서 도커 이미지를 배포해야 한다면 도커 사설 레지스트리가 더 좋은 방안이 될 것입니다.

 

하지만, 이번 포스트에서는 도커 허브에 이미지를 배포하는 방법만 정리하도록 하겠습니다.

도커 허브(Docker Hub)에 이미지 배포

이미지 Repository 생성

도커 허브 사이트에 이미지를 push하려면 도커 허브에 Repository를 생성해야 합니다.

 

로그인 후에 [Repositories] -> [Create Repository]를 클릭합니다.

 

 

저장소에 대한 정보를 입력해야 합니다. 저장소에 저장될 이미지 이름과 이미지에 대한 설명을 입력한 후에 Create 버튼을 클릭해서 Repository를 생성해줍니다.

 

저장소가 생성이 되었고 저장소의 이름은 [계정 이름/이미지 이름] 형식이므로 seosh817/seunghwan_ubuntu로 생성이 되었습니다.

 

저장소에 이미지 올리기

방금 생성한 저장소에 이미지를 올려보겠습니다.

아래 명령어로 저장소에 올릴 이미지를 생성합니다.

$ docker run -it --name seunghwan_container ubuntu:focal
# 컨테이너 내부에서
$ echo seunghwan >> my_name

$ docker commit seunghwan_container seunghwan_ubuntu:first

ubuntu:focal 이미지로 컨테이너를 실행한 뒤에 컨테이너 내부에 my_name이라는 파일을 만들어서 변경사항을 만들어 줍니다. 그리고 seunghwan_ubuntu:first라는 이미지로 커밋해줍니다.

 

하지만, 이 이름으로는 이미지에 저장소를 올릴 수 없습니다. 왜냐하면 특정 이름의 저장소에 이미지를 올리기 위해서는 저장소 이름(사용자 이름)을 이미지 앞에 접두어로 추가해야 하기 때문입니다.

 

docker tag 명령어를 사용하면 이미지의 이름을 추가할 수 있습니다.

$ docker tag [기존 이미지 이름] [새로운 이미지 이름]

아래의 예시는 seunghwan_ubuntu:first 이미지를 seosh817/seunghwan_ubuntu:first로 이미지 이름을 추가합니다.

 

* docker tag 명령어로 이미지의 이름을 변경했다고 해서 기존의 이름이 사라지는 것은 아니고, 같은 이미지를 가리키는 새로운 이미지를 추가할 뿐입니다.

 

docker tag 명령어 수행 후 docker images

이미지의 이름을 추가하고 아래의 명령어를 입력하여 도커 허브 서버에 로그인합니다. 로그인하지 않으면 도커 허브에 이미지를 업로드 할 수 없습니다.

$ docker login

로그인 한 후 docker push 명령어로 이미지를 저장소에 올려줍니다.

# docker push seosh817/seunghwan_ubuntu:first
$ docker push [이미지 이름]

docker push seosh817/seunghwan_ubuntu:first 명령어를 입력하여 도커 허브에 이미지를 push 해주겠습니다.

 

결과를 보면, 0002c9 해쉬코드는 ubuntu:focal의 이미지 레이어이므로 이미지 저장소에 업로드 되지 않았고 제가 수정한 이미지 레이어만 Pushed 된 것을 확인할 수 있습니다.

 

실제로 이미지가 올려졌는지 확인하겠습니다.

 

seosh817/seunghwan_ubuntu에 정상적으로 이미지가 올라간 것을 확인할 수 있습니다.

반응형