设置远程Docker引擎
>
随后,当在CircleCI上运行
docker build --squash -t imagename .
时,会导致: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
讨论
如下更改
/etc/docker/daemon.json
:Error response from daemon: squash is only supported with experimental mode
Exited with code 1
,然后重新启动docker systemctl服务,但是如何在CircleCI上做到这一点?似乎不可能,因为构建输出指示已建立到CircleCI系统上的远程docker的连接。
#1 楼
您遇到了托管服务的限制。许多托管服务非常适合开始尝试创意,并且可以为临时用户带来巨大价值。但是它们以易用性换取了灵活性和功能性,因此,一旦我们开始有迫切的需求并准备花费大量的精力来建立这些构想,我们应该做的第一步就是选择一种灵活的功能齐全的解决方案。根据我的判断,您遇到了需要寻找其他东西的问题-您会发现您需要学习其他工具,因为这不是免费软件,您无法自己运行它。在这里我们谈论的是Circle CI,但是以下限制对于许多托管服务来说都是常见的:
托管服务对它们允许我们使用的软件版本提出了严格的限制。这些限制可能符合我们今天的需求,但以后不再需要。他们今天可能已经不同步了。在任何情况下,这通常都是一个阻碍因素,因为在开发环境和托管环境中无法使用相同的软件版本是无用的bug和各种困难的源。
托管服务提供了对其功能的受限访问。这是您在此处面临的问题:您想运行docker,但无权访问该守护程序,而只能访问其一部分功能。这些限制有时没有得到很好的证明,也没有被广告材料充分体现。这仅意味着,在我们将托管服务留给另一个更好的解决方案之前,花在理解和集成这些功能上的工作是毫无价值的。
托管服务提供了对我们存储在那里的数据的受限访问。因此,以用于日志记录和监视的托管服务为例,数据访问速度慢,不便且扩展。如果我们运行基础架构,则可以自由地对监视工件进行任何精美的自定义分析,因为数据更易于访问。他们中的一员能够将易用性与灵活性和功能性结合在一起。但是,这些服务中的许多服务都以易用性来实现灵活性和功能性:我们可以将它们用作快速构建简单功能的权宜之计,但是它们将阻止我们超越这一点。我们需要意识到这种权衡并考虑。
#2 楼
现在,CircleCI允许您使用机器执行程序为您预配一个单独的VM,并安装了Ubuntu 14.04和Docker版本17.06.0-ce。这使您可以打开Docker守护程序的实验性功能。您需要使用
machine
密钥而不是docker
密钥,才能在单独的虚拟机中而不是仅在Docker容器中运行作业。 您只能为机器选择2个映像:
circleci/classic:latest
:具有Docker 17.03.0-ce的Ubuntu 14.04,或者circleci/classic:edge
:具有Docker 17.06.0-ce的Ubuntu 14.04-具有实验性功能。例如,如果您需要PHP进行测试,则需要运行sudo apt-get install -y php5
。这是一个示例.circleci / config.yml,它使用实验功能docker build --squash
构建Docker映像:.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
评论
这应该是公认的答案。在Circle CI中效果很好。我的1GB超薄映像降至180MB。
– pista329
18-10-25在11:54