Як запустити експериментальні функції Docker на CircleCI


12

Коли запускається збірка на CircleCI, одним із перших моментів є:

Налаштування двигуна віддаленого Docker

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

Згодом, коли docker build --squash -t imagename .запускається на CircleCI, це призводить до:

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

Обговорення

Це працює для використання експериментальних функцій локально після зміни /etc/docker/daemon.jsonнаступного:

{
    "experimental": true
}

і перезапуск служби docker systemctl, але як це зробити в CircleCI? Це видається неможливим, оскільки вихід збірки вказує на те, що підключення здійснюється до віддаленого докера, який знаходиться в системах CircleCI.

Відповіді:


5

Ви стикаєтесь з обмеженнями керованих послуг. Багато керованих сервісів чудово починають експериментувати з ідеями і можуть показати велику цінність для випадкового користувача. Але вони торгують простотою використання для гнучкості та функціональності, тому, як тільки ми починаємо мати серйозні потреби і готові витратити значну кількість зусиль на розвиток цих ідей, першим кроком, який ми повинні зробити, є вибір гнучких повністю функціональне рішення. На мій погляд, ви стикаєтеся з лінії, де потрібно шукати щось інше - і ви помітите, що вам потрібно вивчити інший інструмент, оскільки це не вільне програмне забезпечення, і ви не можете його запустити самостійно.

Тут ми говоримо про CirI CI, але такі обмеження характерні для багатьох керованих служб:

  • Керовані сервіси суворо контрактують на версії програм, які вони дозволяють нам використовувати. Ці обмеження можуть відповідати тому, що нам потрібно сьогодні, але не потрібно пізніше. Вони, можливо, вже не синхронізовані. У будь-якому випадку це часто показує пробку, оскільки неможливість використовувати однакові версії програмного забезпечення в середовищі розробки та в керованому середовищі - це марне джерело помилок і труднощів.

  • Керовані сервіси надають обмежений доступ до своїх функцій. Це проблема, з якою ви стикаєтеся тут: ви хочете запустити докер, але у вас немає доступу до демона, лише до підмножини його функцій. Ці обмеження іноді недостатньо задокументовані і не приведені в повній мірі рекламними матеріалами. Це просто означає, що робота, витрачена на розуміння та інтеграцію цих функцій, є марною, поки ми не залишимо керовану послугу для іншого кращого рішення.

  • Керовані сервіси надають обмежений доступ до даних, які ми зберігаємо там. Отже, щоб взяти приклад керованих служб для ведення журналів та моніторингу, доступ до даних повільний, незручний та розширений. Якщо ми запускаємо нашу інфраструктуру, ми можемо проводити будь-який фантазійний спеціальний аналіз наших артефактів моніторингу, оскільки дані легше дістатись.

Зауважте, що це не стосується керованих служб. Декілька з них здатні поєднувати простоту використання разом з гнучкістю та функціональністю. Але багато хто з цих сервісних торгових простот використання для гнучкості та функціональності: ми можемо використовувати їх як доцільне для швидкого побудови простого функціоналу, але вони не дозволять нам вийти за межі цієї точки. Нам потрібно усвідомити цей компроміс і врахувати.


8

Тепер CircleCI дозволяє використовувати машинний виконавець, який надає вам окремий VM, з встановленими Ubuntu 14.04 та Docker версії 17.06.0-ce. Це дозволяє ввімкнути експериментальні функції демона Докера.

Щоб запустити роботу в окремій віртуальній машині замість просто контейнера Docker, потрібно використовувати machineключ замість dockerключа.

Ви можете вибрати лише 2 зображення для машини:

  • circleci/classic:latest: Ubuntu 14.04 з Docker 17.03.0-ce, або
  • circleci/classic:edge: Ubuntu 14.04 з Docker 17.06.0-ce - той, що має експериментальні функції.

Також вам потрібно буде самостійно встановити залежності на машині, оскільки це досить просто. Наприклад, якщо для тестів вам потрібен PHP, вам потрібно буде запустити sudo apt-get install -y php5.

Ось зразок .circleci / config.yml, який створює зображення Docker за допомогою експериментальної функції 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
Це має бути прийнятою відповіддю. Дуже добре працює у Circle CI. Щойно у мене вийшло 1GB тонке зображення до 180 МБ.
pista329
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.