
Plone Archeology (2003 - 2012)
I'm currently working on a project that takes a Plone 2.1 site and upgrades it to a fancy and shiny Plone 6.2 with a Volto frontend.
For a long time I believed an in-place upgrade would do the trick: grab the database, move to a newer Plone version, upgrade the site, repeat. And it mostly does. In my tests, migrating a Plone 1.0 site all the way up to 6.2 hit only two minor hiccups. But this project has custom code, so I went with exporting the content to JSON instead. That is a story for another post.
This one is about where that effort led me.
Containers for old Plone versions
Running Plone 2.1, and the ancient Python it needs, on a modern operating system is a challenge. Even more so with 50 GB of data to worry about. In previous projects I would grab the database, prepare a container for that specific Plone version, and work from there. That worked well for anything from Plone 4.3 onwards (mostly thanks to Alin Voinea, from Eau de Web), but there were no containers for older versions.
Now there are. They live at plone/container-historical, and they go all the way back to Plone 1.0.
Some decisions I took along the way:
- One image per release series. Each one uses the latest point release that can still be built, so Plone 1.0 is actually 1.0.6, Plone 2.0 is 2.0.5, and so on.
- A
-demovariant of every image, with a Plone site already created. Start the container and enjoy Plone like it's 2005. linux/amd64only. I work on an Apple Silicon Mac, but building for both platforms would be an uphill battle, mostly due to Debian packages and friends.- Never for production. These stacks have known, unpatched security issues. They exist for content extraction, migration rehearsals, and archeology.
Take it for a spin
Every version works the same way:
Open http://localhost:8080/Plone and log in with admin / admin. To visit another era, swap the tag for any of the versions below. The --platform flag keeps Docker quiet on Apple Silicon, where the image runs under emulation.
Plone 1.0
Released in 2003.
plone/plone:1.0-demo runs Plone 1.0.6 on Zope 2.7.8 and Python 2.3.7.
docker run --platform linux/amd64 -it -p8080:8080 plone/plone:1.0-demoPlone 2.0
Released in 2004.
plone/plone:2.0-demo runs Plone 2.0.5 on Zope 2.7.8 and Python 2.3.7.
docker run --platform linux/amd64 -it -p8080:8080 plone/plone:2.0-demoPlone 2.1
Released in 2005.
plone/plone:2.1-demo runs Plone 2.1.4 on Zope 2.8.12 and Python 2.4.6.
docker run --platform linux/amd64 -it -p8080:8080 plone/plone:2.1-demoPlone 2.5
Released in 2006.
plone/plone:2.5-demo runs Plone 2.5.4-2 on Zope 2.9.12 and Python 2.4.6.
docker run --platform linux/amd64 -it -p8080:8080 plone/plone:2.5-demoPlone 3.0
Released in 2007.
plone/plone:3.0-demo runs Plone 3.0.5 on Zope 2.10.13 and Python 2.4.6.
docker run --platform linux/amd64 -it -p8080:8080 plone/plone:3.0-demoPlone 3.1
Released in 2008.
plone/plone:3.1-demo runs Plone 3.1.7 on Zope 2.10.6 and Python 2.4.6.
docker run --platform linux/amd64 -it -p8080:8080 plone/plone:3.1-demoPlone 3.2
Released in 2009.
plone/plone:3.2-demo runs Plone 3.2.3 on Zope 2.10.7 and Python 2.4.6.
docker run --platform linux/amd64 -it -p8080:8080 plone/plone:3.2-demoPlone 3.3
Released in 2009.
plone/plone:3.3-demo runs Plone 3.3.6 on Zope 2.10.13 and Python 2.4.6.
docker run --platform linux/amd64 -it -p8080:8080 plone/plone:3.3-demoPlone 4.0
Released in 2010.
plone/plone:4.0-demo runs Plone 4.0.9 on Zope 2.12.19 and Python 2.6.9.
docker run --platform linux/amd64 -it -p8080:8080 plone/plone:4.0-demoPlone 4.1
Released in 2011.
plone/plone:4.1-demo runs Plone 4.1.6 on Zope 2.13.15 and Python 2.6.9.
docker run --platform linux/amd64 -it -p8080:8080 plone/plone:4.1-demoPlone 4.2
Released in 2012.
plone/plone:4.2-demo runs Plone 4.2.6 on Zope 2.13.21 and Python 2.7.18.
docker run --platform linux/amd64 -it -p8080:8080 plone/plone:4.1-demoWhat's next
Part 2 covers Plone 4.3 to 6.2. Those images already exist, but they don't have the -demo variant yet. As soon as they do, we continue the trip.










