{"id":1537,"date":"2016-05-10T10:00:00","date_gmt":"2016-05-10T14:00:00","guid":{"rendered":"http:\/\/www.mymiller.name\/wordpress\/?p=1537"},"modified":"2019-05-11T15:29:43","modified_gmt":"2019-05-11T19:29:43","slug":"docker-basics","status":"publish","type":"post","link":"https:\/\/www.mymiller.name\/wordpress\/docker\/docker-basics\/","title":{"rendered":"Docker Basics 101"},"content":{"rendered":"<h2 dir=\"ltr\">Building Docker Image<\/h2>\n<p dir=\"ltr\">Once you create your Dockerfile for your image, you need to build it. \u00a0You do that by running the following command from the directory that contains the Dockerfile.<\/p>\n<pre dir=\"ltr\"> docker build -t &lt;image_name&gt; .<\/pre>\n<p dir=\"ltr\">Change &#8220;image_name&#8221; to be the name you want to give this image. \u00a0If you need to update your Dockerfile, you can simply rerun this command again to update your image.<\/p>\n<h2 dir=\"ltr\">Creating a Docker Container<\/h2>\n<p dir=\"ltr\">With your image created your ready to start it. \u00a0Use this command to create the container:<\/p>\n<pre dir=\"ltr\">docker run -t -i &lt;image_name&gt;<\/pre>\n<p dir=\"ltr\">You can use this command multiple times, to create multiple instances\u00a0of different or the same images.<\/p>\n<h2 dir=\"ltr\">Mounting a Host Directory in a Container<\/h2>\n<p dir=\"ltr\">Docker Containers do not lend themselves to NFS as easily as one would like. However you can mount directories from the host system into your container. \u00a0When starting your image add the follow:<\/p>\n<pre dir=\"ltr\">docker run -t -i -v \/host\/src\/dir:\/container\/dest\/dir &lt;image_name&gt;<\/pre>\n<p dir=\"ltr\">You may add as many &#8220;-v &lt;host dir&gt;:&lt;container dir&gt;&#8221; as needed. \u00a0This will map &#8220;\/host\/src\/dir&#8221; to the directory &#8220;\/container\/dest\/dir&#8221; inside the container.<\/p>\n<h2 dir=\"ltr\">Naming a Docker Image<\/h2>\n<p dir=\"ltr\">You may want an easier way to pick the container you want to Inspect or review. \u00a0You can give your containers a name, instead of having to use their Container ID. \u00a0To do this use the following:<\/p>\n<pre dir=\"ltr\">docker run -t -i -v \/host\/src\/dir:\/container\/dest\/dir --name &lt;Container Name&gt; &lt;image_name&gt;<\/pre>\n<p dir=\"ltr\">You can then use &lt;Container Name&gt; in replacement of the Container ID.<\/p>\n<h2 dir=\"ltr\">Running Docker Image in the Background<\/h2>\n<p dir=\"ltr\">You probably do not want ot have to waste a session running docker int he foreground. \u00a0Instead run the container in the back ground add &#8220;-d&#8221; to the command line.<\/p>\n<pre dir=\"ltr\">docker run -t -i -d -v \/host\/src\/dir:\/container\/dest\/dir --name &lt;Container Name&gt; &lt;image_name&gt;<\/pre>\n<h2 dir=\"ltr\">Viewing the Running Containers<\/h2>\n<p dir=\"ltr\">You have started multiple containers in Docker, and you need to know what is running.<\/p>\n<pre dir=\"ltr\">docker ps<\/pre>\n<p dir=\"ltr\">This will give you a listing of all running images:<\/p>\n<pre dir=\"ltr\">CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES\r\ndd27c3df3d75        docker-image        \"\/usr\/bin\/supervisord\"   39 seconds ago      Up 39 seconds       22\/tcp              slave1\r\n<\/pre>\n<h2 dir=\"ltr\">Viewing an Container\u00a0Details<\/h2>\n<p dir=\"ltr\">Sometimes you want to get specific information about an image. \u00a0This could be many things, the IP address is very common. \u00a0Use the Container ID from the &#8220;docker ps&#8221; command for the image you need additional information on, in the following command:<\/p>\n<pre dir=\"ltr\">docker inspect &lt;Container ID&gt;<\/pre>\n<p dir=\"ltr\">This will produce the following information:<\/p>\n<pre dir=\"ltr\">[\r\n    {\r\n        \"Id\": \"dd27c3df3d758d52fbbf5779e11bff670d8b25bd15975371f8314447d2f82301\",\r\n        \"Created\": \"2016-04-26T20:29:03.197112472Z\",\r\n        \"Path\": \"\/usr\/bin\/supervisord\",\r\n        \"Args\": [],\r\n        \"State\": {\r\n            \"Status\": \"running\",\r\n            \"Running\": true,\r\n            \"Paused\": false,\r\n            \"Restarting\": false,\r\n            \"OOMKilled\": false,\r\n            \"Dead\": false,\r\n            \"Pid\": 3404,\r\n            \"ExitCode\": 0,\r\n            \"Error\": \"\",\r\n            \"StartedAt\": \"2016-04-26T20:29:03.766274435Z\",\r\n            \"FinishedAt\": \"0001-01-01T00:00:00Z\"\r\n        },\r\n        \"Image\": \"sha256:6a3c4a49d51c50589b9d8e1ce3e07c23cb9dbe05bcf7fbb96b8f2a87593f2332\",\r\n        \"ResolvConfPath\": \"\/var\/lib\/docker\/containers\/dd27c3df3d758d52fbbf5779e11bff670d8b25bd15975371f8314447d2f82301\/resolv.conf\",\r\n        \"HostnamePath\": \"\/var\/lib\/docker\/containers\/dd27c3df3d758d52fbbf5779e11bff670d8b25bd15975371f8314447d2f82301\/hostname\",\r\n        \"HostsPath\": \"\/var\/lib\/docker\/containers\/dd27c3df3d758d52fbbf5779e11bff670d8b25bd15975371f8314447d2f82301\/hosts\",\r\n        \"LogPath\": \"\/var\/lib\/docker\/containers\/dd27c3df3d758d52fbbf5779e11bff670d8b25bd15975371f8314447d2f82301\/dd27c3df3d758d52fbbf5779e11bff670d8b25bd15975371f8314447d2f82301-json.log\",\r\n        \"Name\": \"\/slave1\",\r\n        \"RestartCount\": 0,\r\n        \"Driver\": \"devicemapper\",\r\n        \"MountLabel\": \"\",\r\n        \"ProcessLabel\": \"\",\r\n        \"AppArmorProfile\": \"\",\r\n        \"ExecIDs\": null,\r\n        \"HostConfig\": {\r\n            \"Binds\": [\r\n                \"\/mnt\/nas:\/mnt\/nas\"\r\n            ],\r\n            \"ContainerIDFile\": \"\",\r\n            \"LogConfig\": {\r\n                \"Type\": \"json-file\",\r\n                \"Config\": {}\r\n            },\r\n            \"NetworkMode\": \"default\",\r\n            \"PortBindings\": {},\r\n            \"RestartPolicy\": {\r\n                \"Name\": \"no\",\r\n                \"MaximumRetryCount\": 0\r\n            },\r\n            \"AutoRemove\": false,\r\n            \"VolumeDriver\": \"\",\r\n            \"VolumesFrom\": null,\r\n            \"CapAdd\": null,\r\n            \"CapDrop\": null,\r\n            \"Dns\": [],\r\n            \"DnsOptions\": [],\r\n            \"DnsSearch\": [],\r\n            \"ExtraHosts\": null,\r\n            \"GroupAdd\": null,\r\n            \"IpcMode\": \"\",\r\n            \"Cgroup\": \"\",\r\n            \"Links\": null,\r\n            \"OomScoreAdj\": 0,\r\n            \"PidMode\": \"\",\r\n            \"Privileged\": false,\r\n            \"PublishAllPorts\": false,\r\n            \"ReadonlyRootfs\": false,\r\n            \"SecurityOpt\": null,\r\n            \"StorageOpt\": null,\r\n            \"UTSMode\": \"\",\r\n            \"UsernsMode\": \"\",\r\n            \"ShmSize\": 67108864,\r\n            \"ConsoleSize\": [\r\n                0,\r\n                0\r\n            ],\r\n            \"Isolation\": \"\",\r\n            \"CpuShares\": 0,\r\n            \"Memory\": 0,\r\n            \"CgroupParent\": \"\",\r\n            \"BlkioWeight\": 0,\r\n            \"BlkioWeightDevice\": null,\r\n            \"BlkioDeviceReadBps\": null,\r\n            \"BlkioDeviceWriteBps\": null,\r\n            \"BlkioDeviceReadIOps\": null,\r\n            \"BlkioDeviceWriteIOps\": null,\r\n            \"CpuPeriod\": 0,\r\n            \"CpuQuota\": 0,\r\n            \"CpusetCpus\": \"\",\r\n            \"CpusetMems\": \"\",\r\n            \"Devices\": [],\r\n            \"DiskQuota\": 0,\r\n            \"KernelMemory\": 0,\r\n            \"MemoryReservation\": 0,\r\n            \"MemorySwap\": 0,\r\n            \"MemorySwappiness\": -1,\r\n            \"OomKillDisable\": false,\r\n            \"PidsLimit\": 0,\r\n            \"Ulimits\": null,\r\n            \"CpuCount\": 0,\r\n            \"CpuPercent\": 0,\r\n            \"BlkioIOps\": 0,\r\n            \"BlkioBps\": 0,\r\n            \"SandboxSize\": 0\r\n        },\r\n        \"GraphDriver\": {\r\n            \"Name\": \"devicemapper\",\r\n            \"Data\": {\r\n                \"DeviceId\": \"173\",\r\n                \"DeviceName\": \"docker-253:0-203845648-9730e96e91695d973493214b8fe0d3eb14b0d30d91b9971aa1bed83f457726ba\",\r\n                \"DeviceSize\": \"10737418240\"\r\n            }\r\n        },\r\n        \"Mounts\": [\r\n            {\r\n                \"Source\": \"\/mnt\/nas\",\r\n                \"Destination\": \"\/mnt\/nas\",\r\n                \"Mode\": \"\",\r\n                \"RW\": true,\r\n                \"Propagation\": \"rprivate\"\r\n            }\r\n        ],\r\n        \"Config\": {\r\n            \"Hostname\": \"dd27c3df3d75\",\r\n            \"Domainname\": \"\",\r\n            \"User\": \"\",\r\n            \"AttachStdin\": true,\r\n            \"AttachStdout\": true,\r\n            \"AttachStderr\": true,\r\n            \"ExposedPorts\": {\r\n                \"22\/tcp\": {}\r\n            },\r\n            \"Tty\": true,\r\n            \"OpenStdin\": true,\r\n            \"StdinOnce\": true,\r\n            \"Env\": [\r\n                \"PATH=\/usr\/local\/sbin:\/usr\/local\/bin:\/usr\/sbin:\/usr\/bin:\/sbin:\/bin\"\r\n            ],\r\n            \"Cmd\": [\r\n                \"\/usr\/bin\/supervisord\"\r\n            ],\r\n            \"Image\": \"docker-image\",\r\n            \"Volumes\": null,\r\n            \"WorkingDir\": \"\",\r\n            \"Entrypoint\": null,\r\n            \"OnBuild\": null,\r\n            \"Labels\": {}\r\n        },\r\n        \"NetworkSettings\": {\r\n            \"Bridge\": \"\",\r\n            \"SandboxID\": \"9e347e035c2a0f7e7516404f4acc90a6d59ae40e6829efc4a4b075f88228361a\",\r\n            \"HairpinMode\": false,\r\n            \"LinkLocalIPv6Address\": \"\",\r\n            \"LinkLocalIPv6PrefixLen\": 0,\r\n            \"Ports\": {\r\n                \"22\/tcp\": null\r\n            },\r\n            \"SandboxKey\": \"\/var\/run\/docker\/netns\/9e347e035c2a\",\r\n            \"SecondaryIPAddresses\": null,\r\n            \"SecondaryIPv6Addresses\": null,\r\n            \"EndpointID\": \"a1b438922cb1078dba7f124c1cdd18461704e0898c8d6f836c850d36efc06455\",\r\n            \"Gateway\": \"172.17.0.1\",\r\n            \"GlobalIPv6Address\": \"\",\r\n            \"GlobalIPv6PrefixLen\": 0,\r\n            \"IPAddress\": \"172.17.0.2\",\r\n            \"IPPrefixLen\": 16,\r\n            \"IPv6Gateway\": \"\",\r\n            \"MacAddress\": \"02:42:ac:11:00:02\",\r\n            \"Networks\": {\r\n                \"bridge\": {\r\n                    \"IPAMConfig\": null,\r\n                    \"Links\": null,\r\n                    \"Aliases\": null,\r\n                    \"NetworkID\": \"92e12e2e71d2ca523e274186af0842b44dc55053baa6d34f6e356e29a5b3075a\",\r\n                    \"EndpointID\": \"a1b438922cb1078dba7f124c1cdd18461704e0898c8d6f836c850d36efc06455\",\r\n                    \"Gateway\": \"172.17.0.1\",\r\n                    \"IPAddress\": \"172.17.0.2\",\r\n                    \"IPPrefixLen\": 16,\r\n                    \"IPv6Gateway\": \"\",\r\n                    \"GlobalIPv6Address\": \"\",\r\n                    \"GlobalIPv6PrefixLen\": 0,\r\n                    \"MacAddress\": \"02:42:ac:11:00:02\"\r\n                }\r\n            }\r\n        }\r\n    }\r\n]\r\n<\/pre>\n<h2 dir=\"ltr\">Stopping a Docker Container<\/h2>\n<p dir=\"ltr\">At some point your probably going to need to stop your Docker Container. \u00a0You can do this with the following command:<\/p>\n<pre dir=\"ltr\">docker stop &lt;Container ID&gt;<\/pre>\n<h2 dir=\"ltr\">Starting a Docker Container<\/h2>\n<p dir=\"ltr\">So you stopped a container, and now you need to restart it. \u00a0Use this simple command:<\/p>\n<pre dir=\"ltr\">docker start &lt;Conatiner ID&gt;<\/pre>\n<h2 dir=\"ltr\">Removing a Docker Container<\/h2>\n<p dir=\"ltr\">Again your going to want to remove containers you have created at some point. \u00a0To do this use the following command:<\/p>\n<pre dir=\"ltr\">docker rm &lt;Container ID&gt;doc<\/pre>\n<h2 dir=\"ltr\">Additional information Check here:<\/h2>\n<p dir=\"ltr\"><a href=\"https:\/\/docs.docker.com\/engine\/reference\/commandline\/cli\/\">https:\/\/docs.docker.com\/engine\/reference\/commandline\/cli\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Building Docker Image Once you create your Dockerfile for your image, you need to build it. \u00a0You do that by running the following command from the directory that contains the Dockerfile. docker build -t &lt;image_name&gt; . Change &#8220;image_name&#8221; to be the name you want to give this image. \u00a0If you need to update your Dockerfile, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[277],"tags":[],"series":[],"class_list":["post-1537","post","type-post","status-publish","format-standard","hentry","category-docker"],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":1542,"url":"https:\/\/www.mymiller.name\/wordpress\/docker\/docker-networking-101\/","url_meta":{"origin":1537,"position":0},"title":"Docker Networking 101","author":"Jeffery Miller","date":"May 12, 2016","format":false,"excerpt":"Docker by default has three networks with it, that containers may use on the host. \u00a0I will try my best to explain them, and how to use them. Bridge The Bridge network, is the 172.17.0.x network that containers use by default. \u00a0This allows them to connect to each other and\u2026","rel":"","context":"In &quot;Docker&quot;","block_context":{"text":"Docker","link":"https:\/\/www.mymiller.name\/wordpress\/category\/docker\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2016\/05\/network-connection-414415_640.jpg?fit=640%2C426&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2016\/05\/network-connection-414415_640.jpg?fit=640%2C426&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2016\/05\/network-connection-414415_640.jpg?fit=640%2C426&ssl=1&resize=525%2C300 1.5x"},"classes":[]},{"id":3897,"url":"https:\/\/www.mymiller.name\/wordpress\/spring_ai\/a-beginners-guide-to-setting-up-ollama-with-docker-compose\/","url_meta":{"origin":1537,"position":1},"title":"A Beginner&#8217;s Guide to Setting Up Ollama with Docker Compose","author":"Jeffery Miller","date":"December 24, 2025","format":false,"excerpt":"Have you ever wanted to run a powerful large language model (LLM) like Llama 3 or Gemma right on your own computer, but you need a consistent and portable setup? That's where using Ollama with Docker and Docker Compose comes in. Docker Compose is a fantastic tool that allows you\u2026","rel":"","context":"In &quot;Spring AI&quot;","block_context":{"text":"Spring AI","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spring_ai\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/08\/ai-generated-8012676_1280.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/08\/ai-generated-8012676_1280.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/08\/ai-generated-8012676_1280.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/08\/ai-generated-8012676_1280.avif 2x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/08\/ai-generated-8012676_1280.avif 3x"},"classes":[]},{"id":3903,"url":"https:\/\/www.mymiller.name\/wordpress\/docker\/the-s3-local-dev-trick-using-minio-to-simplify-cloud-native-developmen\/","url_meta":{"origin":1537,"position":2},"title":"The S3 Local Dev Trick: Using MinIO to Simplify Cloud-Native Developmen","author":"Jeffery Miller","date":"August 25, 2025","format":false,"excerpt":"As a software architect building cloud-native solutions, you know that working with cloud services like AWS S3 can be a bit tricky in a local development environment. You don't want to constantly connect to a remote bucket, and setting up complex local testing environments can be a pain. But what\u2026","rel":"","context":"In &quot;Docker&quot;","block_context":{"text":"Docker","link":"https:\/\/www.mymiller.name\/wordpress\/category\/docker\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/08\/ai-generated-9268117_1280.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/08\/ai-generated-9268117_1280.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/08\/ai-generated-9268117_1280.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/08\/ai-generated-9268117_1280.avif 2x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/08\/ai-generated-9268117_1280.avif 3x"},"classes":[]},{"id":3594,"url":"https:\/\/www.mymiller.name\/wordpress\/docker\/fips-jdk-21-image\/","url_meta":{"origin":1537,"position":3},"title":"FIPS JDK 21 Image","author":"Jeffery Miller","date":"July 12, 2024","format":false,"excerpt":"Warning: Use FIPS Instructions at Your Own Risk The provided Dockerfile and instructions are intended to assist in creating a FIPS-compliant environment for your Spring Boot application. However, achieving and maintaining FIPS compliance is a complex process with potential legal and security implications. By following these instructions, you acknowledge and\u2026","rel":"","context":"In &quot;Docker&quot;","block_context":{"text":"Docker","link":"https:\/\/www.mymiller.name\/wordpress\/category\/docker\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/06\/Gemini_Generated_Image_6lwv546lwv546lwv-jpg.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/06\/Gemini_Generated_Image_6lwv546lwv546lwv-jpg.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/06\/Gemini_Generated_Image_6lwv546lwv546lwv-jpg.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/06\/Gemini_Generated_Image_6lwv546lwv546lwv-jpg.avif 2x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2024\/06\/Gemini_Generated_Image_6lwv546lwv546lwv-jpg.avif 3x"},"classes":[]},{"id":3970,"url":"https:\/\/www.mymiller.name\/wordpress\/architecture\/vibe-coding-the-next-generation-how-we-built-aimud-using-an-ai-ensemble\/","url_meta":{"origin":1537,"position":4},"title":"Vibe Coding the Next Generation: How We Built AIMUD Using an AI Ensemble","author":"Jeffery Miller","date":"April 21, 2026","format":false,"excerpt":"In the traditional world of software engineering, building a Multi-User Dungeon (MUD) is a rite of passage. It requires handling complex state, real-time networking, concurrency, and deep game logic. Usually, this takes months of meticulous, line-by-line keyboard grinding. But for AIMUD, we didn't just code; we vibe coded. By leveraging\u2026","rel":"","context":"In &quot;AI&quot;","block_context":{"text":"AI","link":"https:\/\/www.mymiller.name\/wordpress\/category\/ai\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_6veptk6veptk6vep-scaled.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_6veptk6veptk6vep-scaled.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_6veptk6veptk6vep-scaled.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_6veptk6veptk6vep-scaled.avif 2x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2026\/04\/Gemini_Generated_Image_6veptk6veptk6vep-scaled.avif 3x"},"classes":[]},{"id":3878,"url":"https:\/\/www.mymiller.name\/wordpress\/spring_messaging\/building-robust-kafka-applications-with-spring-boot-and-avro-schema-registry\/","url_meta":{"origin":1537,"position":5},"title":"Building Robust Kafka Applications with Spring Boot, and Avro Schema Registry","author":"Jeffery Miller","date":"November 24, 2025","format":false,"excerpt":"As a software architect, designing solutions that are scalable, maintainable, and resilient is paramount. In the world of event-driven architectures, Apache Kafka has become a cornerstone for high-throughput, low-latency data streaming. However, simply sending raw bytes over Kafka topics can lead to data inconsistency and make future evolution a nightmare.\u2026","rel":"","context":"In &quot;Spring Messaging&quot;","block_context":{"text":"Spring Messaging","link":"https:\/\/www.mymiller.name\/wordpress\/category\/spring_messaging\/"},"img":{"alt_text":"","src":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/06\/ai-generated-7947638_1280.avif","width":350,"height":200,"srcset":"https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/06\/ai-generated-7947638_1280.avif 1x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/06\/ai-generated-7947638_1280.avif 1.5x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/06\/ai-generated-7947638_1280.avif 2x, https:\/\/www.mymiller.name\/wordpress\/wp-content\/uploads\/2025\/06\/ai-generated-7947638_1280.avif 3x"},"classes":[]}],"jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"_links":{"self":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/1537","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/comments?post=1537"}],"version-history":[{"count":2,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/1537\/revisions"}],"predecessor-version":[{"id":1544,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/posts\/1537\/revisions\/1544"}],"wp:attachment":[{"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/media?parent=1537"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/categories?post=1537"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/tags?post=1537"},{"taxonomy":"series","embeddable":true,"href":"https:\/\/www.mymiller.name\/wordpress\/wp-json\/wp\/v2\/series?post=1537"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}