Turn your Meteor.js app into a lean, production-ready Docker image in 2 minutes!
Assuming you have Docker installed and running:
.dockerignore (copy paste from README)
docker build -t yourapp .
You can also configure it to bundle in ImageMagick and PhantomJS if your app requires them as dependencies.
See docs here: https://github.com/chriswessels/meteor-tupperware
Improvements coming. Contributions welcome!
Thank you very much for this. Meteor developers definitely need an easy way to wrap their application in a docker container (or even a complete pod including mongodb). How does meteor-tupperware compares to meteorhacks/meteord?
Thanks @mquandalle. At first I tried meteord, but decided to roll my own solution. These are the primary differences:
simple_app_meteord latest c3d9faca5be9 12 hours ago 704.9 MB
simple_app_tupperware latest 88d9abbb4812 12 hours ago 179.8 MB
meteor-tupperware produces significantly smaller images (179.8mb vs 704.9mb) than meteord: a) meteord bakes in PhantomJS irrespective of whether you need it or not. b) meteord doesn’t perform any significant image cleanup.
meteord doesn’t easily support building Meteor.js apps that have native apps via Meteor Cordova integration because it doesn’t let you customise the build flags (for --mobile-settings or --server). meteor-tupperware let’s you do this easily.
meteor-tupperware allows you to easily include ImageMagick if it is a dependency of your app.
meteor-tupperware is easier to use (in my opinion). Look at the respective docs for usage instructions.
That being said, meteord does some things that meteor-tupperware doesn’t, like:
- Running an already-built bundle inside a container from:
a) a local mount or;
b) downloadable bundle archive.
These are cool features, but I wanted meteor-tupperware to serve a single purpose well: Turning your Meteor.js app into a production-ready Docker image as easily as possible.
Contributions to meteor-tupperware are welcome!
PS. Bits and pieces of the meteor-tupperware codebase were inspired by meteord, so thanks to arunoda and the meteorhacks team!
That’s a good comparison.
I’ll learn few things from your image and try to make meteord lean as well
I’d love to work together on an amalgamated solution rather than sharding the community across different solutions. We could have a Hangout/Skype session to discuss if you agree?
PS. Your work on Meteor and the ecosystem of tools is incredible. Thanks!
I’ve tried some of your cleanup concepts and changed a bit how we use scripts and figure out a way to reduce a size a lot.
But, I think your dynamic solution for and initialising Dokerfile from the bash script is a good idea. I don’t want to use if for meteord because primary focus of meteord is to run a bundle. (for Mup)
Yeah! I’d like to chat.
I didn’t try it yet but I definitly need to test meteor-tupperware soon, thanks for sharing it, great work!
Okay. I’ve managed to make MeteorD lean as well. We’ll have phantomjs included by default. So, images will be 220MB+
I tested with a some big meteor app telescope and it was ~270MB.
Now, I’ve got couple of images for different tasks as well.
I am never here on this forum, but I am an OpenShift v3 consultant for Red Hat, and my brother is a meteor developer, so naturally I am interested in hosting meteor apps for him in my OpenShift environment.
For anyone who doesn’t know, OpenShift v3 takes docker container images, allows you to point to an artifact repository like github, and in two clicks have your meteor app up and running. In case there is any confusion, you would know OpenShift v3 as OpenShift Origin in the open source community. This is no longer based on gear technology, but is instead fully docker based.
I’ll be trying this container in my OpenShift environment shortly, but if it doesn’t work as-is, if someone would be willing to work with me to build an OpenShift template, I can work to get it included with OpenShift by default, so that MeteorJS is a first class citizen in OpenShift, just like Java, Ruby, NodeJS, etc.
Please let me know if there is any interest in this, and if so, I’d love to demo the functionality of it once it’s built.
Again, I know MeteorJS in OpenShift (for example OpenShift online) has been figured out, but this is for the next generation docker-based platform, and I’d love to see Meteor on board and functional OOB.
I just wanted to write a follow-up comment to say a few things.
One, I didn’t realize that this thread was a year old, haha.
Two, here are a couple of step by step installs for sample applications to give you an idea of how this would work. Please note that I would perform all of these except for the configuration of the initial docker image, and I would just need some basic details, such as what directories need persistent storage, and where meteor expects to find the code to deploy the app.
After the initial template is created, deploying meteor apps would then require clicking on a meteor template, and then pasting your meteor code’s github repository url into a box, and clicking “create”.
Again, sorry for resurrecting this year old thread, but please let me know if there is any interest in this idea, and if so, I’d love to get it set up. I would guess that it will take a day or two if someone who is very familiar with both docker and meteor is available to discuss this.