CircleCI에서 실험용 Docker 기능을 실행하는 방법


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

관리 서비스의 한계에 부딪 치고 있습니다. 많은 관리 서비스는 아이디어 실험을 시작하기에 좋으며 일반 사용자에게 큰 가치를 보여줄 수 있습니다. 그러나 유연성과 기능성에 대한 사용 편의성을 교환하므로 심각한 요구 가 시작되고 이러한 아이디어를 구축하기 위해 많은 노력을 기울일 준비 가 되 자마자 가장 먼저해야 할 일은 유연한 옵션을 선택하는 것입니다. 완벽한 기능성 솔루션. 내 판단에서, 당신은 당신이 다른 것을 찾아야하는 선을 치고있다 – 그리고 당신은 다른 소프트웨어를 배우는 것이 자유 소프트웨어가 아니고 당신이 그것을 스스로 실행할 수 없기 때문에 다른 도구를 배워야한다는 것을 알게 될 것이다.

여기에서는 Circle CI에 대해 이야기하지만 다음과 같은 제한 사항은 많은 관리 서비스에 공통입니다.

  • 관리 형 서비스는 우리가 사용할 수있는 소프트웨어 버전에 큰 제약을가합니다. 이러한 제약 조건은 오늘날 필요한 것과 일치하지만 나중에는 필요하지 않습니다. 그들은 오늘 이미 동기화되지 않았을 수 있습니다. 어쨌든 개발 환경과 관리되는 환경에서 동일한 소프트웨어 버전을 사용할 수 없기 때문에 모든 종류의 버그와 어려움이 있기 때문에 이것은 종종 쇼 스토퍼입니다.

  • 관리 서비스는 해당 기능에 대한 제한된 액세스를 제공합니다. 이것은 당신이 직면하고있는 문제입니다 : docker를 실행하려고하지만 데몬에 액세스 할 수는 없으며 기능의 하위 세트에만 액세스 할 수 있습니다. 이러한 제한은 때때로 광고 자료에 의해 잘 문서화되거나 완전히 밝혀지지 않습니다. 이는 관리 서비스를 통해 더 나은 솔루션을 제공 할 때까지 이러한 기능을 이해하고 통합하는 데 소비 한 작업이 가치가 없다는 것을 의미합니다.

  • 관리 형 서비스는 저장된 데이터에 대한 제한된 액세스를 제공합니다. 따라서 로깅 및 모니터링을위한 관리 서비스의 예를 들기 위해 데이터 액세스가 느리고 불편하며 광범위합니다. 인프라를 운영하는 경우 데이터에 쉽게 접근 할 수 있기 때문에 모니터링 아티팩트에 대한 멋진 사용자 정의 분석을 자유롭게 실행할 수 있습니다.

이것은 관리 서비스에 대한 경우가 아닙니다. 그들 중 한 명이 사용의 용이성과 유연성 및 기능성을 결합 할 수 있습니다. 그러나 이러한 서비스 거래의 대부분은 유연성과 기능성을 위해 사용 편의성을 제공합니다. 간단한 기능을 신속하게 구축하는 데 편리하게 사용할 수 있지만 그 시점을 넘어서는 것은 불가능합니다. 우리는이 절충점을 알고 고려해야합니다.


8

CircleCI를 사용하면 Ubuntu 14.04 및 Docker 버전 17.06.0-ce가 설치된 별도의 VM을 프로비저닝 하는 머신 실행기 를 사용할 수 있습니다 . 이를 통해 Docker 데몬의 실험 기능을 켤 수 있습니다.

Docker 컨테이너 대신 별도의 가상 머신에서 작업을 실행 하려면 machine키 대신 키 를 사용해야합니다 docker.

기기에 대해 2 개의 이미지 만 선택할 수 있습니다.

  • circleci/classic:latest: Docker 17.03.0-ce가 설치된 Ubuntu 14.04 또는
  • circleci/classic:edge: Docker 17.06.0-ce가 포함 된 Ubuntu 14.04-실험 기능이있는 Ubuntu 14.04

또한 시스템에 의존성이 없어서 직접 종속성을 설치해야합니다. 예를 들어 테스트에 PHP가 필요한 경우을 실행해야합니다 sudo apt-get install -y php5.

실험 기능을 사용하여 Docker 이미지를 빌드 하는 샘플 .circleci / config.yml 은 다음과 같습니다 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 슬림 이미지를 180MB로 줄였습니다.
pista329
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.