Docker Registry ve Hub üzerine repo eklemek
Tags: docker, registry, repository, hub
Published: 2022-08-29 17:58:04

Docker konteynerlerının kullanılması için en önemli ihtiyaç Docker İmajları. Bu imajlar da çeşitli şekilde oluşturulabildiği gibi, başka ekiplerin de kullanabilmesi için depolarda kullanılmakta. İşte "**Docker Hub**" ve "**Docker Registry**" tam olarak bu ihtiyaçları karşılamak için oluşturulmuş genel ve özel depolardır. 

Docker Hub dediğimiz yapı https://hub.docker.com adresinde herkesin okuma erişimine sahip olacak şekilde kullanılmaktadır. Tabi ki ücretli kullanımda gizli depolar da eklenebilmektedir. Ayrıca bulut ortamında değil de kendi ortamınızda Harbor veya düz Docker Registry gibi bir depo yapısına sahip olabilirsiniz.

Yazımızda temel Docker kurulumlarından bahsetmeyeceğiz ve ortamınızda Docker kurulu olduğunu varsayacağız.

# Docker Hub üzerinden imaj çekmek

Aslında bu adım en temelde yaptığımız şey. Hatta docker öğrenirken "helloworld" imajını çekerek bu adımı yapmış olmamız çok muhtemel. Docker Hub üzerinden 2 şekilde imajı çekebiliriz.

Konteynır oluşturarak imajı çekmek istersek aşağıdaki gibi bir komut verilmesi gerekecektir:

```bash
docker run -p 80:80 -p 443:443 -it aciklab/liman bash
```

Bu şekilde çektiğimizde aynı zamanda bir konteynır oluştuğunu da göreceksiniz.

Eğer konteyrnır oluşturmadan kendi makinemizde imajı çekmek istersek de sadece çekmek "pull" yeterli olacaktır.

```bash
docker pull aciklab/liman
```

# Docker Hub'a imaj yollamak

Bunun için öncelikle bir yetkili hesaba sahip olmanız gerekiyor. Bunu web arayüzü üzerinden https://hub.docker.com kayıt olarak yapabilirsiniz. Buradaki kullanıcı adınız oldukça önemli. 

Ve tabi ki kullanıcının yanında bir de "repo" üretmeniz gerekiyor. Buradaki repo ismi kullanım sırasında oldukça önemli.

Daha sonrasında bir şekilde kendi ortamınızda oluşturduğunuz bir imajınızın olduğunu varsayıyorum. Öncelikle hesabınıza giriş yapmanız gerekiyor:

```bash
docker login --username=kullanıcıadınız
```

Giriş yaptıktan sonra göndermek isteyeceğiniz imajın "image ID"sini öğrenmek için aşağıdaki komutu kullanmanız gerekiyor.

```bash
docker images
```

Bu adımda imaj id'sini öğrendikten sonra imajınızı göndermeden önce aşağıdaki şekilde taglemeniz gerekmektedir.

```bash
docker tag 2e940a28bc69 kullanıcıadınız/depoadresiniz:0.1-deneme
```

Bu şekilde artık kendi ortamınızda, gönderilmeye hazır tag'li bir imajınız bulunmakta. Bu yapıyı 2 şekilde gönderebilirsiniz. 

latest yani güncel sürüm olarak göndermek isterseniz:

```bash
docker push kullanıcıadınız/depoadresiniz
```

diyebileceğiniz gibi, Hub üzerinde de tag oluşturmak istiyorsanız:

```bash
docker push kullanıcıadınız/depoadresiniz:0.1
```

gibi bir komut kullanabilirsiniz.

# Docker Registry'den imaj çekmek

Docker Hub'tan çekebileceğiniz gibi kendi Docker registry'nizden de imajlar çekebilirsiniz. Bunun için nasıl kurulum yapıldığına değinmeden pratiğe geçeceğim.

Aşağıdaki şekilde imajları çekebilirsiniz:

```bash
docker pull <registryadresi>:<registryport>/<uygulamaadi>:<uygulamasürümü>
```

# Docker Registry'ye imaj yollamak

Docker Hub'a oldukça benzer şekilde bir süreç gerçekleşmektedir. Öncelikle yine login olmanız gerekmektedir:

```bash
docker login <registryadresi>:<registryport>
```

Sonrasında imajınızı göndereceğiniz formata çevirecek şekilde taglemeniz gerekmektedir:

```bash
docker tag <imajid> <registryadresi>:<registryport>/<uygulamaadi>:<uygulamasürümü>
```

Ve son olarak yollamak için de benzer komutu uygulamanız gerekmektedir:

```bash
docker push <registryadresi>:<registryport>/<uygulamaadi>:<uygulamasürümü>
```

# İmajlarınızı dosya olarak kaydetme ve yükleme

Her zaman Docker Hub veya Docker Registry'ye erişiminiz olmayabilir. Bu gibi durumlarda imajlarınızı dosya olarak kaydetmeniz gerektiğinde aşağıdaki komutla imajı kaydedebilirsiniz:

```bash
docker save imajrepoadı > imajdosyasi.tar
```

Benzer şekilde imaj dosyasını başka bir sisteme taşıdıktan sonra sisteme eklemek için de aşağıdaki komut kullanılabilir:

```bash
docker load --input imajdosyasi.tar
```