본문 바로가기
AI, 논문, 데이터 분석

[Docker] [실습4] Docker Hub

by doraemin_dev 2025. 1. 14.

 

컨테이너 레지스트리

  • 컨테이너 이미지 저장을 위한 리포지토리/리포지토리 컬렉션
  • 이미지 라이브러리 역할
  • 일관된 배포 단위 제공
  • 프로덕션 오케스트레이터 배포에 필요
  • 컨테이너 레지스트리 유형
    • 공용(Public) 레지스트리
    • 개인(Private) 레지스트리
  • 개인 레지스티리 사용 시나리오
    • 이미지 공개 공유 금지
    • 최소 네트워크 대기시간 필요

 

 

레지스트리 안의 여러 리포지토리가 존재한다. 그 중 하나의 리포지토리를 가져와서 컨테이너를 통해 실행한다.


[실습] Docker Hub Repository

1. 회원가입/로그인

 

2. Docker Hub로 이동 후, 로그인

3. Repository create

 

4. 도커이미지를 레지스트리에 등록하기(필요시로그인)

#0. Docker Hub 가입
#1. Docker Hub에 리포지토리 만들기
#2. 로그인
docker login -u doraemin

#3. 도커 이미지 태그 적용
# docker image tag guestbook-app:latest <DOCKER ACC.>/guestbook:latest
docker image tag guestbook-app:latest doraemin/guestbook:latest

#4. Docker Hub에 이미지 등록하기
# docker image push <DOCKER ACC.>/guestbook:latest
docker image push doraemin/guestbook:latest
더보기
PS C:\lab\day4> #0. Docker Hub 가입
PS C:\lab\day4> #1. Docker Hub에 리포지토리 만들기
PS C:\lab\day4> #2. 로그인
PS C:\lab\day4> docker login -u doraemin
Password: 
Login Succeeded
PS C:\lab\day4> 
PS C:\lab\day4> #3. 도커 이미지 태그 적용
PS C:\lab\day4> # docker image tag guestbook-app:latest <DOCKER ACC.>/guestbook:latest
PS C:\lab\day4> docker image tag guestbook-app:latest doraemin/guestbook:latest
PS C:\lab\day4> 
PS C:\lab\day4> #4. Docker Hub에 이미지 등록하기
PS C:\lab\day4> # docker image push <DOCKER ACC.>/guestbook:latest
PS C:\lab\day4> docker image push doraemin/guestbook:latest
The push refers to repository [docker.io/doraemin/guestbook]
2230e5957969: Waiting                                                                                                                                                    
4f4fb700ef54: Waiting                                                                                                                                                    
2230e5957969: Pushed
a539f5cbf305: Pushed
9a0b0ce99936: Pushed
f8f075920295: Pushed
1bff2228e48c: Pushed
627a2df19018: Pushed
aad1e8812bc2: Pushed
13fb072986db: Pushed
db3b6004c61a: Pushed
0bbd8b48260f: Pushed
524be717efb1: Pushed
6ef14aff1139: Pushed
latest: digest: sha256:a6efe6193dae25b0bb899cc250a86f8bbecdb6593bfbc4ca5410266673714924 size: 856

Docker Hub에 이미지가 등록되었다!

#5. 컨테이너 중지 및 삭제
docker stop guestbook-app
docker image rm guestbook-app
docker rm guestbook-app
docker image ls

#6. Docker Hub 리포지트리 방명록 이미지 가져와서 실행하기
docker pull doraemin/guestbook:latest
docker run --name guestbook-app -d -p 80:3000 doraemin/guestbook:latest


#1. Azure에 연결 (또는 포털 로그인)
az account clear
az login

#2. 레지스트리용 리소스 그룹 만들기 (또는 기존 리소스 그룹)
az group create --name rg-containerlab-kmkm --location koreacentral

#3. 기본 컨테이너 레지스트리를 만들기(또는 포털에서 만들기)
# ACR(Container Registry) 생성
# az acr create --resource-group rg-containerlab-kmkm --name crkmkm --sku Basic

#4. ACR 인스턴스에 로그인
# Docker Desktop 켜놓기
az acr login --name crkmkm

#5. 컨테이너 레지스트리 인스턴스의 전체 로그인 서버 이름 얻기 # ACR의 로그인 서버 이름 확인
az acr list --resource-group rg-containerlab-kmkm --query "[].{acrLoginServer:loginServer}" --output table

#6. ACR로그인 서버의 정규화된 이름을 사용하여 이미지 태그 지정. # Docker 이미지 태그 지정
#레지스트리에 이미지를 푸시하려면 먼저 ACR로그인 서버의 정규화된 이름을 태그로 사용해야 한다.
# docker tag guestbook-app crkmkm.azurecr.io/guestbook:v1
docker tag doraemin/guestbook:latest crkmkm.azurecr.io/guestbook:v1

#7 도커 이미지를 ACR에 등록하기
docker push crkmkm.azurecr.io/guestbook:v1
더보기
PS C:\lab\day4> #1. Azure에 연결 (또는 포털 로그인)
PS C:\lab\day4> az account clear
PS C:\lab\day4> az login
Select the account you want to log in with. For more information on login with Azure CLI, see https://go.microsoft.com/fwlink/?linkid=2271136

Retrieving tenants and subscriptions for the selection...

[Tenant and subscription selection]

No     Subscription name    Subscription ID                       Tenant
-----  -------------------  ------------------------------------  ----------
[1] *  SKT FLYAI 과정       f5bc93f2-df0a-4b1a-ab9e-2b0203fc7d26  서울대학교

The default is marked with an *; the default tenant is '서울대학교' and subscription is 'SKT FLYAI 과정' (f5bc93f2-df0a-4b1a-ab9e-2b0203fc7d26).

Select a subscription and tenant (Type a number or Enter for no changes): 1

Tenant: 서울대학교
Subscription: SKT FLYAI 과정 (f5bc93f2-df0a-4b1a-ab9e-2b0203fc7d26)

[Announcements]
With the new Azure CLI login experience, you can select the subscription you want to use more easily. Learn more about it and its configuration at https://go.microsoft.com/fwlink/?linkid=2271236

If you encounter any problem, please open an issue at https://aka.ms/azclibug

[Warning] The login output has been updated. Please be aware that it no longer displays the full list of available subscriptions by default.

PS C:\lab\day4> #2. 레지스트리용 리소스 그룹 만들기 (또는 기존 리소스 그룹)
PS C:\lab\day4> az group create --name rg-containerlab-kmkm --location koreacentral
{
  "id": "/subscriptions/f5bc93f2-df0a-4b1a-ab9e-2b0203fc7d26/resourceGroups/rg-containerlab-kmkm",
  "location": "koreacentral",
  "managedBy": null,
  "name": "rg-containerlab-kmkm",
  "properties": {
    "provisioningState": "Succeeded"
  },
  "tags": null,
  "type": "Microsoft.Resources/resourceGroups"
}

PS C:\lab\day4> #4. ACR 인스턴스에 로그인
PS C:\lab\day4> az acr login --name crkmkm
Login Succeeded

PS C:\lab\day4> #5. 컨테이너 레지스트리 인스턴스의 전체 로그인 서버 이름 얻기
PS C:\lab\day4> az acr list --resource-group rg-containerlab-kmkm --query "[].{acrLoginServer:loginServer}" --output table
AcrLoginServer
-----------------
crkmkm.azurecr.io

PS C:\lab\day4> #6. ACR로그인 서버의 정규화된 이름을 사용하여 이미지 태그 지정. 
PS C:\lab\day4> #레지스트리에 이미지를 푸시하려면 먼저 ACR로그인 서버의 정규화된 이름을 태그로 사용해야 한다.
PS C:\lab\day4> docker tag guestbook-app crkmkm.azurecr.io/guestbook:v1
Error response from daemon: No such image: guestbook-app:latest

PS C:\lab\day4> docker tag doraemin/guestbook:latest crkmkm.azurecr.io/guestbook:v1
PS C:\lab\day4> #7 도커 이미지를 ACR에 등록하기
PS C:\lab\day4> docker push crkmkm.azurecr.io/guestbook:v1
The push refers to repository [crkmkm.azurecr.io/guestbook]
627a2df19018: Waiting                                                                                                        
0bbd8b48260f: Waiting                                                                                                        
0bbd8b48260f: Pushed
981fbb111301: Pushed
9a0b0ce99936: Pushed
f8f075920295: Pushed
6ef14aff1139: Pushed
1bff2228e48c: Pushed
a539f5cbf305: Pushed
2230e5957969: Pushed
aad1e8812bc2: Pushed
4f4fb700ef54: Pushed
13fb072986db: Pushed
db3b6004c61a: Pushed
v1: digest: sha256:a6efe6193dae25b0bb899cc250a86f8bbecdb6593bfbc4ca5410266673714924 size: 856
PS C:\lab\day4>

#3. 기본 컨테이너 레지스트리를 만들기(또는 포털에서 만들기)

 

액세스 키 > 관리 사용자 '체크'

로그인 서버 : crkmkm.azurecr.io 이것이 네임 스페이스가 된다.

 

리포지토리가 생성되었다.

 

로컬에서는 삭제하자.


#8. 레지스트리의 리포지토리에서 업로드된 이미지 나열 (또는 포털 사용) # 업로드된 이미지 확인
az acr repository list --name crkmkm --output table

#9. 리포지토리의 태그 나열 # 이미지 태그 확인
az acr repository show-tags --name crkmkm --repository guestbook --output table

#10. 컨테이너 레지스트리에서 guestbook-app:v1 컨테이너 이미지를 끌어와 실행
# ACR에서 이미지 실행
# 로컬에서 먼저 찾는다. 근데 로컬에 없으니, crkmkm.azurecr.io로 가서 찾는다.
# docker stop iuguestbook
# docker rm iuguestbook
docker run -p 8080:3000 -d --name iuguestbook crkmkm.azurecr.io/guestbook:v1

#11. Admin 사용자 설정
#ACI나 AKS 등에서 ACR의 리포지토리를 액세스하려면 필수.
# az acr update --name crkmkm --admin-enabled true

#12. Admin 사용자의 암호 쿼리
az acr credential show --name crkmkm --query "passwords[0].value"

#13. Azure CLI로 빌드 및 배포를 한 방에 하기
# guestbook 파일이 있는 경로로 들어가야 한다.
az acr build -t crkmkm.azurecr.io/newguestbook:v1 -r crkmkm .
더보기
PS C:\lab\day4> #8. 레지스트리의 리포지토리에서 업로드된 이미지 나열 (또는 포털 사용)
PS C:\lab\day4> az acr repository list --name crkmkm --output table
Result
---------
guestbook
PS C:\lab\day4> #9. 리포지토리의 태그 나열
PS C:\lab\day4> az acr repository show-tags --name crkmkm --repository guestbook --output table
Result
--------
v1

PS C:\lab\day4> #10. 컨테이너 레지스트리에서 guestbook-app:v1 컨테이너 이미지를 끌어와 실행
PS C:\lab\day4> # 로컬에서 먼저 찾는다. 근데 로컬에 없으니, crkmkm.azurecr.io로 가서 찾는다.
PS C:\lab\day4> docker stop iuguestbook
iuguestbook
PS C:\lab\day4> docker rm iuguestbook
iuguestbook
PS C:\lab\day4> docker run -p 8080:3000 -d --name iuguestbook crkmkm.azurecr.io/guestbook:v1
cdf131efbff3af955b4daf4c9aad40dc598231fb912244ce09bd6061f45bb9fc

PS C:\lab\day4> az acr credential show --name crkmkm --query "passwords[0].value"
"ytXdM2FdR/M7dab/y22qfQ1auQ+iEDN4/lEOchKqgv+ACRBqRNot"

PS C:\lab\day5> cd guestbook
PS C:\lab\day5\guestbook> #13. Azure CLI로 빌드 및 배포를 한 방에 하기
PS C:\lab\day5\guestbook> az acr build -t crkmkm.azurecr.io/newguestbook:v1 -r crkmkm .
Packing source code into tar to upload...
Excluding '.gitignore' based on default ignore rules
Uploading archived source code from 'C:\Users\032\AppData\Local\Temp\build_archive_6d4f114e8b994c1292c7243e7c96746b.tar.gz'...
Sending context (8.147 KiB) to registry: crkmkm...
Queued a build with ID: de1
Waiting for an agent...
2025/01/14 07:49:22 Downloading source code...
2025/01/14 07:49:23 Finished downloading source code
2025/01/14 07:49:23 Using acb_vol_24161060-0792-4041-afa7-f4bd3e0e5345 as the home volume
2025/01/14 07:49:23 Setting up Docker configuration...
2025/01/14 07:49:24 Successfully set up Docker configuration
2025/01/14 07:49:24 Logging in to registry: crkmkm.azurecr.io
2025/01/14 07:49:24 Successfully logged into crkmkm.azurecr.io
2025/01/14 07:49:24 Executing step ID: build. Timeout(sec): 28800, Working directory: '', Network: ''
2025/01/14 07:49:24 Scanning for dependencies...
2025/01/14 07:49:25 Successfully scanned dependencies
2025/01/14 07:49:25 Launching container with name: build
Sending build context to Docker daemon  37.89kB
Step 1/8 : FROM node:10.16.3
10.16.3: Pulling from library/node
9a0b0ce99936: Pulling fs layer
db3b6004c61a: Pulling fs layer
f8f075920295: Pulling fs layer
6ef14aff1139: Pulling fs layer
0bbd8b48260f: Pulling fs layer
524be717efb1: Pulling fs layer
aad1e8812bc2: Pulling fs layer
13fb072986db: Pulling fs layer
627a2df19018: Pulling fs layer
6ef14aff1139: Waiting
0bbd8b48260f: Waiting
524be717efb1: Waiting
aad1e8812bc2: Waiting
13fb072986db: Waiting
627a2df19018: Waiting
f8f075920295: Verifying Checksum
f8f075920295: Download complete
db3b6004c61a: Verifying Checksum
db3b6004c61a: Download complete
9a0b0ce99936: Verifying Checksum
9a0b0ce99936: Download complete
6ef14aff1139: Verifying Checksum
6ef14aff1139: Download complete
524be717efb1: Verifying Checksum
524be717efb1: Download complete
13fb072986db: Verifying Checksum
13fb072986db: Download complete
aad1e8812bc2: Verifying Checksum
aad1e8812bc2: Download complete
627a2df19018: Verifying Checksum
627a2df19018: Download complete
0bbd8b48260f: Verifying Checksum
0bbd8b48260f: Download complete
9a0b0ce99936: Pull complete
db3b6004c61a: Pull complete
f8f075920295: Pull complete
6ef14aff1139: Pull complete
0bbd8b48260f: Pull complete
524be717efb1: Pull complete
aad1e8812bc2: Pull complete
13fb072986db: Pull complete
627a2df19018: Pull complete
Digest: sha256:f4b6f471cdd4b66b27eef899e7f8423ecd9fbfc863b2cb7a59978a7f64c8e0c3
Status: Downloaded newer image for node:10.16.3
 ---> a68faf70e589
Step 2/8 : RUN mkdir -p /app
 ---> Running in ffe4cabd6cbe
Removing intermediate container ffe4cabd6cbe
 ---> bcb2a6af629b
Step 3/8 : WORKDIR /app
 ---> Running in 253ca38a43eb
Removing intermediate container 253ca38a43eb
 ---> 666c601260ce
Step 4/8 : ADD . /app
 ---> 25218debce1d
Step 5/8 : RUN npm install
 ---> Running in 4cdad962dafb
added 53 packages from 38 contributors and audited 54 packages in 5.65s
found 13 vulnerabilities (5 low, 3 moderate, 4 high, 1 critical)
  run `npm audit fix` to fix them, or `npm audit` for details
Removing intermediate container 4cdad962dafb
 ---> 18e1b470f835
Step 6/8 : ENV NODE_ENV=development
 ---> Running in 13c135407983
Removing intermediate container 13c135407983
 ---> 844e2565e0fd
Step 7/8 : EXPOSE 3000 80
 ---> Running in 7372d5f20332
Removing intermediate container 7372d5f20332
 ---> dff9cc37b573
Step 8/8 : CMD ["npm","start"]
 ---> Running in cca772df5bb5
Removing intermediate container cca772df5bb5
 ---> b9c65a8c1296
Successfully built b9c65a8c1296
Successfully tagged crkmkm.azurecr.io/newguestbook:v1
2025/01/14 07:49:57 Successfully executed container: build
2025/01/14 07:49:57 Executing step ID: push. Timeout(sec): 3600, Working directory: '', Network: ''
2025/01/14 07:49:57 Pushing image: crkmkm.azurecr.io/newguestbook:v1, attempt 1
The push refers to repository [crkmkm.azurecr.io/newguestbook]
633be6311ec4: Preparing
1db4e4128378: Preparing
aef738780fd8: Preparing
4af45d82c6e8: Preparing
35dc986a1895: Preparing
daca4f0b76e3: Preparing
799e7111d6d4: Preparing
a72a7e555fe1: Preparing
b8f8aeff56a8: Preparing
687890749166: Preparing
2f77733e9824: Preparing
97041f29baff: Preparing
a72a7e555fe1: Waiting
b8f8aeff56a8: Waiting
daca4f0b76e3: Waiting
799e7111d6d4: Waiting
687890749166: Waiting
2f77733e9824: Waiting
97041f29baff: Waiting
aef738780fd8: Pushed
1db4e4128378: Pushed
4af45d82c6e8: Pushed
633be6311ec4: Pushed
35dc986a1895: Pushed
799e7111d6d4: Pushed
687890749166: Pushed
2f77733e9824: Pushed
daca4f0b76e3: Pushed
b8f8aeff56a8: Pushed
97041f29baff: Pushed
a72a7e555fe1: Pushed
v1: digest: sha256:8d9f2daceff70d7bfaefdf4b168a84f20e3906ddd54a01f84930975669ac5f0b size: 2840
2025/01/14 07:50:28 Successfully pushed image: crkmkm.azurecr.io/newguestbook:v1
2025/01/14 07:50:28 Step ID: build marked as successful (elapsed time in seconds: 32.390153)
2025/01/14 07:50:28 Populating digests for step ID: build...
2025/01/14 07:50:29 Successfully populated digests for step ID: build
2025/01/14 07:50:29 Step ID: push marked as successful (elapsed time in seconds: 31.491920)
2025/01/14 07:50:29 The following dependencies were found:
2025/01/14 07:50:29
- image:
    registry: crkmkm.azurecr.io
    repository: newguestbook
    tag: v1
    digest: sha256:8d9f2daceff70d7bfaefdf4b168a84f20e3906ddd54a01f84930975669ac5f0b
  runtime-dependency:
    registry: registry.hub.docker.com
    repository: library/node
    tag: 10.16.3
    digest: sha256:f4b6f471cdd4b66b27eef899e7f8423ecd9fbfc863b2cb7a59978a7f64c8e0c3
  git: {}


Run ID: de1 was successful after 1m7s
PS C:\lab\day5\guestbook>