# Gyro Kapsayıcı'da ilk uygulamanızı yayınlayın: Docker imajı, port, sağlık kontrolü ve kopya

https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-kapsayici-ilk-uygulama

- **Bu rehberde ne öğreneceksiniz**: Kendi Docker imajınızı Gyro Kapsayıcı'da yayınlamayı, imajınızın platformla uyumlu olması için nelere dikkat edeceğinizi, sağlık kontrolü ve kopya sayısını ve özel bir imaj deposundan çekmeyi.
- **Süre**: 12 dakika
- **Kimin için**: Docker imajı hazır olan geliştiriciler.
- **Gerekenler**: Aktif bir Gyro Kapsayıcı ortamı ve herkese açık ya da erişim bilgisi olan bir Docker imajı.

## 1. İmajınız platforma uygun mu?

| Kural | Neden / ne yapmalı? |
| --- | --- |
| **Kök olmayan kullanıcı** | Kapsayıcılar `10001` numaralı kullanıcıyla çalışır. `USER 10001` (ya da başka bir yetkisiz kullanıcı) tanımlayın; dosya izinlerini buna göre verin. |
| **1024 ve üstü port** | Yetkisiz kullanıcı 80/443'ü dinleyemez; `8080` gibi bir port kullanın. |
| **Sürüm etiketi** | `latest` yerine `1.4.2` gibi sabit bir etiket verin; geri alma ve tekrarlanabilir yayın için gereklidir. |
| **Günlükler standart çıktıya** | Uygulama loglarını `stdout`/`stderr`'e yazın; Loglar sayfası bunları gösterir. |
| **Kalıcı disk yok** | Yazılan dosyalar kapsayıcı yeniden başlayınca silinir (`/tmp` geçicidir, 512 MiB). Kalıcı veriyi [Nesne Depolama](https://www.gyrohosting.com/bilgi-bankasi/makale/nesne-depolama-s3-rehberi)'ya ya da ayrı bir veritabanına yazın. |
| **Mimari** | İmaj `linux/amd64` olmalıdır. |

> **Bilgi**
> 
> Ana süreci kök kullanıcı isteyen imajlarda servis "Başlatma ayarı hatası" (CreateContainerConfigError) ile durur. Çözüm: kök olmayan bir imaj kullanın ya da `USER` tanımlayın. Hazır, ayrıcalıksız imaja örnek: `nginxinc/nginx-unprivileged`.

## 2. Panelden servis oluşturma

1. **Hizmetlerim**'den ortamınızı açın ve **Servisler**'e girin.
2. **Yeni servis**'e basın.
3. Formu doldurun:

| Alan | Ne yazılır? |
| --- | --- |
| **Servis adı** | Küçük harf, rakam, `-`; harfle başlar, en çok 40 karakter (ör. `api`). Adres: ad + kodunuz. |
| **İmaj** | `docker.io` için `kullanici/uygulama:1.4.2`, GitHub için `ghcr.io/firma/uygulama:1.4.2`, Gyro deposu için `registry.ist.gyrohosting.com/<kodunuz>/uygulama:1.4.2`. |
| **Port** | Uygulamanızın dinlediği port (ör. `8080`). Dış dünyaya açılacaksa zorunlu. |
| **Kopya** | Çalışacak örnek sayısı. Dayanıklılık için 2 ya da daha fazla. |
| **İşlemci / kopya, Bellek / kopya** | Kopya başına kaynak (varsayılan 0,25 vCPU / 256 MB). |
| **Sağlık kontrolü yolu** | `/healthz` gibi HTTP yolu. Boşsa porta TCP bağlantısı yeterli sayılır. |
| **İnternete açık (HTTPS adres)** | İşaretlerseniz servis `ad-kod.gyroapp.net` adresini alır. İşaretlemezseniz yalnız ortam içinden `http://ad` ile erişilir. |
| **Ortam değişkenleri** | Her satıra `ANAHTAR=DEĞER`. Parola gibi değerleri bunun yerine [gizli değer](https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-kapsayici-degiskenler-ve-gizli-degerler) olarak ekleyin. |
| **Komut (isteğe bağlı)** | İmajın varsayılan komutuna argüman. |

1. **Oluştur ve başlat**'a basın. Durum önce **Dağıtılıyor**, sonra **Çalışıyor** olur.

> **Bilgi**
> 
> **Sağlık kontrolü** iki iş yapar: yeni sürümde örnek hazır olmadan trafik almaz (kesintisiz geçişin dayanağıdır) ve HTTP yolu verirseniz yanıt vermeyen örnek otomatik yeniden başlatılır. Mümkünse bir HTTP sağlık yolu tanımlayın.

## 3. Özel imajı (şifreli depo) çekme

İmajınız herkese açık değilse depo bilgisini bir kez tanımlayın:

1. **Düğüm Havuzu** sayfasında **Özel imaj deposu** bölümünü açın.
2. **Depo adresi** (ör. `ghcr.io`), **Kullanıcı adı** ve **Token / parola** girin. Token'ın **yalnız çekme (read)** izni olsun.
3. **Kaydet**'e basın. Ortam başına bir özel depo tanımlanır; token şifreli saklanır ve bir daha gösterilmez.

Kendi imajlarınızı Gyro'nun deposunda tutmak için [Gyro imaj deposu](https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-kapsayici-imaj-deposu) rehberine bakın; orada bilgileri ayrıca tanımlamanız gerekmez.

## 4. Komut satırından

```
gyro container service create 12345 --name api \
  --image ghcr.io/firma/uygulama:1.4.2 --port 8080 \
  --replicas 2 --cpu-m 250 --memory-mi 256 \
  --health-path /healthz --public \
  --env '{"MODE":"prod"}'
```

Servisi görmek ve izlemek için:

```
gyro container service list 12345
gyro container service get 12345 api
```

## 5. Yayından sonra

- **Adres:** Servis tablosundaki adrese tıklayın. İlk istekte hazır olması birkaç saniye alabilir.
- **Durum etiketleri:** **Dağıtılıyor**, **Çalışıyor**, **Hata**, **Kapasite bekliyor**, **Durduruldu**. Hata ya da bekleme varsa satırın altında nedeni ve çözüm önerisi görünür ([Sık hatalar](https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-kapsayici-sik-hatalar)).
- **Loglar:** **Loglar** sayfasından servisinizi seçip çıktıyı görün ([Loglar ve grafikler](https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-kapsayici-loglar-ve-grafikler)).
- **Güncelleme:** yeni imaj sürümü için [Ölçekleme, güncelleme ve geri alma](https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-kapsayici-olcekleme-guncelleme-geri-alma).

## 6. Sık sorulan sorular

**Docker Compose ya da docker run ile aynı şeyi yapabilir miyim?**

Her servis ayrı oluşturulur. `docker run` seçeneklerinin karşılıkları: port → **Port**, `-e` → **Ortam değişkenleri**, `--restart` → platform kendisi yeniden başlatır, `-v` (disk) desteklenmez.

**İmajım 1 GB'tan büyük, sorun olur mu?**

Çekme süresi uzar. İmajı küçültmek (çok aşamalı derleme, alpine/distroless) dağıtımı hızlandırır.

**Aynı ortamda iki servis birbirine nasıl bağlanır?**

İç adresle: `http://diger-servis` (80 numaralı port, hedef servisin portuna yönlenir). Hedef servisin internete açık olması gerekmez.

**Servis adını sonradan değiştirebilir miyim?**

Hayır. Yeni adla yeni servis oluşturup eskisini silin.

## Sıradaki adım

- [Gyro imaj deposu](https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-kapsayici-imaj-deposu)
- [Değişkenler ve gizli değerler](https://www.gyrohosting.com/bilgi-bankasi/makale/gyro-kapsayici-degiskenler-ve-gizli-degerler)
