CircleCIで実験的なDocker機能を実行する方法


12

CircleCIでビルドが開始されると、最初に行われることの1つは次のとおりです。

リモート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システムにあるリモートDockerへの接続が行われたことを示しているため、不可能のようです。

回答:


5

マネージドサービスの制限に直面しています。多くのマネージドサービスは、アイデアの実験を始めるのに最適であり、カジュアルユーザーに大きな価値を示すことができます。しかし、それらは使いやすさと柔軟性と機能性のトレードオフです。したがって、深刻なニーズがあり始め、これらのアイデアを構築するためにかなりの努力を費やす準備ができたらすぐに、私たちがすべき最初の動きは、柔軟な機能を選択することです。完全に機能するソリューション。私の判断では、あなたは何か他のものを探す必要があるところに線を引いています–そして、あなたは別のツールを学ぶ必要があることに気づくでしょう、それはそれがフリーソフトウェアではなく、それを自分で実行することができないからです。

ここではCircle CIについて話していますが、次の制限は多くのマネージドサービスに共通です。

  • マネージドサービスは、使用を許可するソフトウェアバージョンに厳しい制約を課します。これらの制約は、今日必要なものと一致する可能性がありますが、後で一致させる必要はありません。彼らは今日すでに同期していない可能性があります。いずれの場合も、開発環境と管理された環境で同じソフトウェアバージョンを使用できないことは、バグやあらゆる種類の困難の役に立たないソースであるため、これは多くの場合、見逃しがちです。

  • マネージドサービスは、その機能への制限付きアクセスを提供します。これはあなたがここで直面している問題です:dockerを実行したいのですが、デーモンにはアクセスできず、その機能のサブセットにしかアクセスできません。これらの制限は、十分に文書化されていない場合や、広告素材によって完全に明らかにされていない場合があります。これは、マネージドサービスを別のより良いソリューションに任せるまで、これらの機能の理解と統合に費やした作業が役に立たないことを意味します。

  • マネージドサービスは、そこに保存されているデータへのアクセスを制限します。したがって、ロギングとモニタリングのためのマネージドサービスを例にとると、データアクセスは遅く、不便で拡張性があります。インフラストラクチャを実行する場合、データへのアクセスが容易になるため、監視アーティファクトに対して空想的なカスタム分析を自由に実行できます。

これはマネージドサービスには当てはまりません。それらの手は、使いやすさと柔軟性と機能性を組み合わせることができます。しかし、これらのサービスの多くは、使いやすさと柔軟性と機能性を両立させています。これらを便利な方法として使用して、簡単な機能をすばやく構築できますが、その点を超えることができなくなります。このトレードオフを認識して検討する必要があります。


8

CircleCI では、Ubuntu 14.04およびDockerバージョン17.06.0-ceがインストールされた状態で、別個のVMをプロビジョニングするマシンエグゼキューターを使用できるようになりました。これにより、Dockerデーモンの試験的機能をオンにすることができます。

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

以下は、実験的な機能を使用して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で非常にうまく機能します。ちょうど私の1 GBのスリムなイメージを180 MBにダウン。
pista329 2018年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.