Bu yazıda AWS ECR (Amazon Elastic Container Registry) tarafından desteklenen bir Docker kayıt defterinin nasıl kullanılacağını göstereceğim...
A. Using AWS ECR as a Docker registry
B. Creating AWS ECR repositories
C. Using the image in Kubernetes
A. AWS ECR'yi Docker kayıt defteri olarak kullanma
B. AWS ECR depoları oluşturma
C.Görüntüyü Kubernetes'de kullanma
Needs are;
A.Docker software
B. aws account
Gereksinimler ise;
A. Docker yazılımı
B. aws hesap
The difficulty level of commands we use is simple.
Kullanacağımız komutların zorluk derecesi basit
AWS ECR depoları oluşturma
İlk olarak, Amazon'daki ECR'yi etkinleştirip depolarımızı oluşturmamız gerekiyor. Yayınlamamız gereken iki görüntü var blog-helm ve blog-helm-cibu yüzden iki depoya ihtiyacımız var.
ECR'yi Etkinleştir
Blog-helm deposunu oluşturun
İkinci depo aynı şekilde oluşturulur.
Docker Kimlik Belgeleri oluşturma
aws ecr get-login --no-include-email --region eu-west-1
docker login -u AWS -p *** https://830988624223.dkr.ecr.eu-west-1.amazonaws.com
TeamCity değişiklikleri
TeamCity kuramsal olarak, Docker kayıt defterine bir yapı özelliği olarak bağlanmayı desteklemektedir. Ancak, kurulum yapmaya çalıştığımda şifre çok uzun (1868 karakter, yani evet uzun), bu işe yaramıyor ki ekstra bir iş yapmak zorunda olduğumuz anlamına geliyor.
İlk olarak, proje düzeyinde birkaç parametre oluşturacağız:
Docker kayıt defteri için yapılandırma parametreleri
Bu durumda, iki yeni adım eklemeliyim:
Docker kayıt defterine geçmeden önce oturum açmamız gerekiyor. fazladan bir adım docker login -u %docker.username% -p %docker.password% %docker.server%.
Kayıt defteri artık gerekli değil çıkış yapıyorum. fazladan bir adım docker logout %docker.server%.
Kodumda pipeline hattım olduğundan, bu adımları nereye ihtiyacım olursa olsun kolayca ekleyebilirim:
script {
name = "Login to Docker registry"
scriptContent = "docker login -u %docker.username% -p %docker.password% %docker.server%"
}
script {
name = "Push Docker production image"
scriptContent = "docker push %docker.registry%/blog-helm:%env.IMAGE_TAG%"
}
script {
name = "Push Docker CI image"
scriptContent = "docker push %docker.registry%/blog-helm-ci:%env.IMAGE_TAG%"
}
script {
name = "Logout from Docker registry"
scriptContent = "docker logout %docker.server%"
executionMode = BuildStep.ExecutionMode.ALWAYS
}
Çıkış adımında yürütme modunu yapılandırdığıma dikkat edin Always. Bu, başka bir adım önce başarısız olsa da, her zaman çalışacağı anlamına gelir. Bunun gibi temizlik görevleri için güzel bir ortam.
Parolanın nasıl saklandığını görmek ilginç olabilir. Parametreyi bir parola olarak tanımlayan TeamCity, gerçek değeri kod havuzunda yapamaz. Bunun yerine, bazı referans değerleri taahhüt eder:
password("docker.password", "credentialsJSON:175b2d15-2353-475e-ab70-571d1e5843e9", label = "Docker registry password")
Kullanıcı arayüzüyle şifreyi değiştirdiğimde, TeamCity bu referans değerini güncelleyen bir düzeltme dosyası gönderir:
changeProject("d3c230cf-b4cd-4a9e-8017-4b4b945b3a3c") {
params {
expect {
password("docker.password", "credentialsJSON:6a39fd43-0513-4ba4-a446-14843fa7c355", label = "Docker registry password")
}
update {
password("docker.password", "credentialsJSON:175b2d15-2353-475e-ab70-571d1e5843e9", label = "Docker registry password")
}
}
}
AWS ECR Sonuçları
Bunları yerine getirirsem, görüntüleri AWS ECR'de yayınlayabilirim:
Üretim Resmi (blog-helm)
CI Resmi (blog-helm-ci)
Üretim görüntüsünün ci imajından çok daha küçük olduğunu görebilirsiniz, çünkü ikincisi dev bağımlılıkları içeriyor bu yuzden alpine merkezli değil, Fantomj'ler yüzünden.
Ayrıca bir hata yaptım .dockerıgnore, cı-scripts klasörünü Docker bağlamından çıkarmalıydım; bu ne yazık ki her yapı için farklı bir cı görüntüsü yaratıyordu. Bu yüzden cı görüntüsü üretim görüntüsüyle karşılaştırıldığında çok fazla farklı etiketlere sahip oluyor.
Görüntüyü Kubernetes'de kullanma
Minikube'nun AWS ECR'den de çekebilmesi gerekiyor. İlk olarak, kubectlCLI aracı ile bir bilinmeyen oluşturmam gerekiyor :
$ kubectl create secret docker-registry myaws
--docker-username=AWS
--docker-password=***
--docker-email=***
--docker-server=830988624223.dkr.ecr.eu-west-1.amazonaws.com
secret "myaws" created
Bu yeni bir biinmeyen yaratacaktır-myaws-. Kullanmak için, Helmet grafiğimin dağıtım şablonunu değiştirmem gerekiyor:
spec:
imagePullSecrets:
- name: myaws
containers:
- name: {{ .Chart.Name }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
imagePullPolicy: {{ .Values.image.pullPolicy }}
ve tabii ki de yeni kayıt defterini belirtmem gerekiyor values.yaml:
replicaCount: 1
image:
repository: 830988624223.dkr.ecr.eu-west-1.amazonaws.com/blog-helm
tag: latest
pullPolicy: IfNotPresent
Ve bu kadar! Artık yerel Kubernet'ler AWS ECR'den de görüntü kullanabiliyor.
Posted on Utopian.io - Rewarding Open Source Contributors
Your contribution cannot be approved because it does not refer to or relate to an open-source repository. See here for a definition of "open-source."
You can contact us on Discord.
[utopian-moderator]