λλ μμ§ μ΄κ²μ λν΄ λ¬΄μμν΄μΌν μ§ νμ νμ§ λͺ»νκΈ° λλ¬Έμ ν λ‘ μ μν΄ λ¬λ € μμ΅λλ€.
ACR μ°κ²°λ‘ μΈμλμ§λ§ ꡬμ±μ λ€μκ³Ό κ°μ΄ νμλ©λλ€(κ²½κ³ μ°Έκ³ ).
λΉκ³΅κ° λ μ§μ€νΈλ¦¬ νμΌλ‘ μ ννλ©΄ λΉμ΄ μμΌλ―λ‘ λ°°ν¬λ νμλ ꡬμ±μ λ³κ²½ν μ μμ΅λλ€. ACRμμ λ°°ν¬νλ©΄ μ΄ μμ μ΄ λ μνν΄μ§ λ μ¬μ©μκ° λ μ§μ€νΈλ¦¬μ λμΌν νμμ μ±μ λ§λ€λλ‘ νμ©ν μλ μμ§λ§, a) νμ μ νμ΄ μ¬λΌμ§ μ΄μ μ b) μ΄κ²μ΄ μΆ©λΆν μΌλ°μ μΈμ§μ λν νΌλμ΄ κ±±μ λ©λλ€. κ³ μΉ λ¬Έμ ?
@rosanch μκ°?
μ μ€ν¬λ¦°μ·μ μ΄λμ μ°μκ±΄μ§ λͺ¨λ₯΄κ² λ€μ. κ·Έλ¬λ Visual Studio μ½λ μ±μμ ꡬλ
μ νν°λ§ν μ μλ λ°©λ²μ μ€λ₯Έμͺ½ νλ¨μ μλ κ³μ μ ν΄λ¦νλ κ²μ
λλ€. νμ₯ νλ‘κ·Έλ¨μ μ° νμ νμλμ΄μΌ ν©λλ€.
λͺ
λ Ήμ ꡬλ
μ μ§μ ν΄μΌ νλ κ²½μ°. λͺ
λ Ήμ΄ μ€νλ λ μ λ³΄κ° μμ²λ©λλ€.
μ΄κ²μ΄ λΉμ μ μμ¬μ ν΄κ²°νμ§ λͺ»νλ€λ©΄. μ΄μ λ¬Έμ μ λν μμΈν μ 보λ₯Ό μ κ³΅ν΄ μ£Όμκ² μ΅λκΉ?
μ€ν¬λ¦°μ·μ νμ₯μ ν΅ν΄ λ°°ν¬ν ν μ± μλΉμ€ 컨ν μ΄λ λΈλ μ΄λμμ κ°μ Έμ¨ κ²μ λλ€.
Subsλ νν°λ§λκ³ νμλλ λ μ§μ€νΈλ¦¬λ₯Ό μ μ΄ν μ μμ΅λλ€. κ·Έλ¬λ μ΄ νμ₯μμλ λ€λ₯Έ νλͺ©(μ: μ± μλΉμ€)μμ νμνλ κ²κ³Ό κ°μ λ°©μμΌλ‘ νμ νλͺ©μ λ³Ό μ μμ΅λλ€. μλΈλ₯Ό νν°λ§ν΄λ λ¬Έμ κ° ν΄κ²°λμ§ μμ΅λλ€.
λ€λ₯Έ λ°°ν¬ λ° λ μ§μ€νΈλ¦¬ ꡬλ μ μ ννλ λ° μ νμ΄ μμ΄μΌ ν©λκΉ?
sub1μ ACRμμ sub2μ μ± μλΉμ€λ‘ μ΄λ―Έμ§λ₯Ό λ°°ν¬νκ³ μ±κ³΅νλ€κ³ κ°μ ν©λλ€. ν©λ²μ μΈ κ² κ°μΌλ©° ACR μ¬μ©μ μ΄λ¦/λΉλ°λ²νΈλ₯Ό μ¬μ©νμ¬ μ΄λ―Έμ§λ₯Ό κ²μν΄μΌ ν©λλ€. κ·Έλ¬λ Private Registryλ‘ μ ννλ©΄ λΉ νμ΄μ§κ° νμλλ€κ³ μΈκΈνμ΅λλ€. App Service ν¬νΈμ λ²κ·Έμ²λΌ λ€λ¦½λλ€.
λλ κ°μ λ¬Έμ κ° μμ΅λλ€. λ μ§μ€νΈλ¦¬μ μ± μλΉμ€λ μλ‘ λ€λ₯Έ ꡬλ μ μμ΅λλ€. μ΄ κ²½μ° λλ‘λ€μ΄μμ μ΄λ―Έμ§λ₯Ό μ νν μ μμ΅λλ€. λ‘λ© νμκΈ°λ κ²°μ½ λ©μΆμ§ μμ΅λλ€. κ°μΈ λ μ§μ€νΈλ¦¬ νμ μ΄λ―Έμ§λ₯Ό μ λ ₯νκΈ°λ‘ κ²°μ νλ©΄ μ μ₯ν μ μμ΅λλ€. κ·Έλ¬λ 컨ν μ΄λ μ€μ μ λ€μ μ λ ₯νλ©΄ Azureκ° μλμΌλ‘ μ€μ μ "ACR" νμΌλ‘ λ€μ "μ΄λ"νμ΅λλ€. μ μ€ν¬λ¦°μ·μ λ©μμ§κ° νμλλ©° λ³κ²½ν μ μμ΅λλ€. 컨ν μ΄λκ° μμλμ§ μμ΅λλ€.
λμΌν λ¬Έμ κ° μμ΅λλ€. cli λλ ν¬νΈμμ μΉ μ±μ λ§λ€κ³ 컨ν μ΄λ μ€μ μ κ²ν ν λ κ°μΈ λ μ§μ€νΈλ¦¬λ₯Ό νλλΉ λ μ§μ€νΈλ¦¬λ‘ μ€μ νλ κ²μ΄ μλνμ§ μμ΅λλ€. κ°μΈ λ μ§μ€νΈλ¦¬ νμ λΉμ΄ μκ³ νλλΉ μ»¨ν μ΄λ λ μ§μ€νΈλ¦¬ νμ κ° μ±μμ§κ³ νκ²½ λ³μλ μμ±λμ§λ§ μ΄λ―Έμ§λ₯Ό λ€μ΄λ‘λνλ λ° μ€ν¨ν©λλ€.
λμΌν λ¬Έμ κ° μ¬κΈ°μ μμ΅λλ€. λλ μ΄κ²μ΄ vscodeμ κ΄λ ¨μ΄ μλ€κ³ νμ ν©λλ€. μ΄κ²μ μ± μλΉμ€ νΉμ λ¬Έμ μΈ κ² κ°μ΅λλ€. μ¬κΈ°μμ μΈκΈνλ―μ΄ ACRμ μ¬μ©ν λ μ€μ ν΄μΌ νλ μΈ κ°μ§ μ€μ μ΄ μμ΅λλ€. VSCode λ° κΈ°ν λꡬ(μ: ν¬νΈ)κ° μ΄λ¬ν μ€μ μ μΆ©μ€νκ² μ€μ ν κ² κ°μ΅λλ€. κ·Έλ¬λ μ΄λ¬ν μ€μ μ΄ λ€λ₯Έ ꡬλ μ ACRκ³Ό κ΄λ ¨λ κ²½μ°μλ μλνμ§ μμ΅λλ€. OPμ κ°μ μ€ν¬λ¦°μ·μ΄ νμλ©λλ€.
λΉκ³΅κ° 리ν¬μ§ν 리λ μ΄μ λμΌν μΈ κ°μ§ μ€μ μ μ¬μ©νλ―λ‘ λΆννλ ACRμ λΉκ³΅κ° 리ν¬μ§ν λ¦¬λ‘ μ¬μ©νλ κ²μ λμμ΄ λμ§ μμ΅λλ€(OPμ μ€ν¬λ¦°μ·μμ μ μλ¨). λ€μ ACR.
@fennovjκ° μΈκΈν κ²μ²λΌ ν¬νΈ λ¬Έμ μ²λΌ 보μ΄κΈ° λλ¬Έμ ACR νμ λ¬Έμ λ₯Ό λ§λ€μμ΅λλ€.
ν₯λ―Έλ‘κ²λ - λ€μκ³Ό κ°μ΄ app_settingsλ₯Ό λ°°ν¬νλ κ²½μ°:
DOCKER_REGISTRY_SERVER_URL = "myawesomeregistry.azurecr.io"
λμ μ
DOCKER_REGISTRY_SERVER_URL = " https://myawesomeregistry.azurecr.io "
κ·Έλ¬λ©΄ μ μμ μΌλ‘ μλνλ κ² κ°μ΅λλ€. μ λ Terraformμ μ¬μ©νμ¬ λ°°ν¬νκ³ μμ΅λλ€.
λ°λΌμ λ μ§μ€νΈλ¦¬ URLμμ https://λ₯Ό λ¨κ²¨λμμμ€. Microsoftκ° https://**.azurecr.ioμ μΌμΉνλ ν¨ν΄μ μ°Ύκ³ μλ κ² κ°μ΅λλ€. μ΄κ²μ μ€λ λλ₯Ό μν΄ μΌνμ΅λλ€.
ν₯λ―Έλ‘κ²λ - λ€μκ³Ό κ°μ΄ app_settingsλ₯Ό λ°°ν¬νλ κ²½μ°:
DOCKER_REGISTRY_SERVER_URL = "myawesomeregistry.azurecr.io"
λμ μ
DOCKER_REGISTRY_SERVER_URL = " https://myawesomeregistry.azurecr.io "
κ·Έλ¬λ©΄ μ μμ μΌλ‘ μλνλ κ² κ°μ΅λλ€. μ λ Terraformμ μ¬μ©νμ¬ λ°°ν¬νκ³ μμ΅λλ€.λ°λΌμ λ μ§μ€νΈλ¦¬ URLμμ https://λ₯Ό λ¨κ²¨λμμμ€. Microsoftκ° https://**.azurecr.ioμ μΌμΉνλ ν¨ν΄μ μ°Ύκ³ μλ κ² κ°μ΅λλ€. μ΄κ²μ μ€λ λλ₯Ό μν΄ μΌνμ΅λλ€.
λΆννλ μ΄κ²μ λλ₯Ό μν΄ μλνμ§ μμμ΅λλ€.
λλμ΄ λ¬Έμ μ λν΄ μκ°μ 보λ΄κ³ κ·Έκ²μ μμ λμ΅λλ€. λ΄ μ루μ μ λ€μκ³Ό κ°μ΅λλ€.
λ κ°μ ꡬλ
μ΄ μλ€κ³ κ°μ νκ³ SUB-A
λ° SUB-B
, SUB-A
(λ΄ μμ μμλ azurebluedev
λΌκ³ ν¨)μ Azure Container Registryκ° μλ SUB-A ).
μ΄μ SUB-B
μ admin username μ μ¬μ©νμ¬ μ»¨ν
μ΄λ λ μ§μ€νΈλ¦¬μ μ΄λ―Έμ§λ₯Ό κ°μ Έμ€λ App Serviceλ₯Ό λ§λ€κ³ μΆμ΅λλ€.
μ± μλΉμ€λ₯Ό μμ±ν λ λ컀 λΈλ μ΄λμ Image and tag
μμ μ¬λ°λ₯Έ νμμ μ¬μ©νλ κ²μ΄ μ€μν©λλ€. url/image:tag
(https μ μΈ) νμμ λ°λΌμΌ ν©λλ€. κ·Έλ μ§ μμΌλ©΄ μ€λͺ
λ λ¬Έμ κ° λ°μν©λλ€. λλ μλνμ§ μλ image:tag
νμμ 미리 μ¬μ©νκ³ μμμ΅λλ€.
μ¬μ ν Azure Portal UIλ μ¬λ°λ₯Έ μ 보λ₯Ό νμνμ§ μμ§λ§ μ΅μν μλνκ² ν μ μμ΅λλ€.
μμ YAML νμ΄νλΌμΈ/λ°°ν¬ μμ
μμ λΉμ·ν κ²μ μ°Ύμμ§λ§ μ¬μ ν AzureWebAppContainer@1
μμ
μμ κ΅μ°¨ ꡬλ
μ‘μΈμ€λ₯Ό μ»μ μ μμμ΅λλ€. imageName
μμ±μ myacr.azurecr.io/myimage:$(build.buildId)
μ κ°μμΌ νμ§λ§ 컨ν
μ΄λ λ μ§μ€νΈλ¦¬κ° μμ
μ ꡬλ
/μλΉμ€ μ°κ²° μΈλΆμ μμΌλ©΄ μλνμ§ μμ΅λλ€.
μμ YAML νμ΄νλΌμΈ/λ°°ν¬ μμ μμ λΉμ·ν κ²μ μ°Ύμμ§λ§ μ¬μ ν
AzureWebAppContainer@1
μμ μμ κ΅μ°¨ ꡬλ μ‘μΈμ€λ₯Ό μ»μ μ μμμ΅λλ€.imageName
μμ±μmyacr.azurecr.io/myimage:$(build.buildId)
μ κ°μμΌ νμ§λ§ 컨ν μ΄λ λ μ§μ€νΈλ¦¬κ° μμ μ ꡬλ /μλΉμ€ μ°κ²° μΈλΆμ μμΌλ©΄ μλνμ§ μμ΅λλ€.
λλ₯Ό μν΄ κ·Έκ²μ Azure devopsμμ μμ±λ μλΉμ€ μ°κ²°μ μν΄ λ€λ₯Έ ꡬλ (λμΌν ν λνΈμ μλ κ²½μ°)μ Azureμμ μμ±λ μλΉμ€ 주체λ₯Ό μΆκ°νλ μμ μ νμ΅λλ€. μλνλ©΄ ADOμμ μλΉμ€ μ°κ²°μ μμ±ν λ μλΉμ€ μ£Όμ²΄κ° μν ν λΉμ μΆκ°λκΈ° λλ¬Έμ λλ€. κΈ°λ³Έ ꡬλ μ΄μ§λ§ λ€λ₯Έ ꡬλ μ λν΄ μλμΌλ‘ λμΌν μμ μ μννλ©΄ νμ΄νλΌμΈμ ν΄λΉ μμ μ΄ μλνκ±°λ μ μ΄λ μ κ²½μ°μλ κ·Έλ° λ°©μμΌλ‘ μΌλΆ κ΅μ°¨ ꡬλ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμμ΅λλ€.
Docker νμ₯κ³Ό κ΄λ ¨λ ν νμ¬λ‘μλ λ³κ²½μ΄ νμνμ§ μλ€κ³ μκ°ν©λλ€. @fiveisprime μ΄ μ΄μμ λλ³΄λ€ μ§κΈ κ²½νμ΄ μ‘°κΈ λ μ’μ΅λλ€.
κ·Έ λ©μμ§λ λμκ² κ²°μ μ μΌλ‘ μλμ μΌλ‘ 보μ λλ€(κ·Έλ¦¬κ³ κ΄κ³μμ΄ μ°λ¦¬κ° μλλΌ Azureμ λ¬λ € μμ). κ·Έλ¬λ μλ³Έ μ€ν¬λ¦°μ·κ³Ό λ¬λ¦¬ μ΄μ ν΄λΉ ACRμ κ³΅λ°±μ΄ μλ λ€λ₯Έ μ΄λ―Έμ§/νκ·Έκ° νμλ©λλ€. λ€λ₯Έ λ μ§μ€νΈλ¦¬λ‘ λ³κ²½νλ €λ κ²½μ° ACRμ μ΄λ―Έμ§/νκ·Έλ λ μ΄μ μ€μνμ§ μμ΅λλ€.
IMOμμλ κ΅μ°¨ ꡬλ μ λ°°ν¬ν μ μλ κΈ°λ₯μ μ μ§ν΄μΌ ν©λλ€. λλ λλΆλΆ μλνλ κ²λ€μ μμμ μ₯μ λ¬Όμ μΆκ°νλ κ²μ μ’μνμ§ μμ΅λλ€.
μ΄μ κ΄λ ¨νμ¬ ACRμ μ‘μΈμ€νκΈ° μν΄ μλΉμ€ μμΉ λλ MSIλ₯Ό μ¬μ©νκ³ μμ§λ§ #1685μμ μ΄λ₯Ό μΆμ νκ³ μμ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
λλ κ°μ λ¬Έμ κ° μμ΅λλ€. λ μ§μ€νΈλ¦¬μ μ± μλΉμ€λ μλ‘ λ€λ₯Έ ꡬλ μ μμ΅λλ€. μ΄ κ²½μ° λλ‘λ€μ΄μμ μ΄λ―Έμ§λ₯Ό μ νν μ μμ΅λλ€. λ‘λ© νμκΈ°λ κ²°μ½ λ©μΆμ§ μμ΅λλ€. κ°μΈ λ μ§μ€νΈλ¦¬ νμ μ΄λ―Έμ§λ₯Ό μ λ ₯νκΈ°λ‘ κ²°μ νλ©΄ μ μ₯ν μ μμ΅λλ€. κ·Έλ¬λ 컨ν μ΄λ μ€μ μ λ€μ μ λ ₯νλ©΄ Azureκ° μλμΌλ‘ μ€μ μ "ACR" νμΌλ‘ λ€μ "μ΄λ"νμ΅λλ€. μ μ€ν¬λ¦°μ·μ λ©μμ§κ° νμλλ©° λ³κ²½ν μ μμ΅λλ€. 컨ν μ΄λκ° μμλμ§ μμ΅λλ€.