Copilot CLI'yi konteyner ortamında çalıştırma
2026-05-30Bu yazıda Podman kullanarak, Github’un Copilot CLI aracını ana sistemden izole (konteynerize) bir şekilde nasıl kullanabileceğimizi anlatmaya çalışacağım. Bu izole ortama, komut satırından kolayca erişmek için yazdığım Bash betiğinden de bahsedeceğim.
Büyük dil modelleri tabanlı sohbet botları, günümüzde farklı farklı kılıklarda internetin birçok yerinde karşımıza çıkabiliyor.
Sohbet botlarının oldukça faydalı olabileceği yerlerden biri ise; yazılım mühendislerinin, sistem yöneticilerinin ve bu yola gönül vermiş birçok insanın başında uzun saatler geçirdiği: Terminaller (terminal emülatorleri diye okuyun siz)
Her ne kadar masaüstü çalışma ortamında, sadece terminal arayüzü tabanlı programları kullanma fikri bana pek kullanışlı gelmese de, sohbet botlarına komut satırından erişim birçok kolaylığı beraberinde getirebilir:
- Unutulan veya argümanlarını ezberlemesi garip komutlar
- Programlama ve betik dillerinin sözdizimleri
- Terminalin sağladığı kullanım hızı ve çabukluk (Tarayıcıya kıyasla)
- Halihazırda terminaldeyken akla gelen sorular
- ve daha birçok şey….

Github’ın geliştirdiği Copilot CLI aracı ile komut satırından OpenAI modellerine erişim sağlanabiliyor. Varsayılan olarak dosya sisteminde bir değişikliğe gitmeden önce sormasına rağmen, işletim sistemi seviyesinde izolasyon ve kontrol sağlamak için, copilot NPM paketini Podman ile NodeJS imajını kullanarak kuracağız.
Dockerfile ve imaj oluşumu
FROM docker.io/node:22-bookworm
# /root içindeki kalıcı npm-global dizini
RUN mkdir --parents /root/.npm-global \
&& npm config set prefix /root/.npm-global \
&& npm install --global @github/copilot --loglevel verbose
ENTRYPOINT ["/root/.npm-global/bin/copilot"]
NodeJS 22 Debian Bookworm imajının üstüne /root/.npm-global dizinine, @github/copilot NPM paketini kurulacak şekilde ve giriş noktasını (konteyner başlağında çalışacak işlem) /root/.npm-global/bin/copilot yoluna kurulmuş, copilot çalıştırılabilir dosyası olarak ayarlayalım.
Dockerfile’ı kullanarak, copilot-cli etiketiyle bir imaj oluşturalım:
dogumer@fedora:~/Experiments/podman-gh-cli 🚢🐳 $ podman image build --tag copilot-cli --file Dockerfile
Kolay erişim için Bash betiği
copilot-cli:
#!/bin/bash
set -e
DATA_VOLUME='copilot-cli-home'
IMAGE_TAG='localhost/copilot-cli'
MOUNT_DIR_CONTAINER='/workspace'
POSITIONAL_ARGS=()
while [[ $# -gt 0 ]]; do
case $1 in
-d|--directory)
MOUNT_DIR_HOST="$2"
shift # Argümanı geç
shift # Değeri geç
;;
-o|--mount-options)
MOUNT_OPTS="$2"
shift # Argümanı geç
shift # Değeri geç
;;
*)
POSITIONAL_ARGS+=("$1") # copilot'a verilecek argümanları kaydet
shift # Argümanı geç
;;
esac
done
set -- "${POSITIONAL_ARGS[@]}" # copilot'a verilecek argümanları geri getir
if [ ! -z "$MOUNT_DIR_HOST" ]; then
WORKSPACE_VOLUME_ARG="--volume $MOUNT_DIR_HOST:$MOUNT_DIR_CONTAINER"
WORKDIR="$MOUNT_DIR_CONTAINER"
else
WORKDIR="/root"
fi
if [ ! -z "$MOUNT_OPTS" ]; then
WORKSPACE_VOLUME_ARG="$WORKSPACE_VOLUME_ARG:$MOUNT_OPTS"
fi
if ! podman volume exists "$DATA_VOLUME"; then
podman volume create "$DATA_VOLUME" # Eğer depolama birimi halihazırda yoksa yeni oluştur
fi
if ! podman image exists "$IMAGE_TAG"; then
printf "Hata: İmaj sistemde mevcut değil: %s\n" "$IMAGE_TAG" # Eğer imaj halihazırda yoksa hata mesajı yazdır ve bitir
exit 1
fi
podman run \
--rm \
--interactive \
--tty \
$WORKSPACE_VOLUME_ARG \
--volume "$DATA_VOLUME:/root" \
--workdir "$WORKDIR" \
"$IMAGE_TAG" \
"$@"
Bash betiğinin genel amacı:
-d|--directoryve-o|--mount-optionsargümanları ile, ana dosya sisteminden konteyner içindeki dosya sistemine bağlanacak dizinin seçilmesi ve bağlama seçeneklerinin ayarlanması- Geriye kalan argümanların
copilotprogramına gönderilmesi
- Geriye kalan argümanların
/rootdizininin (NPM dosyaları ve Copilot CLI yapılandırma dosyaları) kalıcı depolama birimine (volume) bağlanması (yoksa oluşturulması)- Konteyner içi çalışma dizininin belirlenmesi (eğer ana dosya sisteminden dizin bağlanmışsa, çalışma dizini orası olarak ayarlanır)
podman runkomutunun yeni konteyneri durduktan sonra silinecek şekilde, interaktif,/rootdizini depolama birimine bağlı vecopilot‘a gönderilen argümanlarla başlatması
Red Hat Enterprise Linux dağıtımıyla beraber gelen, Lightspeed destekli, komut satırı asistanına (command-line-assistant) benzer bir deneyim için, .bashrc dosyanıza bu alias’ı ekleyebilirsiniz:
alias c="copilot-cli --prompt"
Kullanımı
Bash betiği dosyasına gerekli çalıştırma yetkilerini verdikten ve PATH ortam değişkenindeki bir dizine taşıdıktan/kopyaladıktan sonra aşağıdaki şekillerde kullanabilirsiniz:
$ copilot-cli: Copilot CLI terminal arayüzünü aç. Github hesabına giriş, sohbet botu yönergelerinin ayarlanması vb. şeyler burada halledilir$ copilot-cli --directory ./test-dosyalari: Ana sistemdekitest-dosyalaridizinini konteynere bağlar ve Copilot CLI’nin çalışma alanı burası olur.$ copilot-cli --directory ./test-dosyalari --mount-options ro:test-dosyalaridizinini konteynere sadece okunabilir olarak bağlar.$ c 'podmanle imajları tar arşivine kaydetme komutu': Copilot prompt cevabını kendi terminal arayüzünde göstermek yerine, standart çıktıya yazar
copilot-cliyukarıdaki örneklere ek, birçok seçeneğe ve alt komuta sahiptir. Yazının ve betiğin ana konusu konteyner ile izolasyon olduğundan, dosya sistemi ile ilgili komutlara yoğunlaştım. Detaylı bilgi ve daha çok örnek için:$ copilot-cli --help

