-
5. Docker Registry๋? Docker Hub์ ์ด๋ฏธ์ง ์ ์ฅ์ ์ดํดํ๊ธฐDevOps 2026. 7. 23. 10:10

๐ Docker & Kubernetes ์๋ฆฌ์ฆ
์ด์ ๊ธ์์๋ Spring Boot ์์ค๋ฅผ ์์ ํ ๋ค ๋ณ๊ฒฝ ์ฌํญ์ Docker Container์ ๋ฐ์ํ๋ ๊ณผ์ ์ ์์๋ดค๋ค.
์์ค๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋ก์ด JAR ํ์ผ์ ์์ฑํ๊ณ , ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์๋ก์ด Docker Image๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ด๋ ๊ฒ ์์ฑํ Docker Image๋ ์ด๋์ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ๊น?
๊ฐ๋ฐ์ ๊ฐ์ธ์ PC์์๋ ๋ก์ปฌ์ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ ์ ์์ง๋ง, ์ฌ๋ฌ ๊ฐ๋ฐ์๊ฐ ํจ๊ป ์ฌ์ฉํ๊ฑฐ๋ ๊ฐ๋ฐ·์คํ ์ด์ง·์ด์ ํ๊ฒฝ์ ๋ฐฐํฌํ๋ ค๋ฉด ์ด๋ฏธ์ง๋ฅผ ๊ณต์ ํ ์ ์๋ ์ ์ฅ์๊ฐ ํ์ํ๋ค.
์ด๋ ์ฌ์ฉํ๋ ๊ฒ์ด Docker Registry์ด๋ค.
์ด๋ฒ ๊ธ์์๋ Docker Registry์ ๊ฐ๋ ๊ณผ Docker Hub๋ฅผ ์ด์ฉํด ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๊ณ ๋ด๋ ค๋ฐ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์.
Docker Image๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ก์ปฌ์ ์ ์ฅ๋๋ค
๋จผ์ Docker Image๋ฅผ ์์ฑํด ๋ณด์.
docker build -t my-spring-app .๋น๋๊ฐ ์๋ฃ๋ ํ ๋ค์ ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ํ์ฌ ๋ก์ปฌ ํ๊ฒฝ์ ์ ์ฅ๋ ์ด๋ฏธ์ง๋ฅผ ํ์ธํ ์ ์๋ค.
docker images์คํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๋น์ทํ๋ค.
REPOSITORY TAG IMAGE ID CREATED SIZE my-spring-app latest 9f18c12ab123 10 seconds ago 280MB์ด ์ํ์์ my-spring-app ์ด๋ฏธ์ง๋ ํ์ฌ Docker๋ฅผ ์คํํ PC์๋ง ์กด์ฌํ๋ค.
๋ค๋ฅธ ๊ฐ๋ฐ์์ PC๋ ์ด์ ์๋ฒ์์๋ ์ด ์ด๋ฏธ์ง๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
์ด๋ฏธ์ง๋ฅผ ๋ค๋ฅธ ํ๊ฒฝ์์๋ ์ฌ์ฉํ๋ ค๋ฉด ๊ณต์ฉ ๋๋ ์ฌ์ค ์ด๋ฏธ์ง ์ ์ฅ์์ ์ ๋ก๋ํด์ผ ํ๋ค.
Docker Registry๋?
Docker Registry๋ Docker Image๋ฅผ ์ ์ฅํ๊ณ ๋ฐฐํฌํ๋ ์ ์ฅ์์ด๋ค.
์์ค ์ฝ๋๋ฅผ GitHub๋ GitLab๊ณผ ๊ฐ์ Git ์ ์ฅ์์ ์ ์ฅํ๋ ๊ฒ์ฒ๋ผ, Docker Image๋ Docker Registry์ ์ ์ฅํ๋ค.
์ญํ ์ ๋น๊ตํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
Git Repository → ์์ค ์ฝ๋ ์ ์ฅ ๋ฐ ๊ณต์ Docker Registry → Docker Image ์ ์ฅ ๋ฐ ๊ณต์Docker Registry๋ฅผ ์ฌ์ฉํ๋ฉด ๊ฐ๋ฐ์๊ฐ ๋ง๋ ์ด๋ฏธ์ง๋ฅผ ์๋ฒ๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ ๋ด๋ ค๋ฐ์ ๋์ผํ ํ๊ฒฝ์์ ์คํํ ์ ์๋ค.
์ ์ฒด ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
Spring Boot ์์ค โ โผ Gradle Build โ โผ JAR ์์ฑ โ โผ Docker Build โ โผ Docker Image ์์ฑ โ โผ Docker Registry์ Push โ โผ ๋ฐฐํฌ ์๋ฒ์์ Pull โ โผ Container ์คํ
Repository์ Registry์ ์ฐจ์ด
Docker๋ฅผ ์ฒ์ ์ ํ๋ฉด Registry์ Repository๋ฅผ ํผ๋ํ๊ธฐ ์ฝ๋ค.
Registry๋ ์ฌ๋ฌ Docker Image๋ฅผ ์ ์ฅํ๋ ์ ์ฒด ์๋น์ค์ด๊ณ , Repository๋ Registry ์์์ ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฏธ์ง๋ฅผ ๊ด๋ฆฌํ๋ ๊ณต๊ฐ์ด๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ ์ด๋ฏธ์ง ์ด๋ฆ์ด ์๋ค๊ณ ํ์.
username/my-spring-app:1.0.0๊ฐ ๋ถ๋ถ์ ์๋ฏธ๋ ๋ค์๊ณผ ๊ฐ๋ค.
username → Registry ๋ด ์ฌ์ฉ์ ๋๋ ์กฐ์ง ์ด๋ฆ my-spring-app → Repository ์ด๋ฆ 1.0.0 → Image Tagํ๋์ Repository์๋ ์ฌ๋ฌ ๋ฒ์ ์ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ ์ ์๋ค.
username/my-spring-app:1.0.0 username/my-spring-app:1.1.0 username/my-spring-app:latest์ฆ, ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ผ๋ Tag๋ฅผ ์ด์ฉํด ์ฌ๋ฌ ๋ฒ์ ์ ์ด๋ฏธ์ง๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.
Image Tag๋?
Docker Image์ Tag๋ ์ด๋ฏธ์ง์ ๋ฒ์ ์ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
์ด๋ฏธ์ง ์ด๋ฆ ๋ค์ :์ ๋ถ์ฌ ์ง์ ํ๋ค.
my-spring-app:1.0.0 my-spring-app:1.1.0 my-spring-app:dev my-spring-app:stg my-spring-app:latestTag๋ฅผ ์๋ตํ๋ฉด ๊ธฐ๋ณธ๊ฐ์ผ๋ก latest๊ฐ ์ฌ์ฉ๋๋ค.
docker build -t my-spring-app .์ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๊ฐ์ ์๋ฏธ์ด๋ค.
my-spring-app:latestํ์ง๋ง ์ด์ ํ๊ฒฝ์์๋ latest๋ง ์ฌ์ฉํ๋ ๊ฒ๋ณด๋ค ๋ฐฐํฌ ๋ฒ์ ์ ์๋ณํ ์ ์๋ Tag๋ฅผ ์ง์ ํ๋ ๊ฒ์ด ์ข๋ค.
์๋ฅผ ๋ค์ด ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉํ ์ ์๋ค.
my-spring-app:1.0.0 my-spring-app:20260723 my-spring-app:build-152 my-spring-app:a1b2c3dGit Commit Hash๋ Jenkins Build Number๋ฅผ Tag๋ก ์ฌ์ฉํ๋ฉด ์ด๋ค ์์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ฑ๋ ์ด๋ฏธ์ง์ธ์ง ์ถ์ ํ๊ธฐ ์ฝ๋ค.
Docker Hub๋?
Docker Hub๋ Docker์์ ์ ๊ณตํ๋ ๋ํ์ ์ธ ๊ณต๊ฐ Registry ์๋น์ค์ด๋ค.
Docker Hub์๋ ์ง์ ๋ง๋ ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํ ์๋ ์๊ณ , ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ๋ง๋ ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ์ ์ฌ์ฉํ ์๋ ์๋ค.
Dockerfile์์ ์์ฃผ ์ฌ์ฉํ๋ ๋ค์ ์ด๋ฏธ์ง๋ Registry์์ ๋ด๋ ค๋ฐ๋ ์ด๋ฏธ์ง์ด๋ค.
FROM eclipse-temurin:21-jre๋ณ๋์ Registry ์ฃผ์๋ฅผ ์์ฑํ์ง ์์ผ๋ฉด Docker๋ ๊ธฐ๋ณธ์ ์ผ๋ก Docker Hub์์ ์ด๋ฏธ์ง๋ฅผ ์ฐพ๋๋ค.
๋ฐ๋ผ์ ์ ์ฝ๋๋ Docker Hub์ ์ ์ฅ๋ eclipse-temurin:21-jre ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ ์ด๋ฏธ์ง๋ก ์ฌ์ฉํ๋ค๋ ์๋ฏธ์ด๋ค.
Docker Hub์์ Image๋ฅผ ๋ด๋ ค๋ฐ๋ ๋ฐฉ๋ฒ
Docker Registry์์ ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ์ ๋๋ docker pull ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํ๋ค.
docker pull eclipse-temurin:21-jreSpring Boot ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ๋๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์์ฑํ ์ ์๋ค.
docker pull username/my-spring-app:1.0.0๋ด๋ ค๋ฐ์ ์ด๋ฏธ์ง๋ ๋ก์ปฌ์ ์ ์ฅ๋๋ค.
docker images์ดํ ํด๋น ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก Container๋ฅผ ์คํํ ์ ์๋ค.
docker run -d \ --name my-spring-app \ -p 8080:8080 \ username/my-spring-app:1.0.0
Docker Hub์ Image๋ฅผ ์ ๋ก๋ํ๋ ๋ฐฉ๋ฒ
์ด๋ฒ์๋ ์ง์ ๋ง๋ Spring Boot ์ด๋ฏธ์ง๋ฅผ Docker Hub์ ์ ๋ก๋ํด ๋ณด์.
๋จผ์ Docker Hub ๊ณ์ ์ผ๋ก ๋ก๊ทธ์ธํ๋ค.
docker login๋ก๊ทธ์ธ์ด ์๋ฃ๋๋ฉด ๋ก์ปฌ ์ด๋ฏธ์ง์ Docker Hub Repository ์ด๋ฆ์ ์ง์ ํด์ผ ํ๋ค.
ํ์ฌ ๋ก์ปฌ ์ด๋ฏธ์ง๊ฐ ๋ค์๊ณผ ๊ฐ๋ค๊ณ ๊ฐ์ ํด ๋ณด์.
my-spring-app:latestDocker Hub์ ์ ๋ก๋ํ๋ ค๋ฉด ์ฌ์ฉ์ ์ด๋ฆ์ ํฌํจํ ํํ๋ก Tag๋ฅผ ๋ค์ ์ง์ ํ๋ค.
docker tag my-spring-app:latest username/my-spring-app:1.0.0์ด ๋ช ๋ น์ด๋ ๊ธฐ์กด ์ด๋ฏธ์ง ํ์ผ์ ๋ณต์ฌํ๋ ๊ฒ์ด ์๋๋ผ ๋์ผํ ์ด๋ฏธ์ง์ ์๋ก์ด ์ด๋ฆ๊ณผ Tag๋ฅผ ์ถ๊ฐํ๋ค.
ํ์ธํด ๋ณด๋ฉด ๋์ผํ Image ID๋ฅผ ๊ฐ์ง ์ด๋ฏธ์ง๊ฐ ํ์๋๋ค.
docker imagesREPOSITORY TAG IMAGE ID my-spring-app latest 9f18c12ab123 username/my-spring-app 1.0.0 9f18c12ab123์ด์ docker push ๋ช ๋ น์ด๋ก ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํ๋ค.
docker push username/my-spring-app:1.0.0์ ๋ก๋๊ฐ ์๋ฃ๋๋ฉด ๋ค๋ฅธ PC๋ ์๋ฒ์์๋ ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ์ ์ฌ์ฉํ ์ ์๋ค.
docker pull username/my-spring-app:1.0.0
Docker Push์ Pull
Docker Registry์์ ์์ฃผ ์ฌ์ฉํ๋ ๋ช ๋ น์ push์ pull์ด๋ค.
docker push → ๋ก์ปฌ Image๋ฅผ Registry์ ์ ๋ก๋ docker pull → Registry์ Image๋ฅผ ๋ก์ปฌ๋ก ๋ค์ด๋ก๋ํ๋ฆ์ผ๋ก ํํํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
๊ฐ๋ฐ์ PC โ โ docker push โผ Docker Registry โ โ docker pull โผ ๊ฐ๋ฐ·์คํ ์ด์ง·์ด์ ์๋ฒ์ด๋ฅผ ํตํด ์ฌ๋ฌ ํ๊ฒฝ์์ ๋์ผํ Docker Image๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
Public Registry์ Private Registry
Docker Registry๋ ๊ณต๊ฐ ๋ฒ์์ ๋ฐ๋ผ Public Registry์ Private Registry๋ก ๋๋ ์ ์๋ค.
Public Registry
๋๊ตฌ๋ ์ ๊ทผํ ์ ์๋ ๊ณต๊ฐ ์ด๋ฏธ์ง ์ ์ฅ์์ด๋ค.
๋ํ์ ์ธ ์๋ก Docker Hub์ Public Repository๊ฐ ์๋ค.
Java, Ubuntu, Nginx, MySQL ๋ฑ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ฉํ๋ ๊ณต์ ์ด๋ฏธ์ง๋ฅผ ๊ณต๊ฐ Registry์์ ๋ด๋ ค๋ฐ์ ์ฌ์ฉํ ์ ์๋ค.
docker pull nginx docker pull mysql docker pull eclipse-temurin:21-jrePrivate Registry
์ธ์ฆ๋ ์ฌ์ฉ์๋ง ์ ๊ทผํ ์ ์๋ ์ฌ์ค ์ด๋ฏธ์ง ์ ์ฅ์์ด๋ค.
๊ธฐ์ ์ ์ ํ๋ฆฌ์ผ์ด์ ์๋ ๋ด๋ถ ์์ค์ ์ค์ ๊ตฌ์กฐ๊ฐ ํฌํจ๋ ์ ์์ผ๋ฏ๋ก ์ผ๋ฐ์ ์ผ๋ก Private Registry๋ฅผ ์ฌ์ฉํ๋ค.
๋ํ์ ์ธ Registry ์๋น์ค๋ ๋ค์๊ณผ ๊ฐ๋ค.
Docker Hub Private Repository Harbor AWS ECR Google Artifact Registry Azure Container Registry GitLab Container Registryํ์ฌ ๋ด๋ถ์์ Harbor๋ฅผ ๊ตฌ์ถํด ์ฌ์ฉํ๊ฑฐ๋ ํด๋ผ์ฐ๋ ํ๊ฒฝ์์ AWS ECR๊ณผ ๊ฐ์ ๊ด๋ฆฌํ Registry๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
Harbor๋?
Harbor๋ ์คํ์์ค ๊ธฐ๋ฐ์ Private Container Registry์ด๋ค.
๊ธฐ์ ๋ด๋ถ์์ Docker Image๋ฅผ ์ ์ฅํ๊ณ ๊ด๋ฆฌํ ๋ ์์ฃผ ์ฌ์ฉ๋๋ค.
๋จ์ํ ์ด๋ฏธ์ง๋ฅผ ์ ์ฅํ๋ ๊ฒ๋ฟ๋ง ์๋๋ผ ๋ค์๊ณผ ๊ฐ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์ฌ์ฉ์ ๋ฐ ํ๋ก์ ํธ ๊ถํ ๊ด๋ฆฌ Private Repository ๊ด๋ฆฌ Image ์ทจ์ฝ์ ๊ฒ์ฌ Image ๋ณต์ ์ ๊ทผ ์ด๋ ฅ ๊ด๋ฆฌ Image ๋ณด์กด ์ ์ฑ ๊ด๋ฆฌDocker Hub๊ฐ ์ธ๋ถ์์ ์ ๊ณต๋๋ Registry ์๋น์ค๋ผ๋ฉด, Harbor๋ ํ์ฌ ๋ด๋ถ ํ๊ฒฝ์ ์ง์ ๊ตฌ์ถํด ์ฌ์ฉํ ์ ์๋ Registry๋ผ๊ณ ์ดํดํ ์ ์๋ค.
AWS ECR์ด๋?
AWS ECR์ Amazon Web Services์์ ์ ๊ณตํ๋ Container Registry์ด๋ค.
ECR์ Elastic Container Registry์ ์ฝ์์ด๋ค.
AWS ํ๊ฒฝ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด์ํ๋ค๋ฉด Docker Image๋ฅผ ECR์ ์ ์ฅํ๊ณ , Amazon EKS๋ ECS์์ ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ์ ์คํํ ์ ์๋ค.
์ ์ฒด ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
Jenkins โ โผ Docker Image Build โ โผ AWS ECR Push โ โผ Amazon EKS ๋๋ ECS โ โผ Container ์คํ์ง์ Registry ์๋ฒ๋ฅผ ์ค์นํ๊ณ ๊ด๋ฆฌํ์ง ์์๋ ๋๋ค๋ ์ฅ์ ์ด ์๋ค.
์ค๋ฌด์์๋ ์ด๋ป๊ฒ ์ฌ์ฉํ ๊น?
์ค๋ฌด์์๋ ๊ฐ๋ฐ์๊ฐ ์ง์ ์ด๋ฏธ์ง๋ฅผ ๋น๋ํ๊ณ Registry์ ์ ๋ก๋ํ๋ ๊ณผ์ ์ CI ๋๊ตฌ๊ฐ ์๋์ผ๋ก ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
์๋ฅผ ๋ค์ด Jenkins๋ฅผ ์ฌ์ฉํ๋ ํ๊ฒฝ์์๋ ๋ค์๊ณผ ๊ฐ์ ํ๋ฆ์ผ๋ก ๋์ํ ์ ์๋ค.
๊ฐ๋ฐ์๊ฐ Git Push โ โผ Jenkins Pipeline ์คํ โ โผ Gradle Build โ โผ JAR ์์ฑ โ โผ Docker Image Build โ โผ Image Tag ์ง์ โ โผ Private Registry์ PushJenkins๋ ๋น๋ ๋ฒํธ๋ Git Commit Hash๋ฅผ ์ด์ฉํด ์ด๋ฏธ์ง Tag๋ฅผ ์์ฑํ ์ ์๋ค.
my-spring-app:build-152 my-spring-app:a1b2c3dRegistry์ ์ด๋ฏธ์ง๊ฐ ์ ๋ก๋๋๋ฉด Kubernetes๊ฐ ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ์ ์๋ก์ด Pod๋ฅผ ์คํํ๋ค.
Private Registry โ โ Image Pull โผ Kubernetes โ โผ ์๋ก์ด Pod ์์ฑ โ โผ Health Check โ โผ ์ ์ Pod๋ฅผ ์๋น์ค์ ์ฐ๊ฒฐArgo CD๋ฅผ ์ฌ์ฉํ๋ ํ๊ฒฝ์์๋ Kubernetes ๋ฐฐํฌ ์ค์ ์ด ์ ์ฅ๋ Git Repository์ ๋ณ๊ฒฝ ์ฌํญ์ ๊ธฐ์ค์ผ๋ก ๋ฐฐํฌ ์ํ๋ฅผ ๋๊ธฐํํ ์ ์๋ค.
์๋ฅผ ๋ค์ด ๋ฐฐํฌ ์ค์ ์ Image Tag๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ๋ ์ ์๋ค.
containers: - name: my-spring-app image: registry.example.com/my-spring-app:build-152Argo CD๊ฐ ํด๋น ๋ณ๊ฒฝ ์ฌํญ์ Kubernetes์ ๋ฐ์ํ๋ฉด Kubernetes๋ Registry์์ ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ์ ์๋ก์ด Pod๋ฅผ ์์ฑํ๋ค.
์๋ก์ด Pod์ Health Check๊ฐ ์ ์์ ์ผ๋ก ์๋ฃ๋๋ฉด ํธ๋ํฝ์ด ์ Pod๋ก ์ฐ๊ฒฐ๋๊ณ , ๊ธฐ์กด Pod๋ ์์ฐจ์ ์ผ๋ก ์ข ๋ฃ๋๋ค.
Registry๊ฐ ํ์ํ ์ด์
Docker Registry๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ๋จ์ํ ์ด๋ฏธ์ง๋ฅผ ๋ณด๊ดํ๊ธฐ ์ํด์๋ง์ ์๋๋ค.
๋์ผํ ์คํ ํ๊ฒฝ ์ ์ง
๊ฐ๋ฐ, ์คํ ์ด์ง, ์ด์ ํ๊ฒฝ์ด ๋์ผํ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ฏ๋ก ํ๊ฒฝ ์ฐจ์ด๋ก ์ธํ ๋ฌธ์ ๋ฅผ ์ค์ผ ์ ์๋ค.
๊ฐ๋ฐ ํ๊ฒฝ → my-spring-app:1.0.0 ์คํ ์ด์ง ํ๊ฒฝ → my-spring-app:1.0.0 ์ด์ ํ๊ฒฝ → my-spring-app:1.0.0ํ๊ฒฝ๋ง๋ค ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ค์ ๋น๋ํ๋ ๊ฒ์ด ์๋๋ผ, ํ ๋ฒ ์์ฑํ ์ด๋ฏธ์ง๋ฅผ ๊ฐ ํ๊ฒฝ์์ ๋์ผํ๊ฒ ์ฌ์ฉํ๋ค.
๋ฒ์ ๊ด๋ฆฌ
Tag๋ฅผ ์ด์ฉํด ์ ํ๋ฆฌ์ผ์ด์ ๋ฒ์ ์ ๊ด๋ฆฌํ ์ ์๋ค.
my-spring-app:1.0.0 my-spring-app:1.1.0 my-spring-app:1.2.0๋ฐฐํฌ ์ด๋ ฅ ์ถ์
์ด๋ค ์ด๋ฏธ์ง๊ฐ ์ธ์ ๋ฐฐํฌ๋์๋์ง ํ์ธํ ์ ์๋ค.
Git Commit Hash๋ Jenkins Build Number๋ฅผ Tag์ ํฌํจํ๋ฉด ์์ค ์ฝ๋์ Docker Image๋ฅผ ์ฐ๊ฒฐํด ์ถ์ ํ๊ธฐ ์ฌ์์ง๋ค.
์ด์ ๋ฒ์ ์ผ๋ก ๋ณต๊ตฌ
์ ๊ท ๋ฒ์ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด ๊ธฐ์กด ์ด๋ฏธ์ง๋ก ๋ค์ ๋ฐฐํฌํ ์ ์๋ค.
ํ์ฌ ๋ฐฐํฌ ๋ฒ์ → my-spring-app:1.2.0 ๋ฌธ์ ๋ฐ์ ํ ์ด์ ๋ฒ์ ์ผ๋ก ๋ณต๊ตฌ → my-spring-app:1.1.0๋ค๋ง ์ค์ ์ด์ ํ๊ฒฝ์ ๋ณต๊ตฌ ๊ฐ๋ฅ ์ฌ๋ถ๋ ์ ํ๋ฆฌ์ผ์ด์ ๋ฟ๋ง ์๋๋ผ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ณ๊ฒฝ ์ฌํญ๊ณผ ์ธ๋ถ ์์คํ ํธํ์ฑ๋ ํจ๊ป ๊ณ ๋ คํด์ผ ํ๋ค.
latest Tag ์ฌ์ฉ ์ ์ฃผ์ํ ์
latest๋ ๊ฐ์ฅ ์ต์ ์ด๋ฏธ์ง๋ฅผ ์๋์ผ๋ก ์๋ฏธํ๋ ํน๋ณํ ๋ฒ์ ๊ด๋ฆฌ ๊ธฐ๋ฅ์ด ์๋๋ค.
Tag๋ฅผ ์๋ตํ์ ๋ ์ฌ์ฉ๋๋ ๊ธฐ๋ณธ ์ด๋ฆ์ ๊ฐ๊น๋ค.
docker build -t my-spring-app .์ ๋ช ๋ น์ด๋ ๋ค์๊ณผ ๋์ผํ๋ค.
docker build -t my-spring-app:latest .latest Tag์ ์๋ก์ด ์ด๋ฏธ์ง๋ฅผ ๊ณ์ ๋ฎ์ด์ฐ๋ฉด ํ์ฌ ๋ฐฐํฌ๋ ์ด๋ฏธ์ง๊ฐ ์ด๋ค ์์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ง๋ค์ด์ก๋์ง ํ์ ํ๊ธฐ ์ด๋ ค์ธ ์ ์๋ค.
๋ํ ๊ฐ์ Tag๋ฅผ ์ฌ์ฉํ๋๋ผ๋ ์คํ ํ๊ฒฝ์ ์ด์ ์ด๋ฏธ์ง๊ฐ ๋จ์ ์์ผ๋ฉด ์์ํ ์ด๋ฏธ์ง์ ๋ค๋ฅธ ๋ฒ์ ์ด ์ฌ์ฉ๋๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๋ฐ๋ผ์ ์ค๋ฌด์์๋ ๊ณ ์ ํ Tag๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
my-spring-app:1.0.0 my-spring-app:build-152 my-spring-app:20260723-1530 my-spring-app:a1b2c3d์ด์ ๋ฐฐํฌ์์๋ ๋ณ๊ฒฝ๋์ง ์๋ ๊ณ ์ Tag๋ฅผ ์ฌ์ฉํ๊ณ , ํ์ํ ๊ฒฝ์ฐ ๋ณ๋๋ก latest, dev, stg์ ๊ฐ์ ๋ณ์นญ Tag๋ฅผ ํจ๊ป ๊ด๋ฆฌํ ์ ์๋ค.
์์ฃผ ์ฌ์ฉํ๋ Docker Registry ๋ช ๋ น์ด
Docker Hub ๋ก๊ทธ์ธ
docker loginImage์ ์๋ก์ด Tag ์ง์
docker tag my-spring-app:latest username/my-spring-app:1.0.0Registry์ Image ์ ๋ก๋
docker push username/my-spring-app:1.0.0Registry์์ Image ๋ค์ด๋ก๋
docker pull username/my-spring-app:1.0.0๋ก์ปฌ Image ํ์ธ
docker images๋ก์ปฌ Image ์ญ์
docker rmi username/my-spring-app:1.0.0
์ ์ฒด ํ๋ฆ ์ ๋ฆฌ
Spring Boot ์ ํ๋ฆฌ์ผ์ด์ ์ด Docker Registry๋ฅผ ๊ฑฐ์ณ ๋ฐฐํฌ๋๋ ์ ์ฒด ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ๋ค.
Spring Boot ์์ค ์์ โ โผ Gradle Build โ โผ JAR ์์ฑ โ โผ Docker Image Build โ โผ Image Tag ์ง์ โ โผ Docker Registry์ Push โ โผ ๋ฐฐํฌ ํ๊ฒฝ์์ Image Pull โ โผ ์๋ก์ด Container ๋๋ Pod ์คํ โ โผ Health Check โ โผ ์๋น์ค ๋ฐ์Docker Registry๋ ๊ฐ๋ฐ์๊ฐ ๋ง๋ Docker Image๋ฅผ ์ ์ฅํ๊ณ , ์ฌ๋ฌ ์คํ ํ๊ฒฝ์ ๋์ผํ ์ด๋ฏธ์ง๋ฅผ ์ ๋ฌํ๋ ์ญํ ์ ํ๋ค.
์ ๋ฆฌ
Docker Image๋ ์ด๋ฏธ์ง๋ฅผ ์์ฑํ ๋ก์ปฌ ํ๊ฒฝ์๋ง ์ ์ฅ๋๋ค.
๋ค๋ฅธ ๊ฐ๋ฐ์๋ ์๋ฒ์์ ๋์ผํ ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด Docker Registry์ ์ด๋ฏธ์ง๋ฅผ ์ ๋ก๋ํด์ผ ํ๋ค.
Docker Registry์ ๊ด๋ จ๋ ํต์ฌ ๊ฐ๋ ์ ๋ค์๊ณผ ๊ฐ๋ค.
Registry → Docker Image๋ฅผ ์ ์ฅํ๊ณ ๋ฐฐํฌํ๋ ์ ์ฒด ์๋น์ค Repository → ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ด๋ฏธ์ง๋ฅผ ๊ด๋ฆฌํ๋ ๊ณต๊ฐ Tag → Image์ ๋ฒ์ ๋๋ ๋น๋๋ฅผ ๊ตฌ๋ถํ๋ ๊ฐ Push → ๋ก์ปฌ Image๋ฅผ Registry์ ์ ๋ก๋ Pull → Registry์ Image๋ฅผ ๋ก์ปฌ๋ก ๋ค์ด๋ก๋Docker Hub๋ ๋ํ์ ์ธ Public Registry์ด๋ฉฐ, ๊ธฐ์ ํ๊ฒฝ์์๋ Harbor, AWS ECR, GitLab Container Registry ๋ฑ์ Private Registry๋ฅผ ์ฌ์ฉํ ์ ์๋ค.
์ค๋ฌด์์๋ Jenkins๊ฐ Docker Image๋ฅผ ๋น๋ํด Registry์ ์ ๋ก๋ํ๊ณ , Kubernetes๊ฐ ํด๋น ์ด๋ฏธ์ง๋ฅผ ๋ด๋ ค๋ฐ์ ์๋ก์ด Pod๋ฅผ ์คํํ๋ ๋ฐฉ์์ผ๋ก ๋ฐฐํฌ๊ฐ ์ด๋ฃจ์ด์ง๋ค.
๊ฒฐ๊ตญ Docker Registry๋ Docker Image๋ฅผ ๊ฐ๋ฐ ํ๊ฒฝ์์ ์คํ ์ด์ง์ ์ด์ ํ๊ฒฝ๊น์ง ์ ๋ฌํ๋ ์ค๊ฐ ์ ์ฅ์๋ผ๊ณ ํ ์ ์๋ค.
๋ค์ ๊ธ
์ง๊ธ๊น์ง Docker Image๋ฅผ ์์ฑํ๊ณ Registry์ ์ ์ฅํ๋ ๊ณผ์ ์ ์์๋ดค๋ค.
๊ทธ๋ ๋ค๋ฉด ๊ฐ๋ฐ์๊ฐ ์์ค๋ฅผ Git์ Pushํ ์ดํ, ์ ํ๋ฆฌ์ผ์ด์ ๋น๋์ Docker Image ์ ๋ก๋๋ ๋๊ฐ ์ํํ ๊น?
“Jenkins์ Argo CD๋ ๊ฐ๊ฐ ์ด๋ค ์ญํ ์ ํ ๊น?”
๋ค์ ๊ธ์์๋ Jenkins์ Argo CD๋ก ์ดํดํ๋ CI/CD๋ฅผ ์ฃผ์ ๋ก, ์์ค ์ฝ๋๊ฐ Docker Image๋ก ๋ง๋ค์ด์ง๊ณ Kubernetes์ ๋ฐฐํฌ๋๋ ์ ์ฒด ํ๋ฆ์ ์์๋ณด๊ฒ ๋ค.
'DevOps' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
7. Kubernetes๋? Pod์ Node ์ดํดํ๊ธฐ (0) 2026.07.24 6. Jenkins์ Argo CD๋ก ์ดํดํ๋ CI/CD (0) 2026.07.23 4. ์์ค๋ฅผ ์์ ํ๋ฉด Docker๋ ์ด๋ป๊ฒ ๋์ํ ๊น? (0) 2026.07.23 3. Dockerfile์ด๋? Spring Boot ์ด๋ฏธ์ง ๋ง๋ค๊ธฐ (0) 2026.07.22 2. Docker๋? ์ด๋ฏธ์ง(Image)์ ์ปจํ ์ด๋(Container) ์ดํดํ๊ธฐ (0) 2026.07.22