07/12/2021

Docker-4 Registry/Repository

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

Leave a Reply