A little over ten years ago, I started on a software project that was part hobby, part work-related. What it actually does isn’t relevant here. Instead, let’s talk about the components it has, and the tools to create it. It started out as a web page with some JavaScript code that loaded images and operated on them. Later, the JavaScript code invoked a Python CGI script on the web server it runs from to do some OpenCV image processing. So we have the following ingredients:
- HTML web page, for overall layout
- JavaScript files, loaded by the above web page
- Python code, invoked by the JavaScript as a CGI (Common Gateway Interface) script running on the server
- OpenCV, called by the Python code to do image processing
- Apache web server to serve the HTML/JavaScript/image files and run the Python scripts
Read on to learn about how I used Online IDEs and Docker for creating a portable web app.
Online IDEs
In order to develop this project I used On-line IDEs (Integrated Development Environments).

An on-line IDE runs from a web site in a browser window. Inside that window you have all the things you’d associate with a code development tool like Apple’s XCode or Microsoft’s Visual Studio, but running on a remote Linux box. The IDE in the browser window has panels with code editors, file browsers, debugging tools and a shell window where you can type commands. To test the code, I started the web server on my remote Linux box and opened a new browser window running my app.
This worked great. What I loved about it was the extreme availability. I could be anywhere – work, home, a relatives house, etc. As long as I could get to a web browser, I could pick up my project right where I left off by just logging into the online IDE. When I added the Python script to do image processing, the setup got more complicated. I found myself having to learn arcane details about the web server (Apache2) to configure it to run my Python scripts the code in my web page was invoking. But once I had the configuration working, I moved on and focused on my project.
Typically an online IDE vendor offers a “free” level to let you try it out, but it shuts down your workspace if you leave it inactive for a while. You don’t lose any data, but it takes a minute or two to start it back up and open everything again to resume working. For a small fee – $8 to $10 a month, you get a “dedicated” workspace that’s always up and running. Everything is right where you left it as soon as you log in again. Definitely worth it.
One problem with Online IDEs is while it’s a great concept, it apparently isn’t a great business. I started out a over ten years ago with with Koding.com. It worked great for a few years. Then their business morphed into – something, I’m not sure what – and it no longer worked as an IDE. From there I moved to Cloud9. This was really good. I happily used it for a few years until Amazon bought them and buried the product deep within AWS. From there, I moved to CodeAnywhere. This one is still in business! But I didn’t work on my project for a couple of years until now. While I was away, my credit card lapsed, and my workspace was shut down. When I came back they are now part of Daytona.io, some sort of AI company. Setting it up again, the “new generation” environment had completely changed (now based on a web version of VSCode), and my app’s web server configuration no longer worked.
The environment. Yeah. Even though all of the IDEs were running “Linux”, the reality is they all required unique and specific setup and configuration to get the software I needed (Python, OpenCV, Apache2) installed and running. The setup on every one of these platforms (include old CodeAnywhere and new CodeAnywhere) was different. Every time, I would have to dig through documentation, forum posts, support messages, and experiment to get the right software installed and the configuration files set up so my app could run again. Configuring a web server with application scripts is complicated, and every new platform required this unique setup. I tried porting my app to run locally on a Mac, and there it required yet another completely different setup and configuration to get the web server working.
Docker
When I reached out for tech support at the “new” CodeAnywhere, the support person more or less insisted I use Docker to set up a “container”, and do my work with that. I had vaguely heard of Docker, like, something server-bros used? Time to learn about it.
Docker sets up a virtual Linux machine, and runs your server on that VM inside whatever system you’re using it on. No matter what your platform is – online IDE, Mac, Windows PC, etc. the system and applications running in the Docker container sees itself running on the exact Linux machine you created. You specify your setup and configuration for this system once, and by the sheer brute force of executing that entire Linux installation as a virtual machine, you can run it anywhere. No more configuring the web server for every different new platform!
Docker allows you to mount the host’s file system in the VM, so you can edit and manage your work using your development environment’s regular editor and source control tools (Github, etc). You don’t need to re-launch the VM to update your work. You can also open an interactive shell inside the VM, in case you need to check its behavior or modify its configuration on the fly.
As an experiment, I tried porting my Docker installation from CodeAnywhere to a Mac. After installing the Docker desktop application on the Mac, I was able create and run the same Docker container there, and have it run with no changes in my code and no extra setup work. This is huge. Previously, each platform my app ran on required about two pages of instructions about how to set up and configure the platform. Now, this voodoo was figured out once, and baked into the virtual machine Docker creates.
Is Docker a lot of overhead? Well, the Docker application requires a few gigabytes to install, and the virtual machine images it creates are a few gigabytes more. But we live in a world now where 5GB of disk space – even for SSDs – costs less than twenty cents and will only get cheaper. Docker is free for individual / small business use, and rents for about $150/yr for larger corporations. I’m looking forward to no longer fiddling with web server configuration challenges to run my app on new platforms.
Note: Nothing here is a paid promotion. I paid for CodeAnywhere (and the previous online IDEs) myself. Docker is included for free with CodeAnywhere. Work covered the cost of the Docker Desktop app at my request.