[{"data":1,"prerenderedAt":330},["ShallowReactive",2],{"{\"path\":[\"blog\",\"docker-for-long-life-services\"],\"query\":null,\"headers\":{\"Accept\":\"application/json\"}}":3},{"page":4,"templates":204,"_listing_pages":203,"navigation":307,"breadcrumbs":324},{"@id":5,"@type":6,"UID":7,"allow_discussion":8,"blocks":9,"blocks_layout":150,"changeNote":173,"contributors":174,"created":175,"creators":176,"description":178,"effective":179,"exclude_from_nav":8,"expires":180,"id":181,"is_folderish":182,"items":183,"items_total":184,"language":185,"layout":188,"lock":189,"modified":175,"nav_title":180,"next_item":190,"parent":191,"preview_caption_link":180,"preview_image_link":180,"previous_item":198,"relatedItems":199,"review_state":195,"rights":173,"subjects":200,"table_of_contents":180,"title":201,"type_title":197,"version":202,"versioning_enabled":182,"working_copy":180,"working_copy_of":180,"_listing_pages":203},"https://pretagovsite-api.fly.dev/blog/docker-for-long-life-services","Document","e4ced934d5d14b6b9a01e24e6943e000",false,{"01cb2889-8767-4002-83d2-d6c67b395d18":10,"03d83719-ae48-4b4b-8a87-777ac493761d":18,"12513c3c-845e-454f-8d94-773593852550":25,"13008517-b87a-4e0f-88f5-5c7c4051d37d":31,"19b510df-cd77-4669-af0a-ea1a27bf38c7":37,"2dd9617d-ac1e-4981-9476-77ef359ae42d":58,"59f04284-31da-4b65-b7f4-95ca977772c6":64,"6619d67b-ea4a-45d7-aeac-580b096858e2":70,"6be8ab50-eb60-485e-8c47-0662ef6be628":76,"6ec0e400-1432-4432-bf82-dd6178f22bad":82,"758680f9-6e9a-4a62-ab39-d2e44061474d":88,"7b0f3c95-86b2-4b5d-b752-c04646dc4a0e":94,"82f85655-d1e1-4f5c-8e89-4048e01b924e":100,"8525d3dc-1f39-48e1-afb0-de30ebae332e":106,"8ad91531-04b7-44e0-834f-55dbae0bb6e8":112,"8cc412ff-3a5c-403b-ad10-53c9d03fd224":118,"ad5cf46b-6b1d-4b12-8af1-9db31822c81b":124,"b7c21d9e-44fb-4e70-857f-2114658c2004":130,"cfeff3b1-036e-4d75-b5fd-3f653667ee6a":132,"e0978622-538a-42d7-b722-83e05ea33cbc":138,"ef50acc2-2663-4680-8c29-f946f7bcce2b":144},{"@type":11,"plaintext":12,"value":13},"slate","Build stages have your compilers and dev tools. The final image has only what runs in production. This isn't just about image size; it's about attack surface. Every binary in the production image is a binary you've signed up to keep patched.",[14],{"children":15,"type":17},[16],{"text":12},"p",{"@type":11,"plaintext":19,"value":20},"Don't run as root",[21],{"children":22,"type":24},[23],{"text":19},"h2",{"@type":11,"plaintext":26,"value":27},"Every image we publish runs through a vulnerability scanner (Trivy, Snyk, Grype) on build. Findings are tracked and prioritised. We don't fail builds on every CVE — most are noise — but we do not deploy untriaged.",[28],{"children":29,"type":17},[30],{"text":26},{"@type":11,"plaintext":32,"value":33},"Container's userspace runs as root by default. Five minutes of Dockerfile work fixes that. Worth doing every time.",[34],{"children":35,"type":17},[36],{"text":32},{"@type":38,"blocks":39,"blocks_layout":48,"slotId":51,"styles":52,"templateId":56,"templateInstanceId":57},"section",{"cta-btn":40},{"@type":41,"buttonColor":42,"buttonSize":43,"href":44,"title":47},"button","white","btn-lg",[45],{"@id":46},"https://pretagovsite-api.fly.dev/contact-info","Contact us for a free review of your project",{"items":49},[50],"cta-btn","cta",{"backgroundColor":53,"padding":54,"textAlign":55},"gradient-8","large","center","/templates/contact-cta","tpl-38ca632547",{"@type":11,"plaintext":59,"value":60},"Embedded targets where the kernel is the kernel and the rootfs is the rootfs. Different world.",[61],{"children":62,"type":17},[63],{"text":59},{"@type":11,"plaintext":65,"value":66},"Multi-stage builds keep the surface small",[67],{"children":68,"type":24},[69],{"text":65},{"@type":11,"plaintext":71,"value":72},"Docker isn't the right answer because it's exciting. It's the right answer because in 2026 it's the substrate, and the substrate works. Our oldest Docker-based production deployments are now 8 years in service. That's the bar; everything we run on it is judged against it.",[73],{"children":74,"type":17},[75],{"text":71},{"@type":11,"plaintext":77,"value":78},"Pinned everything",[79],{"children":80,"type":24},[81],{"text":77},{"@type":11,"plaintext":83,"value":84},"This sounds obvious. Inspect any production Dockerfile in the wild and most of them violate this principle. \"FROM python:3\" today, breaks in 2030 when 3 means 3.15 and your code was written for 3.11.",[85],{"children":86,"type":17},[87],{"text":83},{"@type":11,"plaintext":89,"value":90},"That kind of dependability is undervalued by anyone shipping a startup web app and overwhelmingly valued by anyone running a regulator. Here's how we use Docker for systems that have to last.",[91],{"children":92,"type":17},[93],{"text":89},{"@type":11,"plaintext":95,"value":96},"Where we don't use Docker",[97],{"children":98,"type":24},[99],{"text":95},{"@type":11,"plaintext":101,"value":102},"Single-process workloads where the container adds nothing — small Python scripts, scheduled jobs that complete in seconds, one-shot data migrations. Containers add a deployment pipeline; sometimes that's overhead the work doesn't need.",[103],{"children":104,"type":17},[105],{"text":101},{"@type":11,"plaintext":107,"value":108},"Image scanning in CI",[109],{"children":110,"type":24},[111],{"text":107},{"@type":11,"plaintext":113,"value":114},"The container is ephemeral. Databases, file uploads, secrets, logs all live outside it. Replacing a container means pulling the new image; no data migration. Restoring after an outage means starting the same image elsewhere; no rebuild.",[115],{"children":116,"type":17},[117],{"text":113},{"@type":11,"plaintext":119,"value":120},"Externalise everything stateful",[121],{"children":122,"type":24},[123],{"text":119},{"@type":11,"plaintext":125,"value":126},"Docker is no longer interesting technology. That's the point. It's stable enough, supported enough, and understood enough that you can put a 10-year-old container in a 2026 production environment and have a reasonable expectation it will run.",[127],{"children":128,"type":17},[129],{"text":125},{"@type":131},"title",{"@type":11,"plaintext":133,"value":134},"The boring conclusion",[135],{"children":136,"type":24},[137],{"text":133},{"@type":11,"plaintext":139,"value":140},"Every base image is pinned to an explicit version, not :latest. Every dependency is pinned to a specific version, with hashes where possible. Every build is reproducible: given the same Dockerfile and lockfile in 2030, you get a functionally identical image to 2026.",[141],{"children":142,"type":17},[143],{"text":139},{"@type":11,"plaintext":145,"value":146},"The discipline this enforces — separating what changes (config, data, secrets) from what doesn't (code, dependencies) — is half of operational reliability.",[147],{"children":148,"type":17},[149],{"text":145},{"items":151},[152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172],"b7c21d9e-44fb-4e70-857f-2114658c2004","ad5cf46b-6b1d-4b12-8af1-9db31822c81b","758680f9-6e9a-4a62-ab39-d2e44061474d","6be8ab50-eb60-485e-8c47-0662ef6be628","e0978622-538a-42d7-b722-83e05ea33cbc","6ec0e400-1432-4432-bf82-dd6178f22bad","59f04284-31da-4b65-b7f4-95ca977772c6","01cb2889-8767-4002-83d2-d6c67b395d18","03d83719-ae48-4b4b-8a87-777ac493761d","13008517-b87a-4e0f-88f5-5c7c4051d37d","8cc412ff-3a5c-403b-ad10-53c9d03fd224","8ad91531-04b7-44e0-834f-55dbae0bb6e8","ef50acc2-2663-4680-8c29-f946f7bcce2b","8525d3dc-1f39-48e1-afb0-de30ebae332e","12513c3c-845e-454f-8d94-773593852550","7b0f3c95-86b2-4b5d-b752-c04646dc4a0e","82f85655-d1e1-4f5c-8e89-4048e01b924e","2dd9617d-ac1e-4981-9476-77ef359ae42d","cfeff3b1-036e-4d75-b5fd-3f653667ee6a","6619d67b-ea4a-45d7-aeac-580b096858e2","19b510df-cd77-4669-af0a-ea1a27bf38c7","",[],"2026-06-02T09:39:58",[177],"admin","Containers are 12 years old and still the right answer for software that has to keep running for a decade.","2026-04-23T10:00:00+00:00",null,"docker-for-long-life-services",true,[],0,{"title":186,"token":187},"English","en","document_view",{"locked":8,"stealable":182},{},{"@id":192,"@type":6,"description":173,"effective":193,"end":180,"getObjSize":180,"head_title":180,"image_field":180,"image_scales":194,"mime_type":180,"nav_title":180,"review_state":195,"start":180,"title":196,"type_title":197},"https://pretagovsite-api.fly.dev/blog","2023-08-04T22:10:00+00:00",{},"published","Insights","Page",{},[],[],"Docker for long-life services","current",{},{"/templates/contact-cta-info":205,"/templates/contact-cta":261},{"@components":206,"@id":223,"@type":6,"UID":224,"allow_discussion":8,"blocks":225,"blocks_layout":237,"changeNote":173,"contributors":240,"created":241,"creators":242,"description":243,"effective":180,"exclude_from_nav":182,"expires":180,"id":244,"is_folderish":182,"items":245,"items_total":184,"language":246,"layout":188,"lock":247,"modified":248,"nav_title":180,"next_item":249,"parent":250,"preview_caption_link":180,"preview_image_link":180,"previous_item":257,"relatedItems":258,"review_state":195,"rights":173,"subjects":259,"table_of_contents":180,"title":260,"type_title":197,"version":202,"versioning_enabled":182,"working_copy":180,"working_copy_of":180},{"actions":207,"aliases":209,"breadcrumbs":211,"contextnavigation":213,"navigation":215,"navroot":217,"types":219,"workflow":221},{"@id":208},"https://pretagovsite-api.fly.dev/templates/contact-cta-info/@actions",{"@id":210},"https://pretagovsite-api.fly.dev/templates/contact-cta-info/@aliases",{"@id":212},"https://pretagovsite-api.fly.dev/templates/contact-cta-info/@breadcrumbs",{"@id":214},"https://pretagovsite-api.fly.dev/templates/contact-cta-info/@contextnavigation",{"@id":216},"https://pretagovsite-api.fly.dev/templates/contact-cta-info/@navigation",{"@id":218},"https://pretagovsite-api.fly.dev/templates/contact-cta-info/@navroot",{"@id":220},"https://pretagovsite-api.fly.dev/templates/contact-cta-info/@types",{"@id":222},"https://pretagovsite-api.fly.dev/templates/contact-cta-info/@workflow","https://pretagovsite-api.fly.dev/templates/contact-cta-info","contactctainfo000000000000000000",{"cta-section":226},{"@type":38,"blocks":227,"blocks_layout":232,"fixed":182,"readOnly":182,"slotId":51,"styles":234,"templateId":235,"templateInstanceId":236},{"cta-btn":228},{"@type":41,"buttonColor":42,"buttonSize":43,"href":229,"title":231},[230],{"@id":46},"Contact us for more information",{"items":233},[50],{"backgroundColor":53,"padding":54,"textAlign":55},"/templates/contact-cta-info","tpl-contact-cta-info-def",{"items":238},[239],"cta-section",[],"2026-06-19T18:39:44+00:00",[177],"Reusable contact call-to-action. Edit here to update every page that uses it.","contact-cta-info",[],{"title":186,"token":187},{"locked":8,"stealable":182},"2026-06-22T05:55:00+00:00",{},{"@id":251,"@type":252,"description":253,"effective":254,"end":180,"getObjSize":180,"head_title":180,"image_field":180,"image_scales":255,"mime_type":180,"nav_title":180,"review_state":195,"start":180,"title":256,"type_title":252},"https://pretagovsite-api.fly.dev/templates","Folder","Reusable content templates (edited centrally, applied across pages).","1969-12-31T00:00:00+00:00",{},"Templates",{},[],[],"Contact CTA — More information",{"@components":262,"@id":279,"@type":6,"UID":280,"allow_discussion":8,"blocks":281,"blocks_layout":291,"changeNote":173,"contributors":293,"created":294,"creators":295,"description":243,"effective":180,"exclude_from_nav":182,"expires":180,"id":296,"is_folderish":182,"items":297,"items_total":184,"language":298,"layout":188,"lock":299,"modified":248,"nav_title":180,"next_item":300,"parent":301,"preview_caption_link":180,"preview_image_link":180,"previous_item":303,"relatedItems":304,"review_state":195,"rights":173,"subjects":305,"table_of_contents":180,"title":306,"type_title":197,"version":202,"versioning_enabled":182,"working_copy":180,"working_copy_of":180},{"actions":263,"aliases":265,"breadcrumbs":267,"contextnavigation":269,"navigation":271,"navroot":273,"types":275,"workflow":277},{"@id":264},"https://pretagovsite-api.fly.dev/templates/contact-cta/@actions",{"@id":266},"https://pretagovsite-api.fly.dev/templates/contact-cta/@aliases",{"@id":268},"https://pretagovsite-api.fly.dev/templates/contact-cta/@breadcrumbs",{"@id":270},"https://pretagovsite-api.fly.dev/templates/contact-cta/@contextnavigation",{"@id":272},"https://pretagovsite-api.fly.dev/templates/contact-cta/@navigation",{"@id":274},"https://pretagovsite-api.fly.dev/templates/contact-cta/@navroot",{"@id":276},"https://pretagovsite-api.fly.dev/templates/contact-cta/@types",{"@id":278},"https://pretagovsite-api.fly.dev/templates/contact-cta/@workflow","https://pretagovsite-api.fly.dev/templates/contact-cta","contactcta0000000000000000000000",{"cta-section":282},{"@type":38,"blocks":283,"blocks_layout":287,"fixed":182,"readOnly":182,"slotId":51,"styles":289,"templateId":56,"templateInstanceId":290},{"cta-btn":284},{"@type":41,"buttonColor":42,"buttonSize":43,"href":285,"title":47},[286],{"@id":46},{"items":288},[50],{"backgroundColor":53,"padding":54,"textAlign":55},"tpl-contact-cta-def",{"items":292},[239],[],"2026-06-19T18:39:45+00:00",[177],"contact-cta",[],{"title":186,"token":187},{"locked":8,"stealable":182},{},{"@id":251,"@type":252,"description":253,"effective":254,"end":180,"getObjSize":180,"head_title":180,"image_field":180,"image_scales":302,"mime_type":180,"nav_title":180,"review_state":195,"start":180,"title":256,"type_title":252},{},{},[],[],"Contact CTA — Free review",[308,313,316,320],{"label":309,"route":310,"items":311,"cols":312,"width":312},"About","/about",[],2,{"label":196,"route":314,"items":315,"cols":312,"width":312},"/blog",[],{"label":317,"route":318,"items":319,"cols":312,"width":312},"Work","/case-studies",[],{"label":321,"route":322,"items":323,"cols":312,"width":312},"Services","/services",[],{"@id":325,"items":326,"root":329},"https://pretagovsite-api.fly.dev/blog/docker-for-long-life-services/@breadcrumbs",[327,328],{"@id":192,"title":196},{"@id":5,"title":201},"https://pretagovsite-api.fly.dev",1782108104526]