In this guide we'll get started with Docker on 64-bit ARM, build 64-bit images, benchmark the code and upgrade to the latest version of Docker.
Late to the party, here's my Odroid C2.
Earlier this year Docker started to quietly, semi-officially support the ARM platform and the Raspberry Pi Zero/2/3 boards when running Raspbian.
- In this guide we'll get started with Docker on 64-bit ARM, build 64-bit images, benchmark the code and upgrade to the latest version of Docker. Late to the party, here's my Odroid C2. Earlier this year Docker started to quietly, semi-officially support the ARM platform and the Raspberry Pi Zero/2/3 boards when running Raspbian.
- To install Docker CE, you need the 64-bit version of one of these Ubuntu versions: Artful 17.10 (Docker CE 17.11 Edge only) Zesty 17.04. Xenial 16.04 (LTS) Trusty 14.04 (LTS) and: To add the edge or test repository, add the word edge or test (or both) after the word stable in the commands. So if you are using Ubuntu 17.10 (artful), you need to.
BalenaOS shares a lot with cloud operating systems for containers. We share the focus on minimalism, getting out of the user’s way and letting their container do the heavy lifting, and using Docker, which is the standard way of running containers, and well understood by a large developer community.
Raspbian is a port of Debian for the armhf architecture and the default operating system for the Raspberry Pi.
Several boards have recently become available which have an ARMv8 or 64-bit architecture. A couple of these are the Pine64 (around 15 USD) and the Odroid-C2 (43 GBP). These boards both have Ubuntu images available so I decided to find out how easy it was to setup Docker and build some test images.
If you have either of these two boards here's a deep link to the image download pages for Ubuntu 16.04:
Download Mac OS High Sierra 10.13 ISO There were many security issues that arose with High Sierra that was a cause of concern. Users who expected this new version to be more focused on gaming and other entertainment features were disappointed as they did not get what they were looking forward to. Mac os mojave iso file download 64 bit. Converting the DMG file to the ISO format. Changing the file extension to an ISO file. Requirements for macOS Mojave 10.14.1. The user’s Mac must have a minimum of 2 GB of RAM and 12.5 GB of available storage space in case they are upgrading to macOS Mojave from any one of its predecessors from OS X El Capitan and onwards. The macOS ISO file will not open on Windows! Just create a new virtual machine for macOS and add the ISO file to the virtual machine and then start the installation! Click the button below to get macOS Mojave 10.14 ISO file to your computer. ISO Full Version Download. Beta 1 ISO Download. Update (July 26, 2018): macOS High Sierra 10.13.6 Released!
Once you have flashed the Ubuntu 16.04 image to your Pine64 or Odroid-C2 log in over
ssh and type in:
Spoiler alert: curl sh installation method is not currently working for ARM 64-bit. Use apt-get.
So it seems that the Ubuntu ports repository already contains Docker 1.12.1 (quite a recent version of Docker) - this is a really nice surprise and in most cases this is all you will need to start building and testing images.
Justin Cormack who maintains Alpine Linux suggested trying out the Alpine 64-bit ARM image.
Word of caution: the README.md file on the Docker Hub mentions an invalid tag. Right now there isn't even a aarch64/alpine:latest tag, so make sure you are using the edge tag.
Nice, it appears to work really well and the container started quickly too.
Here's a picture of my Pine64 board kindly donated by Uli Middelberg (a follower on Twitter).
Limited edition Pine64 developer-board
Docker Compose has become such a vital tool for defining and linking services that it is likely to become integrated into the
docker CLI going forward.
When using this installation method (apt-get) you do not get
docker-compose bundled in with the engine. So let's install
python-pip and pull down the latest version.
Here's a sample hit-counter built out with Node.js and redis.
docker-compose ps to find the port where the micro-service is running and then try accessing it with curl.
I am using
-4 to force ipv4 - some Ubuntu/Debian distributions try to use ipv6 by default due to a new entry in /etc/hosts.
Why don't you install apache bench and see how many requests per second you can get out of the application?
Here's my results:
If you have multiple cores then you can scale the application upwards and measure the increase in throughput. For a simple guide to Docker services check out my Swarm Mode series.
Packet.net provides a 96-core ARMv8 board costing $0.5/hour. These specifications are nothing like the hubmle (but versatile) Raspberry Pi. It even has 128GB of ECC RAM and a huge SSD - it was definitely designed for production workloads.
- 96 Physical Cores @ 2.0 GHz (2 × Cavium ThunderX)
- 128 GB of DDR4 ECC RAM
- 340 GB of SSD
- 20Gbps Bonded Network
Why not try spend a few cents trying out Docker on some impressive hardware? I have no affiliation to Packet.net - just admiration for this hardware.
Upgrading to 1.12.3
Docker 1.12.3 is the reference build of 1.12 so we should upgrade as soon as possible to get all the fixes around Swarm Mode and overlay networking.
Now if you were on a Raspberry Pi (32-bit ARM) you could upgrade to the latest stable release by typing in:
I tried this out on all three platforms but was met with a bunch of errors. I pinged some folks on the Docker Community Slack channel in #arm and was assured that some fixes are on the way to support this.
The easiest way to get up to date is to rebuild from Github. Normally we would build with
make deb and install the resulting Debian package - it turns out that this is currently not working either.
So instead let's create a
tgz with all the binaries and deploy them over the top of 1.12.1.
- Install screen
This will take a while so install screen with
apt-get. That way, if you get disconnected
screen -r will get you back into the terminal.
- Clone the repo and make the binaries
You will find the .tgz in bundles/latest - unzip it directly over the top of 1.12.1 and then restart the service:
You will now have the latest Docker version.
What about Swarm Mode?
I've only got two ARMv8 boards but was able to provision 5x 96-core hosts on Packet.net which use the Cavium ThunderX chipset. It's no surprise but this incredible machine build the Docker binaries way quicker than my Pine64!
After upgrading to the latest Docker version Swarm Mode worked well for scheduling tasks including inter-service communication between the Node.js and Redis app above. If you're familiar with Swarm Mode, here's my test script:
Please bare in mind that ARMv8 images will need to be rebuilt from scratch just like any armhf or Raspberry Pi images. I have a series you can follow and adapt for ARMv8, just check out the links below.
Keep an eye on the issues over on the Docker repo. Much of the work-arounds here will not be needed after the Docker team resolve the issues with the
Questions, comments, suggestions?
Docker 64 Bit Raspbian
Please get in touch on Twitter @alexellisuk.
Docker 64 Bit Iso
Here are some follow-up links for Docker on ARM.