도커 이미지를 다른 사람과 공유하거나 배포하려면, 이미지 파일을 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를 활용하면 이미지 관리와 배포가 효율적이고 체계적으로 이루어진다. 개발 환경 또는 팀 내부 배포 자동화를 위해 꼭 익혀두는 것이 좋다.
'Infra > Docker & Kubernetes' 카테고리의 다른 글
Docker CLI 명령어 총정리 (0) | 2025.06.17 |
---|---|
Docker 이미지 구조와 흐름 이해하기 (0) | 2025.06.06 |
Docker란? 컨테이너 기반 가상화 플랫폼의 핵심 이해 (1) | 2025.05.31 |
컨테이너란? 개발자라면 꼭 알아야 할 기초 개념 (5) | 2025.05.29 |
댓글