Cara menjalankan fitur Docker eksperimental di CircleCI


12

Ketika membangun dimulai di CircleCI salah satu hal pertama yang dilakukan adalah:

Menyiapkan mesin Docker jarak jauh

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

Selanjutnya ketika docker build --squash -t imagename .dijalankan pada CircleCI itu menghasilkan:

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

Diskusi

Ini berfungsi untuk menggunakan fitur eksperimental secara lokal setelah mengubah /etc/docker/daemon.jsonsebagai berikut:

{
    "experimental": true
}

dan me-restart layanan systemctl buruh pelabuhan, tetapi bagaimana melakukannya di CircleCI? Tampaknya tidak mungkin karena output build menunjukkan bahwa koneksi dibuat ke buruh pelabuhan jarak jauh yang berada di sistem CircleCI.

Jawaban:


5

Anda mengalami keterbatasan layanan terkelola. Banyak layanan terkelola yang bagus untuk mulai bereksperimen dengan ide-ide dan dapat menunjukkan nilai yang bagus untuk pengguna biasa. Tetapi mereka memperdagangkan kemudahan penggunaan untuk fleksibilitas dan fungsionalitas, oleh karena itu segera setelah kami mulai memiliki kebutuhan serius dan siap untuk menghabiskan sejumlah besar upaya membangun ide-ide ini, langkah pertama yang harus kita lakukan adalah memilih solusi berfungsi penuh. Dalam penilaian saya, Anda memukul garis di mana Anda perlu mencari sesuatu yang lain - dan Anda akan melihat bahwa Anda perlu mempelajari alat yang berbeda, karena itu bukan perangkat lunak bebas dan Anda tidak dapat menjalankannya sendiri.

Di sini kita berbicara tentang Circle CI, tetapi batasan berikut umum untuk banyak layanan terkelola:

  • Layanan terkelola memberikan batasan keras pada versi perangkat lunak yang mereka izinkan kami gunakan. Kendala-kendala ini mungkin cocok dengan yang kita butuhkan saat ini, tetapi tidak perlu di lain waktu. Mereka mungkin sudah tidak sinkron hari ini. Bagaimanapun, ini sering menjadi penghenti acara, karena tidak dapat menggunakan versi perangkat lunak yang sama dalam lingkungan pengembangan dan dalam lingkungan yang dikelola adalah sumber bug dan kesulitan yang tidak berguna dari semua jenis.

  • Layanan terkelola menyediakan akses terbatas ke fungsionalitasnya. Ini adalah masalah yang Anda hadapi di sini: Anda ingin menjalankan buruh pelabuhan, tetapi Anda tidak memiliki akses ke daemon, hanya ke subset dari fungsinya. Batasan-batasan ini kadang-kadang tidak didokumentasikan dengan baik atau tidak mendapat perhatian penuh dari materi iklan. Ini hanya berarti pekerjaan yang dihabiskan untuk memahami dan mengintegrasikan fitur-fitur ini tidak ada artinya sampai kita meninggalkan layanan terkelola untuk solusi lain yang lebih baik.

  • Layanan terkelola menyediakan akses terbatas ke data yang kami simpan di sana. Jadi, untuk mengambil contoh layanan yang dikelola untuk penebangan dan pemantauan, akses data lambat, tidak nyaman, dan ekspansif. Jika kami menjalankan infrastruktur kami, kami bebas untuk menjalankan analisis kustom mewah pada artefak pemantauan kami, karena data lebih mudah dijangkau.

Perhatikan bahwa ini bukan kasus terhadap layanan yang dikelola. Beberapa dari mereka mampu menggabungkan kemudahan penggunaan bersama dengan fleksibilitas dan fungsionalitas. Tetapi banyak dari layanan perdagangan ini yang mudah digunakan untuk fleksibilitas dan fungsionalitas: kita dapat menggunakannya sebagai sarana untuk dengan cepat membangun fungsionalitas sederhana tetapi mereka akan mencegah kita untuk berjalan melampaui titik itu. Kita harus menyadari pertukaran ini dan mempertimbangkannya.


8

CircleCI sekarang memungkinkan Anda untuk menggunakan pelaksana mesin yang menyediakan VM terpisah untuk Anda, dengan Ubuntu 14.04 dan Docker versi 17.06.0-ce diinstal. Ini memungkinkan Anda untuk mengaktifkan fitur eksperimental untuk daemon Docker.

Anda perlu menggunakan machinekunci, bukan dockerkunci, untuk menjalankan pekerjaan Anda di mesin virtual terpisah, bukan hanya wadah Docker.

Anda hanya dapat memilih 2 gambar untuk mesin:

  • circleci/classic:latest: Ubuntu 14.04 dengan Docker 17.03.0-ce, atau
  • circleci/classic:edge: Ubuntu 14.04 dengan Docker 17.06.0-ce - yang memiliki fitur eksperimental.

Anda juga harus menginstal dependensi pada mesin sendiri, karena itu cukup telanjang. Misalnya, jika Anda membutuhkan PHP untuk pengujian Anda, Anda harus menjalankannya sudo apt-get install -y php5.

Berikut adalah contoh .circleci / config.yml yang membuat gambar Docker menggunakan fitur eksperimental 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
Ini harus menjadi jawaban yang diterima. Bekerja sangat baik di Circle CI. Baru saja mendapatkan gambar ramping 1GB saya hingga 180MB.
pista329
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.