Jak uruchomić eksperymentalne funkcje Dockera w CircleCI

12

Gdy kompilacja jest uruchamiana w CircleCI, jedną z pierwszych rzeczy, które są wykonywane, jest:

Skonfiguruj zdalny silnik 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

Następnie po docker build --squash -t imagename .uruchomieniu w CircleCI powoduje:

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

Dyskusja

Działa lokalnie z eksperymentalnymi funkcjami po zmianie w /etc/docker/daemon.jsonnastępujący sposób:

{
    "experimental": true
}

i ponowne uruchomienie usługi systemctl dokera, ale jak to zrobić w CircleCI? Wydaje się to niemożliwe, ponieważ dane wyjściowe kompilacji wskazują, że nawiązano połączenie ze zdalnym dokerem, który znajduje się w systemach CircleCI.

030
źródło

Odpowiedzi:

5

Występują ograniczenia usług zarządzanych. Wiele usług zarządzanych świetnie nadaje się do eksperymentowania z pomysłami i może mieć dużą wartość dla zwykłego użytkownika. Ale wymieniają łatwość użycia na elastyczność i funkcjonalność, dlatego gdy tylko zaczniemy mieć poważne potrzeby i jesteśmy gotowi poświęcić znaczną ilość wysiłku na rozwijaniu tych pomysłów, pierwszym krokiem, który powinniśmy zrobić, jest wybranie elastycznego w pełni funkcjonalne rozwiązanie. Moim zdaniem trafiasz w linię, w której musisz szukać czegoś innego - i zauważysz, że musisz nauczyć się innego narzędzia, ponieważ to nie jest wolne oprogramowanie i nie możesz sam go uruchomić.

Mówimy tutaj o Circle CI, ale następujące ograniczenia są wspólne dla wielu usług zarządzanych:

  • Usługi zarządzane mocno ograniczają wersje oprogramowania, z których mogą korzystać. Ograniczenia te mogą odpowiadać potrzebom dzisiaj, ale nie muszą tego w późniejszym czasie. Mogą być dzisiaj niezsynchronizowane. W każdym razie jest to często przeszkodą, ponieważ niemożność korzystania z tych samych wersji oprogramowania w środowisku programistycznym i zarządzanym jest bezużytecznym źródłem błędów i wszelkiego rodzaju trudności.

  • Usługi zarządzane zapewniają ograniczony dostęp do ich funkcjonalności. Oto problem, przed którym stoisz: chcesz uruchomić dokera, ale nie masz dostępu do demona, a jedynie do jego podzbioru. Ograniczenia te niekiedy nie są dobrze udokumentowane ani nie są w pełni widoczne w materiałach reklamowych. Oznacza to po prostu, że praca poświęcona na zrozumienie i zintegrowanie tych funkcji jest bezwartościowa, dopóki nie opuścimy usługi zarządzanej w celu uzyskania lepszego rozwiązania.

  • Usługi zarządzane zapewniają ograniczony dostęp do przechowywanych tam danych. Tak więc, na przykładzie usług zarządzanych do rejestrowania i monitorowania, dostęp do danych jest powolny, niewygodny i ekspansywny. Jeśli korzystamy z naszej infrastruktury, możemy dowolnie przeprowadzać dowolne niestandardowe analizy naszych artefaktów monitorowania, ponieważ dane są łatwiej dostępne.

Pamiętaj, że nie dotyczy to usług zarządzanych. Jedną z nich można połączyć łatwość użytkowania z elastycznością i funkcjonalnością. Ale wiele z tych usług zapewnia łatwość użycia w celu zapewnienia elastyczności i funkcjonalności: możemy je wykorzystać jako cel, aby szybko zbudować prostą funkcjonalność, ale nie pozwolą nam wyjść poza ten punkt. Musimy zdawać sobie sprawę z tego kompromisu i rozważyć.

Michael Le Barbier Grünewald
źródło
8

CircleCI pozwala teraz na korzystanie z executora maszyn, który zapewnia dla ciebie osobną maszynę wirtualną, z zainstalowanym Ubuntu 14.04 i Docker w wersji 17.06.0-ce. Pozwala to włączyć eksperymentalne funkcje demona Docker.

Musisz użyć machineklucza zamiast dockerklucza, aby uruchomić zadanie na osobnej maszynie wirtualnej zamiast tylko kontenera Docker.

Możesz wybrać tylko 2 obrazy dla urządzenia:

  • circleci/classic:latest: Ubuntu 14.04 z Docker 17.03.0-ce lub
  • circleci/classic:edge: Ubuntu 14.04 z Docker 17.06.0-ce - ten z funkcjami eksperymentalnymi.

Musisz także samodzielnie zainstalować zależności na komputerze, ponieważ jest on całkiem pusty. Na przykład, jeśli potrzebujesz PHP do swoich testów, musisz uruchomić sudo apt-get install -y php5.

Oto przykładowy plik .circleci / config.yml, który buduje obraz Dockera przy użyciu funkcji eksperymentalnej 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
Eugene Sia
źródło
1
To powinna być zaakceptowana odpowiedź. Działa bardzo dobrze w Circle CI. Właśnie dostałem mój 1GB cienki obraz do 180 MB.
pista329,