mumshad mumshad - 1 month ago 23
Node.js Question

Ship docker image as an OVF

I have developed an application and am using docker to build it. I would like to ship it as a VMware OVF package. What are my options? How do I ship it so customer can deploy it in their VMware environment?

Also I am using a base Ubuntu image and installed NodeJS, MongoDB and other dependencies on it. But I would like to configure my NodeJS based application and MongoDB database as a service within the package I intend to ship. I know how to configure these as a service using init.d on a normal VM. How do I go about this in Docker? Should I have my init.d files in my application folder and copy them over to Docker container during build? Or are there better ways?

Appreciate any advise.

Update:

The reason I ask this question is - My target users need not know docker necessarily. The application should be easy to deploy for someone who do not have docker experience. With all services in a single VM makes it easy to troubleshoot issues. As in, all log files will be saved in the /var/log directory for different services and we can see status of all different services at once. Rather than the user having to look into each docker service. And probably troubleshooting issue with docker itself.

But at the same time I feel it convenient to build the application the docker way.

Answer

VMware vApps usually made of multiple VMs running to provide a service. They may have start up dependencies and etc.

Now Using docker you can have those VMs as containers running on a single docker host VM. So a single VM removes the need for vAPP.

On the other hand containerizing philosophy requires us to use Microservices. short explanation in your case, putting each service in a separate container. Then write up a docker compose file to bring the containers up and put it in start up. After that you can make an OVF of your docker host VM and ship it.

A better way in my opinion is to create docker images, put them in your repository and let the customers pull them. Then provide docker compose file for them.