Exciting news! ThingWorx now has improved support for Docker containers to help you manage CI/CD, improve development efficiency in your organization and save costs. Check out these FAQs below and, as always, reach out to me if you have any additional questions.
What are Docker Containers?
From Docker.com: “a Docker container image is a lightweight, standalone, executable package of software that includes everything needed to run an application: code, runtime, system tools, system libraries and settings”. Learn more here.
What's the difference between Docker containers and VMs?
Containers are an abstraction at the app layer that packages code and dependencies together, whereas Virtual Machines (VMs) are an abstraction of physical hardware turning one server into many servers. Here are some great discussions on it on Stack Overflow.
How can I build ThingWorx Docker images?
Check out the Building ThingWorx 8.3 Docker Images Guide or watch this video to instruct you on how to build and test Docker containers.
How does PTC support building ThingWorx Docker images?
PTC provides the ability for customers and partners to build ThingWorx Docker images. A customer can download the Dockerfiles and scripts packaged as a zip folder from the PTC Software Downloads Portal under “ThingWorx Platform,” then “Release 8.3” then“ThingWorx Dockerfiles.” (Please note that you must be logged in for the link to function properly.)
The zip folder contains the Dockerfiles, template jar, and scripts to fetch Tomcat, and ThingWorx WAR files using CLI. Java must be downloaded manually from the vendor's website. We also provide an instructional guide called “Build ThingWorx Docker Images” available on the Reference Documents page on the Support Portal.
How are ThingWorx Docker images different from the usual delivery media of WAR files?
The WAR file delivery is typically accompanied by an installation guide that contains the manual steps for creating the VM or bare-metal environment. That guide includes instructions for the administrator to manually install the prerequisites, including Tomcat, Java, and ThingWorx platform settings files. To deploy and run the WAR file, the administrator follows the guide to create the runtime environment on an OS. In contrast, the Dockerfile build in this delivery automates the creation of a Docker image once supplied with the prerequisites.
Do you have any reference deployment and guidance?
Yes, you can refer to our blog post to learn how to deploy and run ThingWorx Docker containers on your existing Kubernetes environment.
Is there any recommendation on which Container Orchestrator as a Service (CaaS) a customer should run ThingWorx Foundation Docker container images on?
You can use Docker-Compose for testing, but it is generally not suggested for production deployment use cases. In a production environment, customers should use container orchestrators such as Kubernetes, OpenShift, Azure Kubernetes Service (AKS), or Amazon Elastic Container Service for Kubernetes (Amazon EKS), to deploy and manage ThingWorx Docker images.
What are the skill sets required?
Familiarity with OS CLI and Docker tools is required to build building the ThingWorx Docker images. Familiarity with Docker-compose to run the resulting Docker containers is needed to test the resulting builds. We don’t recommend Docker-Compose for production use, but when using it for local testing and demo purposes, users can rapidly install ThingWorx and get it up and running in minutes.
We expect PTC partners and customers who want to run ThingWorx containerized instances in their production environment to possess the required skill sets within their DevOps team.
How is ThingWorx licensing handled with the Docker images?
By default, the container created from these Docker images starts up in a limited mode with no license supplied. You can configure your username and password for the PTC licensing portal to automatically load a license via environment variables passed into the container on startup. Additionally, you can mount a volume to the /ThingworxPlatform directory, which contains your license file, or to retrieve a license request. To keep your Host ID consistent, ensure that the /ThingworxStorage and /ThingworxPlatform directories are persisted and not removed with individual container restarts.
Is Docker free? What version of Docker does PTC support for ThingWorx?
Docker is open-source and licensed under the Apache 2 license. Information on Docker licensing can be found here.
The following Docker versions are required:
What persistence providers are currently supported?
PTC provides the ability to build ThingWorx Foundation containers for the following supported persistence providers:
Additional persistence providers will be added to the Docker build delivery as the ThingWorx Foundation Platform releases support for those new databases in future releases.
What are some of the security best practices?
For production use, customers are strongly advised to secure their Docker environments by following all the recommendations provided by Docker. Review and implement the best practices detailed at https://docs.docker.com/engine/security/security/.
Can we build Docker images for ThingWorx High Availability (HA) architecture?
Yes. ThingWorx Dockerfiles are provided for both basic ThingWorx deployment architecture and HA ThingWorx deployment architecture.
How easy is the rehosting and upgrading of ThingWorx releases on Docker with existing data?
In Kubernetes environment, data is kept in a separate volume and can be attached to different containers. When one container dies, the data can be attached to a different container and the container should start without issue. For more information, please refer to the upgrade section of the Building ThingWorx 8.3 Docker Images Guide.
Is it okay to use the Docker exec and access the bash shell to make config changes or should I always rebuild the image and re-deploy?
Although using Docker exec to gain access to the container internals is useful for testing and troubleshooting issues, any changes made will not be saved after a container is stopped. To configure a container's environment, variables are passed in during the start process. This can be done with Docker start commands, using compose files with environment variables defined, or with helm charts.
What if there are issues? Should I call PTC Technical Support?
We are providing the scripts and reference documents solely to empower our community to build ThingWorx Docker images. We believe that customers using Docker in their production processes would have expertise to manage running Docker containers themselves. If there are any issues or questions regarding the build scripts provided in the PTC official downloads portal, then customers can contact PTC Technical Support at 1-800-477-6435 or visit us online at: http://support.ptc.com. PTC does not provide support for orchestration troubleshooting.
What can you share about future roadmap plans?
As we are enabling our customers and partners to build ThingWorx Foundation Platform Docker images, we plan to do the same for upcoming products such as ThingWorx Integration & Orchestration, ThingWorx Analytics, upcoming persistence providers such as InfluxDB, and many more.
We also plan to provide additional reference architecture examples and use cases to help developers understand how to use Docker containers in their DevOps and production environments.
Where can I learn more about Docker containers and container orchestrators?
See these resources below for additional information:
We are looking in High Availability architecture with Docker Container. The documents says that the docker images are provided for HA. Can you point me where to they are?
The docker support provided today is for Active-Passive architecture for ThingWorx 8.X product releases. More information on building ThingWorx 8.3 docker images can be found here. We’re actively working towards ThingWorx 9.0 release where we will provide the High Availability architecture for Active-Active Clustering setup. This feature will also have containerization support from PTC. It is currently under private preview and we’re happy to engage in a conversation to provide necessary support in this direction if you are interested.
Thanks. I have looked at the Docker PDF and HA PDF.
I do not see any thing mention about Dockers in HA guide. What level of Orchestration is needed for Active Passive Architecture.
The Docker PDF only has this tiny piece of information with no specifics.
Last time I saw those HA dockerfiles it was in "examples" folder in 8.3.x dockerfiles ZIP, which should be still available for download from support portal. It's been removed from 8.4 and 8.5, probably for a good reason (why would you run HA in dev, knowing that it's not intended (not supported?) for production?).
Having said that, the HA example is pretty simple, and I guess it might work with the recent ThingWorx versions with minor modifications, although I haven't tried it.
Do you use Azure SQL for running it in prod? According to the official docs, neither Postgres container, nor ThingWorx HA dockerfiles are intended for production use.