<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[❓ Base images flavors and considerations when packaging apps for the app store]]></title><description><![CDATA[<p dir="auto">Hi,<br />
I've recently succeed packaging my own minimalistic app using <code>alpine</code> as base image.<br />
I didn't had much references to compare to as most of the other packaged apps are using cloudron base image (<code>ubuntu</code> based), however despite the app works well on my own Cloudron instance, I didn't yet made it to the Cloudron "public" app store, so I've only scratched the surface. So I've a few questions <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=090c346130c" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":-)" alt="🙂" /></p>
<h3>Questions:</h3>
<ol>
<li>
<p dir="auto">if targeting Cloudron App store in the future, must app be packaged from the ubuntu base image? As I aim for minimalism in term of dependencies, I'm happy using alpine but the cheatsheet does not make it very clear if alpine is an option or not for App Store.</p>
</li>
<li>
<p dir="auto">if packaging apps starting from Cloudron base image, what is the most up-to-date base image to start from and where to quickly find this information? it seems most Dockerfile in Cloudron git repos (<a href="https://git.cloudron.io/packages" target="_blank" rel="noopener noreferrer nofollow ugc">https://git.cloudron.io/packages</a>) start from a different reference to Cloudron base image, sometimes 5.0 followed by a digest, sometimes 4.2 followed by a digest, this creates confusion as those digests/refs do not make sense to me.<br />
<strong>Examples</strong><br />
<code>FROM cloudron/base:4.2.0@sha256:46da2fffb36353ef714f97ae8e962bd2c212ca091108d768ba473078319a47f4</code>,<br />
<code>FROM cloudron/base:5.0.0@sha256:6bec2b5246567ef8b5b13ca0af756e2e596941e440d76b46635211cd84383922</code></p>
</li>
<li>
<p dir="auto">The packaging of apps seems at times inconsistent, with similar conventions for the Dockerfile, <a href="http://start.sh" target="_blank" rel="noopener noreferrer nofollow ugc">start.sh</a>, but I can often find differences, sometimes WORKDIR /app/code, sometimes cd /app/code, sometimes we run the app from /app/code, sometimes from /app/pkg/... sometimes we load vars from some env.template, sometimes from <a href="http://env.sh" target="_blank" rel="noopener noreferrer nofollow ugc">env.sh</a>, etc etc.<br />
it makes comparing those package recipes very difficult, and yet I'm lost in trying to understand what is the best way. Every difference adds more differences to the Dockerfile of course, and makes every package very special and unique why mostly accomplishing the same goal, which is to be compliant to Cloudron platform.</p>
</li>
<li>
<p dir="auto">I've learned lot more about packaging apps for Cloudron while working on my pythonic app using an alpine flavor, and Cloudron platform does not seem to impose too much constraints in the end, which is good, but as I didn't reach the point of targeting the app store yet, I've likely only scratched the surface? If anyone is willing to share their experience with me, I'm grateful !</p>
</li>
</ol>
<p dir="auto">Enjoy the end of the year celebrations <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f384.png?v=090c346130c" class="not-responsive emoji emoji-android emoji--christmas_tree" style="height:23px;width:auto;vertical-align:middle" title=":christmas_tree:" alt="🎄" /></p>
]]></description><link>https://forum.cloudron.io/topic/12994/base-images-flavors-and-considerations-when-packaging-apps-for-the-app-store</link><generator>RSS for Node</generator><lastBuildDate>Fri, 14 Aug 2026 03:32:27 GMT</lastBuildDate><atom:link href="https://forum.cloudron.io/topic/12994.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 23 Dec 2024 11:31:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ❓ Base images flavors and considerations when packaging apps for the app store on Mon, 23 Dec 2024 23:12:31 GMT]]></title><description><![CDATA[<p dir="auto">I'm not 100% sure about that, I mean the total of ubuntu base images on my instance is around 80GB, each image from the app store takes between 2 and 4GB. Next to those, my alpine image is less than 100MB. Yet I find that 100MB is still way too big, I can likely reduce that.</p>
<p dir="auto">And based on <code>docker images</code> listing and <code>du</code>, each image seems to really take an average 2.9GB.</p>
<pre><code>~# df -h
Filesystem                                              Size  Used Avail Use% Mounted on
tmpfs                                                   1.6G  3.3M  1.6G   1% /run
/dev/sda3                                               588G   77G  482G  14% /
tmpfs                                                   7.9G     0  7.9G   0% /dev/shm
tmpfs                                                   5.0M     0  5.0M   0% /run/lock
/dev/sda2                                               2.0G  170M  1.7G  10% /boot
u426552@u426552.your-storagebox.de:/home/storage/music  1.0T   63G  962G   7% /mnt/volumes/8c4c2f7f0e8a44e090fc857a64b1f316
u426552@u426552.your-storagebox.de:/home                1.0T   63G  962G   7% /mnt/cloudronbackup
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/941561b6b216ede950e95d525f676defe98425be86c02edd6737e95e848d3487/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/a47d7cd82e5ba37dc642d53159323dd0be0e080d0c59f44656ff39e86fd8077f/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/84c4252012d0d027e49529377605b19cdde5385594120b9215ec8f4b601997f1/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/e4fd2d9876ba48aa5b1a3890192af605268b1b06914f074cd51538e5cd8e732e/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/4186641821aa776be6f3453c44e5f6999dfd62ecea985da3b799034ac42c4805/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/e5f5b26adf7f4c491b7e00976b47eafd6e11211d0b9cd87232636495ac0fa69c/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/2128a944d0c3beea65ecf91c51172fd22877df72bda73a0b69019d575472e9b9/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/e8f3a7b55229fe43505b9c71a78887dd80a514e2dfde620d561b7e63295451c3/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/ca7099594dd0c471f3ee269f64c04c57784b6ac97d42a1ccea7e5c23f45adfcf/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/32ba3a826dc24b5096484b1a18f4e0fd4b490f8d0f8ee8dbcbfd0ef024683340/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/06f378a7b62b5c9385871a9cdf43d8cdfe100dc563f398c99a5a4aa0ff923de1/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/65d95b78cba9b8a6dbfa86dc8f87646ede5af06e197ff6b9e1208dfaf7bbc9c5/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/2be16e71c52c9d9028e5ae2ddafa21afe897006148999bc20e1c041cc2afd16c/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/3af0a5bce6cc8b11c29471214209ea182602078d062d05d098a8872eabc40429/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/7a0800829a76a92d356ff710b3882c3f12612d376d3797d7676f044e9ad62214/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/b15f684ada5eb3ef784fcedf484738c56a051c47597ad20da548f46a937fe571/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/3da17d53de6c6daa5898d644eb74c1e2099a1a192ccfb0ed827911a23980bde1/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/a37ad3291da4944e667e16342124417d1ac66370c87ad7e8278979ab42c71c8e/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/792eecae61fcc06c5bf9ed01839c2a6c5b41e097efb3aa1cd529b7ad441a9392/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/68bf9a6faa884822bf107ae36daa4fdec7a090281370cbfbc49bffe4b7a5bd0d/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/c8fb2e965fa85ce289436eb96e56584a06765cade5f2cd7d43f77b930fefb928/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/992c00fe84e55e8aa06eafa32ccac9251ce194af33082a711ea6ef7812818285/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/704413a277d07d199ae7801cd9c812ec9db6f61870582468ad0c34c855924af5/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/13e0b0ac613a3bb2769e75def0d88c476399849faf55b0b54a44c11ffd693040/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/2afe0cb63975cfb247549d41319f40d1b2eab5ece8645fccbb999715da1472d2/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/e159b65ba533df6c3df4d9b6b5c4ebbbb53c337e9cf882e6b104072f535826fa/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/19aa6f3f67da9f897ca14b16f3dd58e776481c8f88a7df6147f6b9d0c3dc5229/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/c1867646b12beaad46d3332f566dd9ef3acccc39f459dd93259679965ab0b2ce/merged
overlay                                                 588G   77G  482G  14% /var/lib/docker/overlay2/1863229ae55deed6b180bcb7086b166041bcf84caf862dc7162eb1f4cb0cdadb/merged
tmpfs                                                   1.6G     0  1.6G   0% /run/user/0
</code></pre>
<pre><code>root@vmi1545666:~# docker images
REPOSITORY                                TAG                         IMAGE ID       CREATED         SIZE
cloudron/org.navidrome.cloudronapp        202412221800040000          955f3ed8bda9   29 hours ago    2.26GB
&lt;REDACTED_MY_APP_REF&gt;                     1.0.9                       342c00f06dd1   41 hours ago    95.5MB
cloudron/app.miniflux.cloudronapp         202412202203500000          3ab5b7255d6f   3 days ago      2.23GB
cloudron/com.invoiceninja.cloudronapp2    202412201425110000          114bf2ee41e6   3 days ago      4.32GB
cloudron/com.github.bitwardenrs           202412201132130000          b07e9c5ab7d5   3 days ago      3.55GB
cloudron/calibreweb.janeczku.github       202412200520170000          c4c0b840c65a   3 days ago      3.49GB
cloudron/lamp.cloudronapp.php74           202412180703290000          35ef2ed19d95   5 days ago      2.64GB
cloudron/io.changedetection.cloudronapp   202412170520280000          5d612c3fbb5c   6 days ago      3.99GB
cloudron/io.gitea.cloudronapp             202412131720400000          fec9c8c07eca   10 days ago     2.8GB
cloudron/com.github.shaarli               202412081824370000          f174ed03ee2d   2 weeks ago     2.23GB
cloudron/net.syncthing.cloudronapp2       202412031651540000          c7a0a056a716   2 weeks ago     2.24GB
cloudron/org.wordpress.cloudronapp        202411220220380000          f04002c311c5   4 weeks ago     2.37GB
cloudron/info.privatebin.cloudronapp      202411161255100000          c3b260ef0b6d   5 weeks ago     2.21GB
cloudron/org.getgrav.cloudronapp          202410281158520000          d52bf6ab8b2b   8 weeks ago     2.29GB
cloudron/tech.ittools.cloudron            20241022-105954-145356468   387ecffe94e3   2 months ago    2.22GB
registry.docker.com/cloudron/redis        3.5.4                       edcfcc0608c6   2 months ago    2.22GB
registry.docker.com/cloudron/sftp         3.8.9                       c595fcbbe0a3   4 months ago    2.23GB
registry.docker.com/cloudron/postgresql   5.2.3                       c0270fdfd54f   5 months ago    2.75GB
registry.docker.com/cloudron/mysql        3.4.3                       f1c143716f42   5 months ago    2.53GB
registry.docker.com/cloudron/mail         3.13.1                      ac386518998a   6 months ago    2.89GB
cloudron/sh.ntfy.cloudronapp              20240514-072708-5696fd1ad   2a1124f439c9   7 months ago    2.26GB
registry.docker.com/cloudron/mongodb      6.0.0                       4b95d24318a2   10 months ago   2.69GB
cloudron/com.docker.registry              20240208-085138-349b78ba6   68797f159e9f   10 months ago   2.24GB
cloudron/com.rssbridgeapp.cloudronapp     20240203-090049-661e61c5a   6990eceaa76a   10 months ago   2.21GB
cloudron/org.yourls.cloudronapp           20231024-061626-421eac647   e89d47b182e4   14 months ago   2.22GB
registry.docker.com/cloudron/graphite     3.4.3                       dbd026164ada   14 months ago   2.28GB
registry.docker.com/cloudron/turn         1.7.2                       152b1fb9690e   15 months ago   2.22GB
registry.docker.com/cloudron/base         4.2.0                       6ec7c1ab3983   15 months ago   2.21GB
</code></pre>
<p dir="auto">I'm used to replacing GBs worth of binaries/code and services and thousands-dollars worth SaaS with simple shell scripts and python scripts, it's all fun for me to see how little things can avoid the bloat and costs we are used to with modern software and architecture. We shouldn't need 4GB worth of code to generate a pdf (invoiceninja), I mean it's literally done with 4K worth of python code.<br />
A base image being 2.2GB in size is a red flag for me (at work but not only).<br />
Anyway, I won't start a crusade, this base image solves problems, but I'm not gonna base my minimalist stuff on something 20 times as big as my big Docker image <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f604.png?v=090c346130c" class="not-responsive emoji emoji-android emoji--smile" style="height:23px;width:auto;vertical-align:middle" title=":-D" alt="😄" /></p>
]]></description><link>https://forum.cloudron.io/post/98807</link><guid isPermaLink="true">https://forum.cloudron.io/post/98807</guid><dc:creator><![CDATA[SansGuidon]]></dc:creator><pubDate>Mon, 23 Dec 2024 23:12:31 GMT</pubDate></item><item><title><![CDATA[Reply to ❓ Base images flavors and considerations when packaging apps for the app store on Mon, 23 Dec 2024 17:04:01 GMT]]></title><description><![CDATA[<p dir="auto">A shared cloudron base image gives you at least all the dependencies needed for accessing the addons like databases, also the shared layer should result in less storage consumption when running many apps on one server.</p>
]]></description><link>https://forum.cloudron.io/post/98798</link><guid isPermaLink="true">https://forum.cloudron.io/post/98798</guid><dc:creator><![CDATA[klawitterb]]></dc:creator><pubDate>Mon, 23 Dec 2024 17:04:01 GMT</pubDate></item><item><title><![CDATA[Reply to ❓ Base images flavors and considerations when packaging apps for the app store on Mon, 23 Dec 2024 16:58:38 GMT]]></title><description><![CDATA[<p dir="auto">It would make sense for consistency if starting from base image is a prerequisite to entering the App store but it's just not very obvious in the documentation and so I'm exploring the alternative. I hope this can be made more clear to me here and also in the docs <img src="https://forum.cloudron.io/assets/plugins/nodebb-plugin-emoji/emoji/android/1f64f.png?v=090c346130c" class="not-responsive emoji emoji-android emoji--pray" style="height:23px;width:auto;vertical-align:middle" title=":pray:" alt="🙏" /> but even so I see that all apps in the app store seem to have those little differences not made very clear in the docs so this thread is also a request for clarification.</p>
]]></description><link>https://forum.cloudron.io/post/98797</link><guid isPermaLink="true">https://forum.cloudron.io/post/98797</guid><dc:creator><![CDATA[SansGuidon]]></dc:creator><pubDate>Mon, 23 Dec 2024 16:58:38 GMT</pubDate></item><item><title><![CDATA[Reply to ❓ Base images flavors and considerations when packaging apps for the app store on Mon, 23 Dec 2024 16:19:36 GMT]]></title><description><![CDATA[<p dir="auto">OK, understood.<br />
I think (not sure) using the Cloudron base image is a pre-requisite for your app package to be adopted into the AppStore.<br />
But maybe that's not important for you in this case.</p>
]]></description><link>https://forum.cloudron.io/post/98795</link><guid isPermaLink="true">https://forum.cloudron.io/post/98795</guid><dc:creator><![CDATA[timconsidine]]></dc:creator><pubDate>Mon, 23 Dec 2024 16:19:36 GMT</pubDate></item><item><title><![CDATA[Reply to ❓ Base images flavors and considerations when packaging apps for the app store on Mon, 23 Dec 2024 14:19:33 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/user/timconsidine" aria-label="Profile: timconsidine">@<bdi>timconsidine</bdi></a> good question, it's a matter of avoiding the bloat and extra sugar in general with what I do. Also as I said using the base image could make sense later but at this point I don't need most of what it brings and I follow the YAGNI / KISS ideas. If I can skip something, I take the shortest path to my goal. Depending on a custom cloudron base image makes my app less portable to non-Cloudron worlds and makes my packaging process more fragile. But if the base image would be documented, then I would be able to decide better. It's just a matter of tradeoffs.<br />
I'm developing a minimalist app (no db, no js, no build process...no bloat) and wanted to avoid the base image to be anything more complex than needed. Alpine was the ideal choice and I'd like to stay with it.</p>
]]></description><link>https://forum.cloudron.io/post/98789</link><guid isPermaLink="true">https://forum.cloudron.io/post/98789</guid><dc:creator><![CDATA[SansGuidon]]></dc:creator><pubDate>Mon, 23 Dec 2024 14:19:33 GMT</pubDate></item><item><title><![CDATA[Reply to ❓ Base images flavors and considerations when packaging apps for the app store on Mon, 23 Dec 2024 13:07:13 GMT]]></title><description><![CDATA[<p dir="auto">Congratulations!<br />
Although I don’t understand why you didn’t just use Cliudron’s base image</p>
]]></description><link>https://forum.cloudron.io/post/98783</link><guid isPermaLink="true">https://forum.cloudron.io/post/98783</guid><dc:creator><![CDATA[timconsidine]]></dc:creator><pubDate>Mon, 23 Dec 2024 13:07:13 GMT</pubDate></item></channel></rss>