Branicki Park

Copilot CLI'yi konteyner ortamında çalıştırma

2026-05-30

Bu 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:

- Terminal arayüzüyle çalışan bir web tarayıcı

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ı:


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 yukarı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