CircleCI'de deneysel Docker özellikleri nasıl çalıştırılır


12

CircleCI'de bir yapı başlatıldığında yapılan ilk şeylerden biri:

Uzak Docker motoru kurma

Specified reusable docker engine, but build has not been whitelisted.
Contact CircleCI to be whitelisted
Allocating a remote Docker Engine
...
Remote Docker engine created. Using VM 'prealloc-wrjtu1qd-1491949826270'
Created container accessible with:
  DOCKER_TLS_VERIFY=1
  DOCKER_HOST=tcp://<IP>:2376
  DOCKER_CERT_PATH=/tmp/docker-certs615987123
  DOCKER_MACHINE_NAME=51123

Daha sonra docker build --squash -t imagename .CircleCI üzerinde çalıştırıldığında:

Error response from daemon: squash is only supported with experimental mode
Exited with code 1

Tartışma

Aşağıdaki özellikleri değiştirdikten sonra yerel olarak deneysel özellikleri kullanmak için çalışır /etc/docker/daemon.json:

{
    "experimental": true
}

ve docker systemctl hizmetinin yeniden başlatılması, ancak bunu CircleCI'de nasıl yapabilirim? Yapı çıkışı CircleCI sistemlerinde bulunan bir uzak bağlantı istasyonuna bağlantı yapıldığını gösterdiğinden imkansız görünüyor.

Yanıtlar:


5

Yönetilen hizmetlerin sınırlamaları ile karşılaşıyorsunuz. Birçok yönetilen hizmet, fikirlerle denemeye başlamak için harikadır ve sıradan kullanıcılar için büyük bir değer gösterebilir. Ancak esneklik ve işlevsellik için kullanım kolaylığı sağlarlar, bu nedenle ciddi ihtiyaçlarımıza başlar başlamaz ve bu fikirleri oluşturmak için önemli miktarda çaba harcamaya hazır olur olmaz, ilk yapmamız gereken esnek bir tamamen işlevsel çözüm. Benim düşünceme göre, başka bir şey aramaya ihtiyaç duyduğunuz çizgiye vuruyorsunuz - ve farklı bir araç öğrenmeniz gerektiğini fark edeceksiniz, çünkü bu özgür yazılım değil ve onu kendiniz çalıştıramazsınız.

Burada Circle CI hakkında konuşuyoruz, ancak aşağıdaki sınırlamalar yönetilen birçok hizmet için ortaktır:

  • Yönetilen hizmetler, kullanmamıza izin verdikleri yazılım sürümleri üzerinde sert bir çelişki ortaya koymaktadır. Bu kısıtlamalar bugün ihtiyacımız olan şeyle eşleşebilir, ancak daha sonra yapılması gerekmez. Bugün zaten senkronize olmayabilirler. Her durumda, bu genellikle bir gösteri durdurucusudur, çünkü aynı yazılım sürümlerini geliştirme ortamında ve yönetilen ortamda kullanamamak, işe yaramaz bir hata kaynağı ve her türlü zorluktur.

  • Yönetilen hizmetler işlevlerine sınırlı erişim sağlar. Burada karşılaştığınız sorun budur: liman işçisini çalıştırmak istiyorsunuz, ancak arka plan programına erişiminiz yok, sadece işlevlerinin bir alt kümesine erişebiliyorsunuz. Bu sınırlamalar bazen iyi belgelenmemekte veya reklam materyali tarafından tam olarak aydınlatılamamaktadır. Bu, yönetilen hizmetten daha iyi bir çözüm için ayrılana kadar bu özellikleri anlamak ve entegre etmek için harcanan işin değersiz olduğu anlamına gelir.

  • Yönetilen hizmetler orada sakladığımız verilere kısıtlı erişim sağlar. Dolayısıyla, günlüğe kaydetme ve izleme için yönetilen hizmetlere örnek vermek gerekirse veri erişimi yavaş, elverişsiz ve geniştir. Altyapımızı çalıştırırsak, izleme nesnelerimiz hakkında herhangi bir süslü özel analiz yapmakta özgürüz, çünkü verilere ulaşmak daha kolaydır.

Bunun yönetilen hizmetlere karşı bir durum olmadığını unutmayın. Bir el, kullanım kolaylığını esneklik ve işlevsellik ile birleştirebilir. Ancak bu hizmetlerin birçoğu esneklik ve işlevsellik için kullanım kolaylığı sağlar: bunları basit bir işlevselliği hızlı bir şekilde oluşturmak için uygun bir şekilde kullanabiliriz, ancak bu noktanın ötesine geçmemizi engelleyeceklerdir. Bu değiş tokuşun farkında olmalı ve düşünmeliyiz.


8

CircleCI artık Ubuntu 14.04 ve Docker 17.06.0-ce sürümleri ile sizin için ayrı bir VM sağlayan bir makine yürütücüsü kullanmanıza izin veriyor . Bu, Docker arka plan programı için deneysel özellikleri açmanıza olanak tanır.

İşinizi sadece bir Docker kapsayıcısı yerine ayrı bir sanal makinede çalıştırmak için machineanahtar yerine anahtarı kullanmanız gerekir docker.

Makine için yalnızca 2 resim seçebilirsiniz:

  • circleci/classic:latest: Docker 17.03.0-ce ile Ubuntu 14.04 veya
  • circleci/classic:edge: Docker 17.06.0-ce ile Ubuntu 14.04 - deneysel özelliklere sahip olan.

Ayrıca oldukça çıplak olduğu için makineye kendiniz de bağımlılıklar yüklemeniz gerekir. Örneğin, testleriniz için PHP'ye ihtiyacınız varsa çalıştırmanız gerekir sudo apt-get install -y php5.

Deneysel özelliği kullanarak bir Docker görüntüsü oluşturan örnek bir .circleci / config.yml dosyasıdocker build --squash :

.circleci / config.yml

version: 2
jobs:
  build:
    # Run in a separate virtual machine instead of a Docker container.
    machine:
      enabled: true
      # Use Ubuntu 14.04 with bleeding edge Docker daemon 17.06.0-ce.
      image: circleci/classic:edge
    steps:
      - checkout
      - run:
          command: |
            # Restart Docker with experimental features on.
            sudo sh -c 'echo '\''DOCKER_OPTS="--experimental=true"'\'' >> /etc/default/docker'
            sudo service docker restart

            # Install dependencies for tests etc.
            sudo apt-get update
            sudo apt-get install -y php5

            # Build image with experimental feature --squash.
            docker build --squash -t myuser/myimage .

            # Login and push Docker image to registry.
            docker login -u $DOCKER_USER -p $DOCKER_PASS
            docker push myuser/myimage

1
Bu kabul edilen cevap olmalı. Circle CI'de çok iyi çalışıyor. Sadece 180MB'a kadar 1GB ince görüntü aldım.
pista329
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.