• Stars
    star
    1,747
  • Rank 26,653 (Top 0.6 %)
  • Language
    Dockerfile
  • License
    MIT License
  • Created almost 5 years ago
  • Updated 11 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A Virtualised Raspberry Pi inside a Docker image

dockerpi

Docker Pulls Docker Image Size GitHub Donate Bitcoin Donate Lightning Donate

A Virtualised Raspberry Pi inside a Docker image

Gives you access to a virtualised ARM based Raspberry Pi machine running the Raspian operating system.

This is not just a Raspian Docker image, it's a full ARM based Raspberry Pi virtual machine environment.

Usage

docker run -it lukechilds/dockerpi

By default all filesystem changes will be lost on shutdown. You can persist filesystem changes between reboots by mounting the /sdcard volume on your host:

docker run -it -v $HOME/.dockerpi:/sdcard lukechilds/dockerpi

If you have a specific image you want to mount you can mount it at /sdcard/filesystem.img:

docker run -it -v /2019-09-26-raspbian-buster-lite.img:/sdcard/filesystem.img lukechilds/dockerpi

If you only want to mount your own image, you can download a much slimmer VM only Docker container that doesn't contain the Raspbian filesystem image:

Docker Image Size Docker Image Size

docker run -it -v /2019-09-26-raspbian-buster-lite.img:/sdcard/filesystem.img lukechilds/dockerpi:vm

Which machines are supported?

By default a Raspberry Pi 1 is virtualised, however experimental support has been added for Pi 2 and Pi 3 machines.

You can specify a machine by passing the name as a CLI argument:

docker run -it lukechilds/dockerpi pi1
docker run -it lukechilds/dockerpi pi2
docker run -it lukechilds/dockerpi pi3

Note: In the Pi 2 and Pi 3 machines, QEMU hangs once the machines are powered down requiring you to docker kill the container. See #4 for details.

Wait, what?

A full ARM environment is created by using Docker to bootstrap a QEMU virtual machine. The Docker QEMU process virtualises a machine with a single core ARM11 CPU and 256MB RAM, just like the Raspberry Pi. The official Raspbian image is mounted and booted along with a modified QEMU compatible kernel.

You'll see the entire boot process logged to your TTY until you're prompted to log in with the username/password pi/raspberry.

pi@raspberrypi:~$ uname -a
Linux raspberrypi 4.19.50+ #1 Tue Nov 26 01:49:16 CET 2019 armv6l GNU/Linux
pi@raspberrypi:~$ cat /etc/os-release | head -n 1
PRETTY_NAME="Raspbian GNU/Linux 10 (buster)"
pi@raspberrypi:~$ cat /proc/cpuinfo
processor       : 0
model name      : ARMv6-compatible processor rev 7 (v6l)
BogoMIPS        : 798.31
Features        : half thumb fastmult vfp edsp java tls
CPU implementer : 0x41
CPU architecture: 7
CPU variant     : 0x0
CPU part        : 0xb76
CPU revision    : 7

Hardware        : ARM-Versatile (Device Tree Support)
Revision        : 0000
Serial          : 0000000000000000
pi@raspberrypi:~$ free -h
              total        used        free      shared  buff/cache   available
Mem:          246Mi        20Mi       181Mi       1.0Mi        44Mi       179Mi
Swap:          99Mi          0B        99Mi

Build

Build this image yourself by checking out this repo, cd ing into it and running:

docker build -t lukechilds/dockerpi .

Build the VM only image with:

docker build -t lukechilds/dockerpi:vm --target dockerpi-vm .

Credit

Thanks to @dhruvvyas90 for his dhruvvyas90/qemu-rpi-kernel repo.

License

MIT Β© Luke Childs

More Repositories

1

zsh-nvm

Zsh plugin for installing, updating and loading nvm
Shell
2,077
star
2

reverse-shell

Reverse Shell as a Service
JavaScript
1,732
star
3

merge-images

Easily compose images together without messing around with canvas
JavaScript
1,611
star
4

gifgen

Simple high quality GIF encoding
Shell
527
star
5

zsh-better-npm-completion

Better completion for npm
Shell
450
star
6

when-dom-ready

$(document).ready() for the 21st century
JavaScript
334
star
7

refind-ambience

Minimal theme for the rEFInd boot manager
308
star
8

humanscript

A truly natural scripting language
Shell
226
star
9

htconvert

Convert .htaccess redirects to nginx.conf redirects
JavaScript
186
star
10

browser-env

Simulates a global browser environment using jsdom
JavaScript
171
star
11

coinlist

Comprehensive list of cryptocurrencies with metadata
JavaScript
155
star
12

coinflict-of-interest

Browser extension to show user biases on Crypto Twitter.
JavaScript
144
star
13

chest

Bash glue to encrypt and hide files
Shell
129
star
14

create-test-server

Creates a minimal Express server for testing
JavaScript
121
star
15

docker-electrumx

Run an Electrum server with one command
Dockerfile
102
star
16

base64-async

Non-blocking chunked Base64 encoding
JavaScript
98
star
17

doge-seed

Dank mnemonic seed phrases
HTML
89
star
18

onionite

Explore the Tor network
JavaScript
76
star
19

window

Exports a jsdom window object.
JavaScript
74
star
20

expired

Calculate when HTTP cache headers expire
JavaScript
74
star
21

github-custom-tab-size

Chrome extension - Set custom tab size for code view on GitHub.com
JavaScript
67
star
22

howmanyconfs.com

How many confirmations are equivalent to 6 Bitcoin confirmations?
JavaScript
61
star
23

create-cert

Super simple self signed certificates
JavaScript
43
star
24

react-jsdom

Render React components to actual DOM nodes in Node.js
JavaScript
33
star
25

byte-range

Returns integer ranges for C data types
JavaScript
32
star
26

parcel-plugin-ogimage

Set absolute URL for og:image meta tags.
JavaScript
22
star
27

build-output-script

Builds a P2PKH Bitcoin transaction output script
JavaScript
21
star
28

create-xpub

Create a BIP32 extended public key
JavaScript
21
star
29

onionoo-node-client

Node.js client library for the Tor Onionoo API
JavaScript
20
star
30

autoscale-do-block-storage

Autoscale Digital Ocean block storage volumes
Shell
20
star
31

my-name-is-url

Intelligent URL parser
JavaScript
17
star
32

docker-vertcoind

Run a full Vertcoin node with one command
Dockerfile
9
star
33

tippin-badge

Readme badge generator for tippin.me
HTML
8
star
34

docker-bitcoind

Run a full Bitcoin node with one command
Dockerfile
7
star
35

create-node

Converts an HTML string to a dom node
JavaScript
7
star
36

this

Traverses up the directory tree and returns the first module found
JavaScript
7
star
37

requirable

Enables a module to require itself by name
JavaScript
6
star
38

docker-ledger-sdk

Build a Ledger app with one command
Dockerfile
6
star
39

ephemeral-electrum

A quick throwaway text based Electrum instance.
Dockerfile
5
star
40

electrs-next

Docker configuration for testing the `next` branch of electrs.
Dockerfile
5
star
41

notary-node-utils

Utilities for running a notary node
Shell
5
star
42

docker-electrum-vertcoin

Run a Vertcoin Electrum server with one command
4
star
43

docker-barterdex-api

Shell
4
star
44

vainjs

A JavaScript vanity address generator
JavaScript
4
star
45

sign-release

Easy automated release signing
Shell
3
star
46

vercel-bug

JavaScript
1
star
47

test

test repo for testing git/GitHub related things
1
star
48

arrows

My custom ZSH theme
Shell
1
star
49

eslint-config-lukechilds

My personal eslint preferences
JavaScript
1
star
50

eslint-config-xo-lukechilds

My personal XO overrides
JavaScript
1
star
51

Extension

Browser extension to show user influence on Crypto Twitter.
JavaScript
1
star
52

morethan140

View and send tweets over 140 characters
JavaScript
1
star
53

b64golf

JavaScript
1
star
54

AtHash

Social text parser
JavaScript
1
star
55

pirateproxy

Proxy site for thepiratebay.org
JavaScript
1
star
56

javascript

How we like to JavasScript at Unsplash.
JavaScript
1
star
57

umbrel-apps-test-2

1
star
58

syringe

Search and inject packages from npm
JavaScript
1
star
59

blog-clj

Clojure
1
star
60

anonlytics-express

Privacy respecting analytics for express apps
JavaScript
1
star
61

tor-hs-issue-repro

Shell
1
star
62

trim

Rust
1
star
63

hyperdex-bugtracker

1
star
64

homebrew-tap

My Homebrew tap
Ruby
1
star
65

bip39-versioned

Proof of concept adding versioning to BIP39 compatible seeds
JavaScript
1
star