ECR : Amazon’da ki Elastic Container Registry
ECR’da her image için repository oluşturmak gerekir. Repository içinde tek imagein değişik versiyonlar (tag’leri) olur.
Docker registry’lerinde isimlendirmenin bir standardı vardır.
RegistryDomain/imageName:tag
normalde docker pll yaparken Registry domain i kullanmıyoruz ve sistem direk dockerhub a otomatik gidiyor. Aslında sistemin yaptığı :
docker pull mongo:latest
docker pull docker.io/library/mongo:latest
aynı sebepten bir repoya image push ederken registry domain i de eklememiz gerekli adına. bunu image tag ile yapıyoruz.
can@deb11-VM1:~$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
postgres 13 2d351c95a985 7 days ago 371MB
mongo latest 4253856b2570 2 weeks ago 701MB
gitea/gitea 1.15.6 203b931e8dab 5 weeks ago 148MB
mongo-express latest 2d2fb2cabc8f 6 weeks ago 136MB
docker tag postgres:13 <registrydomain.tld>/postgres:13
Bu komut ile mevcut image durur onun yanına yeni ir kopya oluşur.
Daha sonra bu yeni oluşanı push ederiz.
Mesela yazılım kodunda veya başka bir yerde dğişiklik yapıldı o zaman yeniden build etmemiz sonra yeniden tag yapmamız ve yeniden push etmemiz gerekir.
Local Registry
Docker compose
version: '3'
services:
registry:
image: registry
ports:
- 5555:5000
volumes:
- /home/can/registry/repository:/var/lib/registry
restart: always
container_name: docker-registry
Ve sonra başlatıyoruz.
can@deb11-VM1:~/registry$ docker-compose up -d
Creating network "registry_default" with the default driver
Pulling registry (registry:)...
latest: Pulling from library/registry
79e9f2f55bf5: Pull complete
0d96da54f60b: Pull complete
5b27040df4a2: Pull complete
e2ead8259a04: Pull complete
3790aef225b9: Pull complete
Digest: sha256:169211e20e2f2d5d115674681eb79d21a217b296b43374b8e39f97fcf866b375
Status: Downloaded newer image for registry:latest
Creating registry_registry_1 ... done
Kontrol ediyoruz.
can@deb11-VM1:~/registry$ docker ps --format '{{.Names}} {{.Image}}'
docker-registry registry
gitea gitea/gitea:1.15.6
gitea_db_1 postgres:13
Şimdi artık mevcut app lerimizi yukarıda anlatıldığı gibi yeniden tag lememiz gerekiyor.
can@deb11-VM1:~/registry$ docker tag postgres:13 192.168.0.190:5555/postgres:13
Kontrol edelim
can@deb11-VM1:~/registry$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
192.168.0.190:5555/postgres 13 2d351c95a985 7 days ago 371MB
postgres 13 2d351c95a985 7 days ago 371MB
mongo latest 4253856b2570 2 weeks ago 701MB
registry latest b8604a3fe854 3 weeks ago 26.2MB
gitea/gitea 1.15.6 203b931e8dab 5 weeks ago 148MB
mongo-express latest 2d2fb2cabc8f 6 weeks ago 136MB
e tabii birde push edeceğiz
can@deb11-VM1:~/registry$ docker push 192.168.0.190:5555/postgres:13
The push refers to repository [192.168.0.190:5555/postgres]
Get "https://192.168.0.190:5555/v2/": http: server gave HTTP response to HTTPS client
Push edemedik bir hata verdi 🙁
image i silip:
can@deb11-VM1:~/registry$ docker rmi 192.168.0.190:5555/postgres:13
Untagged: 192.168.0.190:5555/postgres:13
Yeniden tagledim ve push ettim
can@deb11-VM1:~/registry$ docker tag postgres:13 localhost:5555/postgres:13
can@deb11-VM1:~/registry$ docker push localhost:5555/postgres:13
The push refers to repository [localhost:5555/postgres]
5c711858a743: Pushed
9e4bee40a27a: Pushed
abbabe3a68df: Pushed
bc057053e62e: Pushed
b76ddd7ce4e9: Pushed
ad2d463d9bde: Pushed
211fd0a9ebeb: Pushed
111c0207297d: Pushed
2fe8db8831b3: Pushed
c6dc058faf53: Pushed
295288988f3a: Pushed
8baa2c90b0ab: Pushed
e1bbcf243d0e: Pushed
13: digest: sha256:63917f87713702de5f92797e869dfb94865220fbc5f479868c6dadaa9ad058bc size: 3038
Fark IP yerine localhost kullanmam oldu. Ancak bunu daha iyi incelemeliyim.
Sebep :
Registry nin docker daemon da kayıtlı olması gerektiği. Bunun için aşağıda ki dosyayı oluştrup içine satırı ekledim ve servisi yeniden başlattım
sudo vim /etc/docker/daemon.json
{ "insecure-registries":["192.168.0.190:5555"] }
sudo systemctl restart docker
sonra push ettim:
can@deb11-VM1:~/registry$ docker push 192.168.0.190:5555/postgres:13
The push refers to repository [192.168.0.190:5555/postgres]
5c711858a743: Layer already exists
9e4bee40a27a: Layer already exists
abbabe3a68df: Layer already exists
bc057053e62e: Layer already exists
b76ddd7ce4e9: Layer already exists
ad2d463d9bde: Layer already exists
211fd0a9ebeb: Layer already exists
111c0207297d: Layer already exists
2fe8db8831b3: Layer already exists
c6dc058faf53: Layer already exists
295288988f3a: Layer already exists
8baa2c90b0ab: Layer already exists
e1bbcf243d0e: Layer already exists
13: digest: sha256:63917f87713702de5f92797e869dfb94865220fbc5f479868c6dadaa9ad058bc size: 3038
tabii bunun içinde önce docker compose a son halini verdim. HTTP environment değişkeni containerin dinlediği portu değiştiriyor HOSTUN DEĞİL.
version: '3'
services:
# my-app:
# image: ${docker-registry}/my-app:1.0
# ports:
# - 3000:3000
registry:
image: registry
ports:
- 5555:5555
volumes:
- /home/can/registry/repository:/var/lib/registry
restart: always
container_name: docker-registry
environment:
- REGISTRY_HTTP_ADDR=0.0.0.0:5555