본문 바로가기
Infra/Docker & Kubernetes

Docker Hub 및 Private Registry에 이미지 Push하는 방법

by 워니 wony 2025. 6. 8.

 

 

도커 이미지를 다른 사람과 공유하거나 배포하려면, 이미지 파일을 Docker Hub 혹은 Private Registry에 Push해야 한다. 이 글에서는 Docker Hub에 이미지를 Push하는 과정과, 기업 내부에서 사용하는 Private Registry 구성과 활용 방법에 대해 다룬다.

 

 

Docker Hub에 이미지 Push하기

Docker Hub에 이미지를 업로드하려면 두 가지 선행 작업이 필요하다.

  • docker login
  • docker tag

 

Docker Login

docker login

명령어 입력 시 사용자 계정과 패스워드를 입력하면 된다. 이때 주의할 점은 도커가 로그인 정보를 base64로 인코딩해 저장한다는 점이다. 즉, 평문은 아니지만 완전히 안전하다고 보기 어렵다. 다른 사람의 컴퓨터에서 작업했다면, 반드시 로그아웃을 해야 한다.

로그아웃 명령어 : docker logout

 

 

 

 

로그인 방식은 다음과 같다

  • 사용자 패스워드
  • Token 방식
  • 2단계 인증 (Two-Factor Authentication, OTP 활용)

 

토큰 방식 로그인 예시

Docker Hub에서 토큰을 생성하고 아래와 같이 사용한다.

cat ~/token.txt | docker login -u your-username --password-stdin

 

 

 

Docker Image Tag

도커 이미지를 Push할 때는 이미지 이름에 Docker Hub 계정명을 명시해야 한다.

docker tag myapp:latest mydockerid/myapp:latest docker push mydockerid/myapp:latest
 
  • public repository로 자동 생성된다.
  • 계정당 1개의 private repository만 무료로 제공된다. (private 으로 만들고 싶으면 미리 생성 필요)
  • 형식은 {계정명}/{레포지토리명}:{태그} 

도커 이미지 공유 방법

도커 이미지를 공유하는 방법은 다음과 같다.

  • Docker Hub에 Push 후 공유
  • Dockerfile과 소스를 GitHub 등에 업로드
  • docker save 명령어로 이미지 백업 후 전달 → docker load로 공유

기존 서버

docker save mydockerid/myapp:latest > myapp.tar
scp myapp.tar user@remote:/path
 

상대 서버

docker load < myapp.tar
 
 

 

도커 이미지 삭제 시 주의 사항

도커 이미지는 컨테이너가 사용 중이면 삭제할 수 없다. 삭제 전에는 반드시 컨테이너 종료 및 삭제가 필요하다.

 

컨테이너 확인 및 종료

docker ps -a docker 
stop 컨테이너ID 
docker rm 컨테이너ID
 
 

이미지 삭제

docker rmi 이미지명
 
 
 

alias를 등록해두면 편리하게 사용할 수 있다.

예시 (.bashrc 또는 .zshrc에 추가)

alias dclean='docker system prune -a'
 

 


Private Docker Registry 구성 및 이미지 Push

기업 환경에서는 보안을 위해 자체 Private Registry를 사용하는 경우가 많다.

도커는 registry용 공식 이미지를 제공하며, 간단하게 구축할 수 있다.

Registry 실행

docker run -d -p 5000:5000 --name registry registry:2
  • 기본 포트는 5000번
  • localhost:5000 주소로 registry 실행

 

이미지 Tag 및 Push

docker tag myapp:latest localhost:5000/myapp:latest 
docker push localhost:5000/myapp:latest
 

 

참고) Push 시 오류 발생 하면 처리 방법

오류 내용 - denied: requested access to the resource is denied
이는 도커 데몬이 docker.io 외의 registry를 기본적으로 허용하지 않기 때문에 발생 함

Private Registry 허용 설정

1. /etc/docker/daemon.json 파일을 수정 또는 생성한다.
sudo vi /etc/docker/daemon.json

내용 추가

  "insecure-registries": ["localhost:5000"] 
}

2. 도커 재시작
sudo systemctl restart docker

이후 다시 Push하면 정상적으로 업로드된다.

 


[예시] Private Registry 구성부터 Push 까지

 

# 1. Dockerfile 작성
## Dockerfile
FROM nginx
COPY index.html /usr/share/nginx/html/index.html

# index.html 예시 파일 생성
echo "<h1>Hello Docker Registry</h1>" > index.html

# 2. 이미지 빌드
docker build -t myapp:latest .

# 3. Private Registry 실행
docker run -d -p 5000:5000 --name registry registry:2

# 4. 이미지 태그
docker tag myapp:latest localhost:5000/myapp:latest

# 5. 이미지 푸쉬
docker push localhost:5000/myapp:latest

# (선택) 6. 다른 머신 또는 동일 머신에서 Pull
docker pull localhost:5000/myapp:latest
 
 

 

Docker Hub 및 Private Registry를 활용하면 이미지 관리와 배포가 효율적이고 체계적으로 이루어진다. 개발 환경 또는 팀 내부 배포 자동화를 위해 꼭 익혀두는 것이 좋다.

반응형

댓글