What is installed in circleci 2.0 machine circleci/classic:xxxx VMs?


In the documentation, at:

It says that is is possible to use the following VMS as machine executor:

circleci/classic:latest (default) - an Ubuntu version 14.04 image that includes Docker version 17.03.0-ce and docker-compose version 1.9.0, along with common language tools found in CircleCI 1.0 build image. The latest channel provides the latest tested images, changes to the channel are announced at least a week in advance.
circleci/classic:edge - an Ubuntu version 14.04 image with Docker version 17.06.0-ce and docker-compose version 1.14.0, along with common language tools found in CircleCI 1.0 build image. The edge channel provides release candidates that will eventually be promoted to classic:latest.
circleci/classic:201703-01 – docker 17.03.0-ce, docker-compose 1.9.0
circleci/classic:201707-01 – docker 17.06.0-ce, docker-comopse 1.14.0
circleci/classic:201708-01 – docker 17.06.1-ce, docker-compose 1.14.0

Except for the version of docker and docker-compose, could we get a list of what is installed in those VMs?
Ex: Python version, nodejs…

With CircleCI1 image updates, we got a list ex:

Searching in the forums it seems the current solution is to start a build with SSH enabled, connect and look for yourself, which is not very user friendly:


How is anyone supposed to know what circleci/classic:latest means?

Where is this defined?


This page is fairly prominent in the documentation. From there, you can find links to Git repositories containing Dockerfiles, I imagine some version information would be in there.

Or, you could spin up one of these images on Circle, and then do docker --version in a run step for each of the items you want to get a version for.


That documentation is about Docker images; this question is about VM images.
So the question remains: where are the contents of the VM images documented?


@bboreham: I think I’ve seen links in blog-posts to an automated container catalogue - when they do new image announcements. Maybe take a look at that?

(Hmm, I don’t know if this applies to VM images though, sorry).


I agree this would be a great thing to add to our documentation in the same way that we did for the old LXC images.


The page at https://circleci.com/docs/2.0/executor-types/#using-machine says “Refer to the specification script for the VM”, pointing at https://raw.githubusercontent.com/circleci/image-builder/picard-vm-image/provision.sh, which looks promising, but that branch and master have not been updated in many months so I have to assume that’s not the right place to look.


I have the exact same question. I want to use machine instead of docker but the documention for machine is essentially non-existent.

Specifically I want to use PHP 7.1 which does not appear to be installed and not easily installed on Ubuntu 14.04.



I think this is really a Linux/VM question rather than a CircleCI question. I’d do it the same way as if I were installing it locally onto a 14.04 dev machine: add a trusted third-party repo to Apt and then do the usual apt-get update to fetch the new repo indexes. I’ve done this a couple of times - ping me if you can’t find a suitable trusted repo. I think I recently saw that one of the core PHP committers had their own Debian-typo repo.

Also, if you like, do post here about why you want to use Machine; there may be a way to achieve what you want with the Docker executor.


Thanks for your offer of help. The main thing was I was looking for was better docs on what is installed as per the OP’s question.

I was able to get PHP 7.1 installed except I keep running into problems where /var/lib/dpkg/lock and/or /var/lib/dpkg/ are locked and so the command to install PHP 7.1 is failing.

The reason for wanting to use machine is to get experience with it so we could run our VM+Docker-based solution for local development (here) but run it on CircleCI so we don’t have to maintain two sets of logic. Running Docker-in-Docker is a bit problematic according to my lead developer on the project so we look to run in VMs.

But that’s for longer term. Shorter term I just need to get something done before August 31st. The machine seems to boot up in about 7 seconds but Docker containers are taking as much as 60 seconds to get started. OTOH, the PHP install (when it work) is taking about 60 seconds and I can’t figure out how to cache the PHP install so I may just have to revert back to Docker for now.


I use DinD and it’s been rock-solid for me for about a year (builds on both schedules and code pushes, at least once daily). It does require some non-beginner Docker experience, and any non-trivial CI config requires a fair bit of persistence and positivity, but in my view nested Docker works very well. I use Docker Compose to run integration tests, but locally and remotely.

Hmm, that’s odd. Mostly I am getting Spin up Environment = 1 seconds, and Setup a remote Docker engine = 2 seconds. What base Docker image are you using? Using something lightweight would be a real win here; sometimes on this forum I catch people using 7G images, which is (IMO) a no-no in Dockerland.

Another thing you could think about, if you want a nicer PHP install experience without delving into nested Docker, is to install Docker in a Machine, and pull a lightweight image there. I bet you could get a working PHP test environment inside a 50M Alpine image.


It does require some non-beginner Docker experience, and any non-trivial CI config

Therein lies the rub. The developer on the project has the skill for this, but I do not. And he is unavailable to help me on this because of other obligations.

“What base Docker image are you using?”

This is the one I picked: php:7.1.20-cli-stretch-node-browsers

All of what you are saying makes perfect sense. Except that there is an August 31st deadline to get several builds moved over, I’m the only one to do it, and I am struggling with the basics.

So what is your billing rate? :wink:


@mikeschinkel Yeah, there are no real docs on using the machine executor specifically. I raised an issue on CircleCI’s github to cover off on the basics of what type of VM is it etc.


i swear there used to be a page for this. i’m trying to get some compatibility going here, and i just need to know what version of docker is in circleci/classic:201711-01, but that information seems to be gone…???


Could you just spin up a Machine and run docker -v?

Of course, if there is a default version in this image, you don’t have to use it - I expect you can specify what version you want. I know that installing Docker Compose via Pip, for example, allowed me to install a specified version.


so… is there documentation or not? it seems odd to have to spin up a dozen different machines just to see which one has which version of whichever program i’m looking for.


it’s not prominent at all…