Azure DevOpsμμ Docker λ° Kubernetes λ°°ν¬ μλν
π£ Azure DevOpsμμ Docker λ° Kubernetes λ°°ν¬ μλν
π§ μ Docker λ° Kubernetes λ°°ν¬ μλνκ° νμν κΉ?
μ€λλ λ§μ΄ν¬λ‘μλΉμ€ μν€ν
μ²μ 컨ν
μ΄λ κΈ°λ° λ°°ν¬λ μ μ λ μ€μν΄μ§κ³ μμ΅λλ€.
β
Dockerλ μ ν리μΌμ΄μ
μ 컨ν
μ΄λννμ¬ κ°λ° νκ²½μμ νλ‘λμ
νκ²½κΉμ§ μΌκ΄λκ² μ€νν μ μκ² λμμ€λλ€.
β
**Kubernetes(K8s)**λ 컨ν
μ΄λνλ μ ν리μΌμ΄μ
μ κ΄λ¦¬νκ³ μλννλ μ€μΌμ€νΈλ μ΄μ
νλ«νΌμ
λλ€.
λ°°ν¬ μλνκ° μμΌλ©΄, μλμΌλ‘ 컨ν
μ΄λλ₯Ό κ΄λ¦¬νλ λ° λλ μκ°κ³Ό μ€λ₯κ° λμ΄λ μ μμ΅λλ€.
λ°λΌμ Azure DevOpsλ₯Ό νμ©νμ¬ Docker μ΄λ―Έμ§ λΉλ λ° Kubernetes ν΄λ¬μ€ν° λ°°ν¬λ₯Ό μλννλ λ°©λ²μ μμλ΄
μλ€!
β 1. Azure DevOpsμ Docker ν΅ν©νκΈ°
βΆ λ°©λ²: Azure DevOpsμμ Docker μ΄λ―Έμ§λ₯Ό λΉλνκ³ λ°°ν¬νλ νμ΄νλΌμΈ μ€μ
Dockerλ₯Ό μ¬μ©νλ©΄ μ ν리μΌμ΄μ
μ 컨ν
μ΄λννμ¬ μ€νν μ μμ΅λλ€. Azure DevOpsμμ Dockerλ₯Ό μ¬μ©νλ €λ©΄ λ€μ μ μ°¨λ₯Ό λ°λΌμΌ ν©λλ€.
Docker λΉλ λ° μ΄λ―Έμ§ νΈμ νμ΄νλΌμΈ
[yaml]
trigger:
branches:
include:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
- task: Docker@2
inputs:
command: 'buildAndPush'
containerRegistry: '$(dockerRegistryServiceConnection)'
repository: 'myapp'
dockerfile: '**/Dockerfile'
tags: |
$(Build.BuildId)
μ΄ YAML ꡬμ±μμλ Docker@2 νμ€ν¬λ₯Ό μ¬μ©νμ¬ Docker μ΄λ―Έμ§λ₯Ό λΉλνκ³ , Azure Container Registryμ νΈμν©λλ€.
π© 2. Azure Kubernetes Service (AKS)λ‘ λ°°ν¬νκΈ°
βΆ λ°©λ²: Azure DevOps νμ΄νλΌμΈμμ Kubernetes ν΄λ¬μ€ν°λ‘ λ°°ν¬ μλν
Azure Kubernetes Service(AKS)λ Azureμμ Kubernetes ν΄λ¬μ€ν°λ₯Ό κ΄λ¦¬νλ μλΉμ€μ
λλ€. Azure DevOpsλ₯Ό μ¬μ©νμ¬ AKSλ‘ λ°°ν¬λ₯Ό μλνν μ μμ΅λλ€.
Kubernetes λ°°ν¬ νμ΄νλΌμΈ
[yaml]
steps:
- task: Kubernetes@1
inputs:
connectionType: 'Azure Resource Manager'
azureSubscription: 'MyAzureSubscription'
azureResourceGroup: 'MyResourceGroup'
kubernetesCluster: 'MyAKSCluster'
namespace: 'default'
command: 'apply'
arguments: '-f deployment.yaml'
π¬ 3. Docker μ΄λ―Έμ§ λΉλ λ° AKS λ°°ν¬ μλν
βΆ λ°©λ²: Docker μ΄λ―Έμ§ λΉλ ν AKSλ‘ μλ λ°°ν¬ μ€μ
μ΄μ Docker μ΄λ―Έμ§λ₯Ό λΉλν ν, μ΄λ₯Ό AKS ν΄λ¬μ€ν°μ μλμΌλ‘ λ°°ν¬νλ λ°©λ²μ μ€λͺ
ν©λλ€.
νμ΄νλΌμΈ μ€μ
[yaml]
trigger:
branches:
include:
- main
pool:
vmImage: 'ubuntu-latest'
steps:
# Docker μ΄λ―Έμ§ λΉλ λ° νΈμ
- task: Docker@2
inputs:
command: 'buildAndPush'
containerRegistry: '$(dockerRegistryServiceConnection)'
repository: 'myapp'
dockerfile: '**/Dockerfile'
tags: |
$(Build.BuildId)
# Kubernetes λ°°ν¬
- task: Kubernetes@1
inputs:
connectionType: 'Azure Resource Manager'
azureSubscription: 'MyAzureSubscription'
azureResourceGroup: 'MyResourceGroup'
kubernetesCluster: 'MyAKSCluster'
namespace: 'default'
command: 'apply'
arguments: '-f deployment.yaml'
μ΄ νμ΄νλΌμΈμ main λΈλμΉμ νΈμλ λλ§λ€, Docker μ΄λ―Έμ§λ₯Ό λΉλνκ³ Azure Container Registryμ νΈμν ν, AKS ν΄λ¬μ€ν°λ‘ λ°°ν¬νλ κ³Όμ μ μλνν©λλ€.
β¨ μ€μ μ: Docker μ΄λ―Έμ§ λΉλ + AKS λ°°ν¬
- GitHubμ μ½λ 컀λ°
- Docker μ΄λ―Έμ§ μλ λΉλ λ° Azure Container Registryμ νΈμ
- Kubernetes ν΄λ¬μ€ν°μ μλ λ°°ν¬
- λ°°ν¬ μλ£ ν μ€μκ° λͺ¨λν°λ§ λ° μλ λ‘€λ°± κΈ°λ₯ μ€μ
β μ΄ κ³Όμ μ λ°°ν¬μ μΌκ΄μ±μ λμ΄κ³ , μλ λ°°ν¬μμ λ°μν μ μλ μ€λ₯λ₯Ό μ€μ¬μ€λλ€. λν, λ°°ν¬ μλλ ν₯μμν΅λλ€!
π λ§λ¬΄λ¦¬
Azure DevOpsμ Docker, Kubernetesλ₯Ό νμ©ν λ°°ν¬ μλνλ
βοΈ μ ν리μΌμ΄μ
κ΄λ¦¬μ λ°°ν¬ κ³Όμ μ ν¬κ² κ°μ ν μ μμ΅λλ€.
βοΈ μλνλ λ°°ν¬λ κ°λ° μ£ΌκΈ°λ₯Ό λ¨μΆμν€κ³ , μ΄μ νκ²½μ μΌκ΄μ±μ μ μ§νλ λ° λμμ΄ λ©λλ€.
DevOpsλ κΈ°μ μ λμ΄μ, νμ κ³Ό μν΅μ μν λꡬμ λλ€. μλνλ ν¨μ¨μ±μ λμ΄κ³ , μ€μλ₯Ό μ€μ΄λ©°, ν κ°μ νλ ₯μ κ°νν©λλ€ π