AWS ECR'yi Docker kayıt defteri olarak kullanma

in utopian-io •  7 years ago  (edited)

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

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

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."

  • docker/docker.github.io repository is not related.

You can contact us on Discord.
[utopian-moderator]