docker run -d -p 2211:22 -p 5901:5901 rcarmo/azure-toolbox
NOTE: THIS IS IN HIATUS DUE TO THE INTRODUCTION OF AZURE CLOUD SHELL
Since the Azure Portal now provides a built-in HTML5 terminal with a working CLI and the option to run other tools like Terraform, this image is not going to be actively maintained moving forward, and is kept as a reference for further builds.
A standalone development environment to work on Azure solutions, containing:
- An Ubuntu 16.04 LTS (Xenial) userland
- A simple X11 desktop (using the Infinality font rendering engine) that you can access over VNC
- Firefox and Google Chrome
- Azure CLI 2.0
- Visual Studio Code
- Go 1.8
- The Docker CLI tools
In addition, with the
:java tag, you get:
- Java 8
And on top of that, with the (experimental)
:ml tag, you get a full-blown deep learning environment:
- Continuum Anaconda (Python 3.6)
- CNTK (built for CPU only)
- Tensorflow (built for CPU only)
- Apache MXNet
Login via SSH to port 2211 as
changeme. Once inside,
remote.sh will launch the VNC server with a set of predefined resolutions (use
xrandr -s <resolution> to resize the desktop - some VNC clients may need to reconnect, but TigerVNC seems to work fine in Windows, and so does the macOS VNC client)
Quickstart (NO AUTHENTICATION!)
docker run -d -p 5901:5901 rcarmo/azure-toolbox /quickstart.sh noauth
No need to use SSH, no VNC authentication. Great for trying it out -- but a bad idea if you expose Docker ports outside your machine.
If you're using a Mac, then don't use
noauth and type
changeme as a VNC password (the built-in VNC client rightfully dislikes null authentication options).
Typical Session (via SSH)
> docker run -d -p 2211:22 rcarmo/azure-toolbox 93b7f70b971468095ba737b1d942131362c9bd7281905f5e8924fd8ddf36300d > ssh -p 2211 -L 5901:localhost:5901 user@localhost The authenticity of host '[localhost]:2211 ([127.0.0.1]:2211)' can't be established. ECDSA key fingerprint is SHA256:Kizn3NWB7LNUjG6BejExMA5f9ZC+Ch4BkooADRgXKZ8. Are you sure you want to continue connecting (yes/no)? yes Warning: Permanently added '[localhost]:2211' (ECDSA) to the list of known hosts. user@localhost's password: $ sh renote.sh You will require a password to access your desktops. Password: Verify: xauth: file /home/user/.Xauthority does not exist New '93b7f70b9714:1 (user)' desktop is 93b7f70b9714:1 Starting applications specified in /home/user/.vnc/xstartup Log file is /home/user/.vnc/93b7f70b9714:1.log $ # you can now VNC to localhost:5901
Preserving Your Work
Just mount a data volume and work inside it. For instance, in Windows:
docker run -d -p 5901:5901 -v c:/Users/billg/Development:/home/user/Development rcarmo/azure-toolbox /quickstart.sh noauth
Preserving browser and editor settings is also doable. Just mount another volume as
/home/user/.config and you should be set (it's probably best to copy the existing settings across first).
For instance, this is what I do to have the toolbox access my local Docker daemon, my local SSH keys and my development folder:
IMAGE=toolbox #IMAGE=rcarmo/azure-toolbox:java docker run -d \ -v /var/run/docker.sock:/var/run/docker.sock \ -v c:/Users/billg/_ssh:/home/user/.ssh \ -v c:/Users/billg/OneDrive/Development:/home/user/Development \ -p 5901:5901 $IMAGE /quickstart.sh noauth
Visual Studio Code stores its settings in
~/.vscode, so you can also mount that onto a host path (mind you, sharing configuration files with your host is not necessarily a good idea).
Please note that this container exposes port 5901. I ordinarily use VNC exclusively over SSH, but Windows users may not have SSH installed or have trouble setting up the tunnel, so I decided to
EXPOSE the port. Docker for Windows seems to only bind it locally, but your mileage may vary.
quickstart.sh script should not be considered a best practice -- if you're going to leave this running someplace, best do it properly.
If you don't pass
quickstart.sh the VNC server will prompt for a password (which is
changeme too), but that's hardly secure in practice - so if you run this container on a machine exposed to the Internet, don't publish port 5901.
This is built upon desktop-chrome, a separate image I use as base for building similar development toolboxes. You'll find the original
EXPOSE declaration, SSH setup, user profile skeleton and
quickstart.sh source there.
- 2017-10-18: General refresh, moved to OpenJDK 9
- 2017-08-17: General refresh
- 2017-08-14: VS Code 1.15
- 2017-08-04: General refresh
- 2017-07-12: VS Code 1.14
- 2017-07-09: Anaconda 4.4.0 (Python 3.6), Apache MXNet
- 2017-06-09: VS Code 1.13, CNTK 2.0, Chrome 59, general refresh
- 2017-05-01: Firefox 53, VS Code 1.11.2, Tensorflow 1.1.0, CNTK 2.0rc2, general refresh
- 2017-04-07: Go 1.8.1, VS Code 1.11.1, Keras, general refresh
- 2017-03-26: New refresh (from new base image with updated VNC server), CNTK support
- 2017-03-09: Refreshed browsers and VSCode
- 2017-03-03: Added Leiningen, Go 1.8 and the Docker CLI tools
- 2017-02-28: NodeJS and the old azure-xplat-cli are no longer included, since the Azure CLI 2.0 has been released. Upgraded to Chrome 56, Firefox 51.