Skip to main content

19 posts tagged with "podman"

View All Tags

Supercharge Your Container Development in VS Code with Podman and Podman Desktop

· 5 min read
Matt Demyttenaere
Product Manager

Developing containerized applications can sometimes feel complex, but with the right tools, it can be a smooth and efficient process. In this blog post, we'll explore how to leverage the power of Visual Studio Code (VS Code) together with Podman and Podman Desktop to streamline your container development workflow. We'll cover setting up and using two VS Code extensions that integrate with Podman.

VS Code: Your IDE for Container Development

VS Code is a popular and versatile code editor that can be extended to enhance its functionality. For container development, several excellent extensions integrate seamlessly with Podman.

Prerequisites

Before we begin, ensure you have the following installed:

VS Code Extensions

To integrate VS Code with Podman, we have 2 extensions as options:

  1. Microsoft’s Container Tools extension: The "Container Tools" extension provides excellent support for container-related tasks, including building images, managing containers, and working with Containerfiles and Dockerfiles. Microsoft recently announced that they will be evolving the Docker extension into the Container Tools extension to support other tools like Podman!
  2. Pod Manager: This extension was created by one of the members of our community and is completely open source. It is designed to help you manage Podman containers, images, volumes, and networks directly from the VS Code interface.

While it's unlikely that you would use both extensions simultaneously, comparing them will help you understand the strengths and weaknesses of each, ultimately making it easier to select the one that best fits your needs. So for this blog post, we'll install them one by one.

Option 1: Microsoft’s Container Tools extension

To install the extension:

  1. Open VS Code.
  2. Click on the Extensions icon in the Activity Bar (or press Ctrl+Shift+X or Cmd+Shift+X).
  3. Search for "Container Tools" and install the extension by Microsoft.

Configuring VS Code for Podman

The Container Tools extension usually automatically detects Podman if Docker isn't running, by looking at the DOCKER_HOST environment variable. In Podman Desktop navigate to Settings > Docker Compatibility > Third-Party Tool Compatibility and make sure the option is enabled. Learn more about the Docker Compatibility in our documentation.

enabling docker compatibility in the settings

Option 2: Pod Manager

To install the extension:

  1. Open VS Code.
  2. Click on the Extensions icon in the Activity Bar (or press Ctrl+Shift+X or Cmd+Shift+X).
  3. Search for "Pod Manager" and install the extension by dreamcatcher45.

Using the VS Code Extensions

Now that we have the extensions installed and configured, let's see how to use them.

Working with Containerfiles and Dockerfiles

Both extensions provide syntax highlighting, code completion, and linting for Containerfiles and Dockerfiles. Open a Containerfile in VS Code, and you'll immediately benefit from these features.

You can also build images directly from VS Code:

  1. Right-click on the Containerfile in the Explorer view.
  2. Select "Build Image".
  3. VS Code will prompt you for an image name and tag.
  4. The extension will then build the image using Podman.
  5. After that you will see the built image in the sidebar.

If you are using the CLI commands to build images, you will also see them here.

building a Containerfile in vs code using the microsoft extension

Managing Containers

The extensions also allow you to manage containers directly from VS Code. You can start, stop, restart, and remove containers, as well as view their logs and inspect their configuration.

To view the container logs:

  1. Click on the Container icon in the Activity Bar.
  2. You'll see a list of your containers, images, and networks.
  3. Right-click on a container to perform actions.

using Container Tools extension to view the logs of the container

Similarly using the Pod manager extension we can visually inspect containers, images, and volumes.

  1. Click on the Pod manager icon in the Activity Bar.
  2. You'll see a list of your containers, images, and networks.

using podmanager to view all the running containers, images and volumes

and manage the container lifecycle.

using podmanager to manage the lifecycle of the container

and of course troubleshoot issues with a visual interface.

using podmanager to enter the container

Conclusion

In comparison, both extensions provide a nearly identical set of features, so it is really up to you which UI you prefer. Personally I will stick with the Pod Manager because the logo is a seal 🦭. Remember if you encounter any issues using these tools or with Podman Desktop let us know by starting a discussion or creating an issue.

By combining the power of VS Code, Podman, and Podman Desktop, you can create a streamlined and efficient container development workflow. The VS Code extensions provide excellent integration with Podman, allowing you to manage containers, build images, and work with Containerfiles directly from your code editor. We are excited to see that Microsoft is embracing Podman and building support into their ecosystem. Podman Desktop complements this with a visual interface for managing your container environment and will help to move from your development environment to a production Kubernetes environment. Embrace these tools and elevate your container development experience!

Podman Desktop 1.18 Release

· 17 min read
Sonia Sandler
Associate Software Engineer

Podman Desktop 1.18 Release! 🎉

podman-desktop-hero-1.18

Podman Desktop 1.18 is now available! Click here to download it!

This release brings exciting new features and improvements:

  • Refining the Docker Compatibility feature: The Docker Compatibility page has been moved out of experimental mode, and now it helps you fully set up Podman even when installed through brew. It also detects and notifies you when Podman can't bind the Docker socket.
  • Switching Kubernetes namespace: Switching between Kubernetes namespaces within Podman Desktop is now available.
  • Jobs in Kubernetes: You can now see Kubernetes jobs in our growing Kubernetes section of Podman Desktop.
  • Experimental status bar providers enhancements: Status bar providers can be pinned and unpinned based on user preferences and the provider status icons have been updated to be easier to understand.

Release Details

Docker Compatibilty mode page is out of experimental mode 🎉

The experimental Docker Compatibility page that was introduced in v1.13 has been moved out of experimental mode. Now everything related to Docker compatibility can be found in one place. In addition, new Docker compatibility related notifications have been added to make the set up process easier and less guesswork when running into problems.

Docker Compatibilty podman mac helper notificationDocker Compatibilty podman mac helper notification Docker Compatibilty docker socket notificationDocker Compatibilty docker socket notification

Switching Kubernetes namepaces

Until now, only switching Kubernetes contexts was supported in Podman Desktop. With this update, you can now switch between namespaces from within Podman Desktop without having to do anything outside the app. The selection does not modify your Kube config and is persistent across the app, so if you select a specific namespace in one place, it will be used everywhere else in Podman Desktop.

Kubernetes namespacesKubernetes namespaces

Kubernetes Jobs

As part of our ongoing Kubernetes improvement and enhancement efforts, a new tab has been added for Kubernetes Jobs. You can now view the jobs, all in one place, with details page for each one, and have the ability to delete and view condition statuses.

Kubernetes Jobs listKubernetes Jobs list Kubernetes Job detailsKubernetes Job details

Experimental status bar providers enhancements

The experimental status bar providers that were introduced in v1.16 have undergone some changes to make them easier to understand and use.

The new provider status icons include:

  • white dot - running
  • red dot - error
  • up arrow - update available
  • spinning circle - stopping or starting
  • darker icon - stopped

In addition, you can now choose which available providers to show by pinning or unpinning them from the status bar:

Status bar providersStatus bar providers

If you have any feedback or thoughts about our experimental features (or any aspect of Podman Desktop at all), feel free to let us know in the relevant experimental feature github discussion, which can be accessed from the experimental tab in the settings page, or by clicking on the comment icon in the lower right side of Podman Desktop and filling out the feedback form.

Additional changes

Breaking change

As part of the migration to svelte 5, breaking changes were introduced in the DetailsPage and FormPage components of the @podman-desktop/ui-svelte package v1.18.0.

Please use {#snippet <snippet-name>()} instead of slots in those components

Community Thank You

🎉 We’d like to say a big thank you to everyone who helped to make 🦭 Podman Desktop even better. In this release we received pull requests from the following new people:

  • @j-bs made their first contribution in #11456 docs(website): use consistent order in OS tab groups
  • @chkpnt made their first contribution in #10975 fix: handling of proxy bypass values from system under macOS
  • @AlexonOliveiraRH made their first contribution in #11710 docs: adding an instruction to enable ip_tables
  • @Virakal made their first contribution in #11792 fix(docs): docker export syntax
  • @fabienengels made their first contribution in #12106 docs: add EOST as adopters

Final notes

The complete list of issues fixed in this release is available here.

Get the latest release from the Downloads section of the website and boost your development journey with Podman Desktop. Additionally, visit the GitHub repository and see how you can help us make Podman Desktop better.

Detailed release changelog

Chores ✅

  • chore: update release procedure by @benoitf #12192
  • chore: add error indication to statusbar provider by @SoniaSandler #12191
  • chore: exclude one rule for CLOMonitor by @benoitf #12169
  • chore: add badges for CNCF tooling by @benoitf #12158
  • chore: add scorecard by @benoitf #12147
  • chore: website - update footer cncf logo and spacing by @cdrage #12142
  • chore: bump lint memory by @deboer-tim #12140
  • chore: add security insights file by @benoitf #12138
  • chore: website - update font weight and div width by @cdrage #12117
  • chore: website - update download links by @cdrage #12115
  • chore: improve provider widget icons by @SoniaSandler #12112
  • chore(vitest): remove unused files by @axel7083 #12110
  • chore: allow more permissive data in test by @benoitf #12100
  • chore: add missing dispose method in TerminalWindow by @benoitf #12099
  • chore: update estree-util-value-to-estree to v3.3.3 by @benoitf #12085
  • chore: update image-size to 1.2.1 by @benoitf #12084
  • chore(package.json): build should include build:preload:types by @axel7083 #12059
  • chore: Use isUnixLike() instead of isLinux() in some places by @arrowd #12047
  • chore: migrate close button to svelte 5 by @deboer-tim #12043
  • chore: type FetchError removed from library by @feloy #12042
  • chore: enable svelte/require-each-key rule by @SoniaSandler #12041
  • chore: update to podman 5.4.2 by @feloy #12006
  • chore(website): modified community meeting link in the banner and docs by @rujutashinde #11996
  • chore: expose VmProviderConnection and VmProviderConnectionFactory in extension-api by @SoniaSandler #11982
  • chore(dockerode): bump to 3.3.37 by @axel7083 #11979
  • chore: support for changing namespace in experimental mode by @deboer-tim #11964
  • chore: migrate status icon to svelte 5 by @deboer-tim #11961
  • chore: add aria roles and labels into troubleshooting pages by @odockal #11960
  • chore(deps-dev): update eslint-plugin-svelte to v3.5.0 by @benoitf #11959
  • chore: use lcov reporter locally by @feloy #11951
  • chore: retry up to 3 times a failed unit test by @benoitf #11947
  • chore: added dialog for showing manual installation steps on windows by @gastoner #11946
  • chore: add update info to Kind provider by @SoniaSandler #11936
  • chore: migrate provider button onclick by @deboer-tim #11934
  • chore: migrate modal slot to snippet by @deboer-tim #11932
  • chore: migrate tab to svelte 5 by @deboer-tim #11929
  • chore: replace lcov by json output for coverage by @benoitf #11902
  • chore: props interface by @deboer-tim #11901
  • chore: add alert for mac podman socket failures by @cdrage #11892
  • chore: add setup podman-mac-helper to dashboard by @cdrage #11890
  • chore: troubleshooting page improvements - aria by @odockal #11888
  • chore: remove @typescript-eslint/no-explicit-any usage by @jeffmaury #11883
  • chore(refactor): migrate Modal component to Svelte5 by @jeffmaury #11881
  • chore: update ui package icons to svelte 5 by @deboer-tim #11869
  • chore(task-popup): added disapearing task popups by @gastoner #11867
  • chore: update ErrorMessage component to svelte 5 by @SoniaSandler #11866
  • chore: remove old docker compatibility code by @cdrage #11861
  • chore: remove traces by @benoitf #11853
  • chore(Carousel): migrate component to svelte v5 by @benoitf #11852
  • chore: allow optional dock property by @benoitf #11850
  • chore: enable svelte/require-each-key rule - part 5 - image by @SoniaSandler #11840
  • chore(configuration-impl): remove usage of any by @benoitf #11837
  • chore: make dropdown left control clickable by @deboer-tim #11835
  • chore: enable svelte/require-each-key rule - part 4 by @SoniaSandler #11834
  • chore: updated tsconfig and fixed typecheck by @gastoner #11832
  • chore: migrated link component to svelte5 by @gastoner #11830
  • chore: add left snippet to dropdown by @deboer-tim #11810
  • chore(storybook): adding Table with children story by @axel7083 #11808
  • chore(config-registry): remove usage of any by @benoitf #11807
  • chore: enable svelte/require-each-key rule - part 3 by @SoniaSandler #11795
  • chore: enable svelte/require-each-key rule - part 2 - kube and ingresses-routes by @SoniaSandler #11794
  • chore: enable svelte/require-each-key rule- part 1 by @SoniaSandler #11793
  • chore: fix alignment and make provider widget consistent by @deboer-tim #11781
  • chore: clone kubeconfig instead of re-reading from disk by @deboer-tim #11779
  • chore: api to change kubernetes namespace by @deboer-tim #11753
  • chore: enable svelte/require-store-reactive-access rule by @cdrage #11726
  • chore: kind extension - use configuration name when deploying ingress by @cdrage #11722
  • chore: move docker compatibility out of experimental by @SoniaSandler #11708
  • chore: revert #11340 by @axel7083 #11699
  • chore(dependabot): grouping typedoc deps update by @axel7083 #11692
  • chore: Introduce the FreeBSDInfo class into sys-info by @arrowd #11676
  • chore: remove docker compatibility warning from dashboard by @cdrage #11675
  • chore: prepare compatibility with kubernetes-client v1.1.0 by @feloy #11668
  • chore: add jobs name for merge queue by @benoitf #11661
  • chore: handle merge_group event as well for pr-check GH action by @benoitf #11659
  • chore: use latest pnpm v10 by @benoitf #11656
  • chore: refresh dependencies (pnpm upgrade) by @benoitf #11655
  • chore: update to podman 5.4.1 by @feloy #11653
  • chore: update babel dependencies from 7.26.0 to 7.26.10 by @benoitf #11652
  • chore: add merge-group option for PR check by @benoitf #11646
  • chore: update jsonpath-plus by @benoitf #11644
  • chore: update axios by @benoitf #11643
  • chore: update prismjs by @benoitf #11642
  • chore: avoid error saying that we use a variable before its assignment by @benoitf #11641
  • chore: enable svelte/no-immutable-reactive-statements by @feloy #11624
  • chore: prefer nullish coalescing by @benoitf #11621
  • chore: fix nullish coaelescing by @benoitf #11620
  • chore: change the import by @benoitf #11619
  • chore: change the way json files are imported by @benoitf #11618
  • chore: add community meeting banner, remove AI lab banner by @cdrage #11610
  • chore: format unformatted files by @benoitf #11609
  • chore: fix svelte/infinite-reactive-loop by @benoitf #11607
  • chore: use Node.js v22 for website by @benoitf #11606
  • chore(deps-dev): bump electron from 34.3.0 to 35.0.1 and to Node.js v22 by @benoitf #11603
  • chore: refactor spyOn by @benoitf #11601
  • chore: fix nullish coalescing by @benoitf #11600
  • chore: remove any usage by @benoitf #11599
  • chore(code-guidelines): testing style attribute by @axel7083 #11567
  • chore: indicate in provider widget if update is available by @SoniaSandler #11556
  • chore: removed no reactive reassign eslint rule by @gastoner #11549
  • chore: add eyebrows for 1.17 release banner by @cdrage #11548
  • chore(settings): change navigation appearance to icon plus title by default by @axel7083 #11544
  • chore: move terminal service to kubernetes by @deboer-tim #11520
  • chore: clean up PodInfoUI kind by @deboer-tim #11519
  • chore: remove unused kube paths from pods page by @deboer-tim #11516
  • chore: remove unused pod terminal tab by @deboer-tim #11500
  • chore: pods name column cleanup by @deboer-tim #11499
  • chore(deps-dev): bump eslint-plugin-svelte from 2.46.1 to 3.0.2 by @jeffmaury #11497
  • chore: added permission listener for kubernetes permissions by @gastoner #11492
  • chore: remove no-explicit-any from docker extension svelte by @cdrage #11481
  • chore: remove no-explicit-any deployments by @cdrage #11479
  • chore: remove no-explicit-any from lib/dashboard by @cdrage #11478
  • chore: reduce default gap in expandable by @deboer-tim #11475
  • chore: remove explicit-any from config map empty screen by @cdrage #11435
  • chore: remove pod kubernetes actions by @deboer-tim #11410
  • chore(podman): module property missing in tsconfig by @axel7083 #11361
  • chore: remove podman pod kubernetes navigation by @deboer-tim #11352
  • chore(electron): enable web security by @axel7083 #11340
  • chore: remove no-explicit-any from lib/appearance by @cdrage #11282
  • chore: remove no-explicit-any from lib/actions by @cdrage #11278
  • chore: remove @typescript-eslint/no-explicit-any usage by @jeffmaury #10998

Tests 🚦

  • chore(test): parametrize timeout by @cbr7 #12171
  • chore(test): make traces and video deletion configurable by @cbr7 #12134
  • chore(test): add check for error when editting images by @cbr7 #12128
  • fix(tests): fix the heading locator for extensions page by @odockal #12101
  • test(ui): adding svelte legacy usage for button by @axel7083 #12076
  • chore(test): refactor waiters for navigationbar by @cbr7 #12065
  • chore(test): wait for screen by @cbr7 #12057
  • chore(test): switch to polling assert for robustness by @cbr7 #12038
  • chore(test): handle exception thrown from race condition by @cbr7 #12033
  • test: add e2e test for Kind cluster deployment with custom config by @amisskii #12010
  • chore(test): increase timeout to avoid race condition by @cbr7 #11958
  • chore(test): add terminal validation checks by @cbr7 #11955
  • chore(test): fix k8s e2e tests by @amisskii #11928
  • chore(test): add methods to check image badges by @cbr7 #11897
  • chore(test): add troubleshooting pom and smoke e2e test by @odockal #11891
  • test(ui/table): ensuring row with children are covered by @axel7083 #11886
  • test: refactor tests for preload/src/index.ts by @feloy #11828
  • test: e2e test for k8s CronJob resource page by @amisskii #11812
  • chore(test): increase timeout of assertions by @cbr7 #11788
  • test(e2e): added number of expected objects in stress test's case names by @danivilla9 #11768
  • test: k8s ingress e2e test by @amisskii #11752
  • test: new cli e2e tests by @cbr7 #11750
  • chore(test): Docker compatibility e2e test for Windows by @xbabalov #11721
  • chore(test): parametrize strict matching by @cbr7 #11629
  • chore(test): fix k8s e2e tests by @amisskii #11628
  • chore(test): remove obsolete method by @cbr7 #11617
  • test: k8s services e2e test by @amisskii #11604
  • chore(test): extract port-forwarding operations to a dedicated utility file by @amisskii #11588
  • fix(tests): svelte 5.22.5 by @axel7083 #11568
  • chore(tests): enhance pushing image to kind method by @xbabalov #11494
  • chore(test): add push image e2e test by @cbr7 #11433
  • chore(test): skip kind tests that run on rootless mode machines by @danivilla9 #11388
  • test: add E2E test for image manifests by @amisskii #11186

Docs 📖

  • docs: add more Readme badges by @benoitf #12166
  • docs: add entry for community meetings by @benoitf #12159
  • docs: add EOST as adopters by @fabienengels #12106
  • docs(website): corrected the file name in the troubleshooting doc by @shipsing #12073
  • docs(website): updated the Kubernetes section to reflect how to switc… by @shipsing #12009
  • docs(website): added extension related use cases with API references by @shipsing #11978
  • docs(website): adding a troubleshooting section in the doc by @shipsing #11950
  • docs(website): adding links for the published extensions in the doc by @shipsing #11945
  • docs(website): added details to publish a PD extension to the catalog by @shipsing #11893
  • docs(website): updated the kubernetes section based on latest changes… by @shipsing #11718
  • docs: adding an instruction to enable ip_tables by @AlexonOliveiraRH #11710
  • docs(website): added an uninstall section in the documentation by @shipsing #11689
  • docs: add more information to extend page by @cdrage #11673
  • docs(website): fixed formatting issues by @shipsing #11638
  • docs: update RHEL WSL blog for RHEL 10 by @jeffmaury #11625
  • docs: added demos,presentation and community meeting link to the community page by @rujutashinde #11554
  • docs(website): added a blog to configure a mirror registry by @shipsing #11542
  • docs(website): added a procedure to configure a mirror registry by @shipsing #11465
  • docs: queryBy vs getBy by @feloy #11446
  • docs(website): add blog post for 1.17 release by @benoitf #11431

ci 🔁

  • ci: Harden GitHub Actions by @step-security-bot #12162
  • ci: Harden GitHub Actions by @step-security-bot #12160
  • ci: adjust codecov report by @benoitf #11770
  • ci: report unit tests coverage to codecov by @benoitf #11769

Feature 💡

  • feat: navigation api for manifests by @deboer-tim #12143
  • feat(vitest): configure workspace by @axel7083 #12111
  • feat(PinRegistry): adding telemetry events by @axel7083 #12088
  • feat(status-bar): pin-unpin providers by @axel7083 #11973
  • feat: vm provider details / terminal by @feloy #11948
  • feat: create VM provider frontend by @feloy #11924
  • feat: startProvider works for VM connections by @feloy #11880
  • feat: add VM provider lifecycle to frontend by @feloy #11863
  • feat(ProviderButton): adding left slot by @axel7083 #11862
  • feat: update start/stop/editProviderConnectionLifecycle for VM by @feloy #11839
  • feat: create vm provider connection (backend) by @feloy #11827
  • feat: add VM provider info to ProviderInfo structure by @feloy #11787
  • feat: implement setVmProviderConnectionFactory by @feloy #11777
  • feat(frontend): adding class props to provider widget by @axel7083 #11775
  • feat: add control to change the kubernetes namespace by @deboer-tim #11756
  • feat: register VM provider connection by @feloy #11755
  • feat(extensions/kind): update projectcontour to v1.30.2 by @Blaimi #11734
  • feat(pin-registry): expose pin / unpin / list to main world by @axel7083 #11701
  • feat: expose ListImagesOptions to main world by @axel7083 #11700
  • feat: represent not permitted resources in Kubernetes dashboard by @feloy #11639
  • feat: handle error when exec command not found by @feloy #11608
  • feat: display resources count in Kubernetes experimental mode by @feloy #11529
  • feat: Add Jobs to Kubernetes by @cdrage #11474
  • feat: use expandable for learning center by @deboer-tim #11470
  • feat: kubernetes experimental backend provides active resources count by @feloy #11467
  • feat(main): adding pin-registry for providers by @axel7083 #11422
  • feat: add the ability to auto scroll to provider from statusbar by @bmahabirbu #11420
  • feat: added visual indicator for kubernetes permissions by @gastoner #11307
  • feat: kube play build support by @axel7083 #10801
  • feat: add community page by @Firewall #10551

Fixes 🔨

  • fix: image details navigation by @deboer-tim #12139
  • fix(Button): binding usage and event type by @axel7083 #12086
  • fix(ui): race condition in ImageDetailsCheck tests by @axel7083 #12077
  • fix: use intermediate ca store as well on Windows by @jeffmaury #12066
  • fix: updated configmap secret capitilization by @bmahabirbu #12048
  • fix: remove unnecessary assignment by @feloy #12036
  • fix: reset messageBox before sending result through callback by @jeffmaury #12008
  • fix(Table.svelte): children function usage by @axel7083 #11980
  • fix(PinRegistry): listeners and VM support by @axel7083 #11976
  • fix: tests on namespace dropdown by @feloy #11971
  • fix(ui): make Carousel generic by @axel7083 #11922
  • fix: no current context on Kubernetes dashboard by @feloy #11903
  • fix: do not forget to refresh context list after switching docker context by @benoitf #11898
  • fix: wait for kubeconfig change while creating kind cluster by @deboer-tim #11868
  • fix(dropdown): ensure onChange value are non-undefined by @axel7083 #11860
  • fix: name column alignment by @deboer-tim #11838
  • fix: add delete confirmation dialog for Kubernetes Ingress/Routes resources by @amisskii #11806
  • fix(storybook/expandable): enable rule no-useless-children-snippet and fix one violation by @dgolovin #11797
  • fix: update tooltip position for first provider in statusbar by @SoniaSandler #11796
  • fix(docs): docker export syntax by @Virakal #11792
  • fix(frontend): status bar order by @axel7083 #11773
  • fix: remove Kubernetes provider from map when disposed by @feloy #11767
  • fix(extensions/kind): use correct types in download.ts by @Blaimi #11733
  • fix: alignment in kubernetes name column by @deboer-tim #11732
  • fix: update minimal node types to v22 by @odockal #11730
  • fix: enabled svelte no-reactive rule and tested files by @bmahabirbu #11709
  • fix(tools): remove no-explicit-any generator.spec.ts by @axel7083 #11706
  • fix(preload-webview-spec): remove no-explicit-any by @axel7083 #11705
  • fix(preload-webview-index): remove no-explicit-any by @axel7083 #11704
  • fix(renderer): create container from existing with multiple connections by @axel7083 #11702
  • fix: do not declare informer offline on 404 error by @feloy #11674
  • fix: website sprint link by @benoitf #11663
  • fix: grant access to the containers directory for the flatpak build by @vzhukovs #11654
  • fix: removed compose /usr/local/bin in PATH check to align with kubectl by @bmahabirbu #11651
  • fix: do not use ResourceName for experimental kubernetes by @feloy #11616
  • fix: make labels in create new connection form resize properly and update form components width by @SoniaSandler #11532
  • fix: button focus outline by @deboer-tim #11483
  • fix: add back button cursor pointer by @deboer-tim #11471
  • fix: proper validation of input fields by @vzhukovs #11359
  • fix: handling of proxy bypass values from system under macOS by @chkpnt #10975

Configure a mirror registry

· 2 min read
Shipra Singh
Tech writer

Lower rate limits imposed on the Docker Hub End-User License Agreement (EULA) made it difficult for community members to access the docker.io images frequently. A simple solution to this problem is to configure a mirror for the docker.io registry in the registries.conf file. This way, they can access the Docker resources whenever needed.

With the Podman Desktop UI, you can add registry locations and configure their mirrors easily. Configuring a mirror redirects a registry to another location, enabling you to use its content. For example, if you have configured ghcr.io as a mirror for docker.io and try to pull a resource, Podman pulls the resource from ghcr.io instead of docker.io.

The blog covers how to configure a mirror for the docker.io registry.

Prerequisites

  • Upgrade to the latest version of Podman.
  • Recreate your Podman machine. Otherwise, you get a notification when you set up your registry configuration: notification to mount the registry file

Configuring: A mirror for docker.io

  1. Go to the Settings > Resources page.
  2. Select More Options > Setup registry configuration in the Podman tile. A command palette opens. Set up registry configuration
  3. Set up your registry configuration:
  4. Select the Add registry configuration option from the command palette. adding registry configuration
  5. Type the location of the registry, such as docker.io, and press the Enter key. The docker.io registry is added to the palette. docker.io registry added
  6. Select docker.io from the command palette.
  7. Type the location where you want to mirror the registry, such as ghcr.io, and press the Enter key. The entry for the docker.io registry shows the location where it is mirrored. mirrored registry location
  8. Select the End configuring registries option to end registry configuration. ending registry configuration

Verifying: the mirror

There is no direct way to verify the mirror configuration from the UI. But, you can use the CLI for verification.

  1. Start an interactive session with the default Podman machine:
$ podman machine ssh <machine_name>
  1. Pull an invalid image from docker.io.
$ podman pull docker.io/invalid

An error message appears in the terminal indicating a failure to pull the image from the mirror. You receive the error message: Mirrors have also failed.

Podman Desktop 1.17 Release

· 17 min read
Florent Benoit
Principal Software Engineer

Podman Desktop 1.17 Release! 🎉

podman-desktop-hero-1.17

Podman Desktop 1.17 is now available! Click here to download it!

This release brings exciting new features and improvements:

  • New running workflow 🛠️: Start containers from images in just a few steps.
  • Registry mirror configuration 🔄: Simplify registry mirroring setup with a dedicated command.
  • Smoother kind cluster experience ☁️: Spin up a Kubernetes cluster effortlessly, even without a pre-installed kind binary.
  • Podman 5.4 🚀: Upgrade to the latest Podman engine for enhanced performance and features.
  • Pods, redefined 📦: Clear separation between Podman pods and Kubernetes pods for better usability.
  • Kubernetes experimental mode ⚡: Change the way on how the resources are collected and monitored.

Podman Quadlets with Podman Desktop

· 4 min read
Axel Stefanini
Software Engineer

banner

Containers are typically deployed in Kubernetes clusters. However, for smaller-scale use cases such as on a single-node server or during development, Kubernetes can be overkill.

What’s a more lightweight solution for running autonomous applications with multiple interacting containers?

In this blog, we'll dive into what Quadlets are, their benefits, and how to use them within Podman Desktop.

Podman Desktop 1.16 Release

· 13 min read
Philippe Martin
Principal Software Engineer

Podman Desktop 1.16 Release! 🎉

podman-desktop-hero-1.16

Podman Desktop 1.16 is now available! Click here to download it!

This release brings exciting new features and improvements:

  • Experimental Features: a new "Experimental" section in the Settings provides the list of current experiments, and links to related discussions
  • Providers appear in the Status Bar: Providers are moved from Dashboard to Status Bar, to increase their visibility (experimental feature)
  • Prune only untagged images: Choose to Prune "All untagged images" or "All unused images" when Pruning images
  • Search in Container's Logs: Possibility to search terms in the logs of containers and pods
  • Kubernetes: Monitor current context only: Only the current context is monitored by default

Using CNCF projects with Podman Desktop

· 3 min read
Charlie Drage
Software Engineer

plane

Podman Desktop serves as a powerful tool for managing and visualizing cloud-native applications and can interact seamlessly with a range of CNCF (Cloud Native Computing Foundation) projects.

It's an accessible platform for developers working with single-container applications, multi-container configurations with Compose files, and complex, distributed applications on Kubernetes clusters.

Key features of Podman Desktop for CNCF projects

Podman Desktop brings together three powerful features for managing small to large-scale projects:

  • Container Management: Supports creating, running, and monitoring containers.
  • Compose Support: Allows you to deploy applications defined in Compose files. This is particularly useful for managing applications that require multiple services, such as web servers, databases, and caches.
  • Kubernetes Integration: Offers tools to manage multi-node Kubernetes clusters, making it ideal for handling more complex distributed applications that need orchestration across several pods and services. You can setup your own development cluster with Podman Desktop using our Minikube or Kind extensions.

Minikube

Minikube is a local Kubernetes development cluster which allows for an easy way to learn and develop for Kubernetes.

Minikube can be seamlessly integrated with Podman Desktop, enabling Kubernetes development workflows within Podman’s environment. This is made possible by installing the Minikube extension, which allows creating, managing, and deploying clusters directly from the Podman Desktop.

The following video provides a complete guide from installation to cluster creation:

Backstage

Backstage is an open-source platform for building developer portals, designed by Spotify. It empowers engineering teams to create customized, centralized hubs for managing and documenting their services, applications, and infrastructure. Backstage’s extensible architecture includes features for cataloging software components, organizing documentation, managing cloud resources, and tracking workflows.

A popular method for deploying Backstage is through a Helm chart. Once deployed, you can view Backstage’s services in the Kubernetes Dashboard to monitor components and ensure proper configuration:

backstage services

You can also access your deployed Backstage instance by using Podman Desktop's port forwarding feature. This feature allows you to securely forward a local port to the Backstage service running on your Kubernetes cluster, making it easy to access the instance from a local browser.

backstage port forward

Dapr

Dapr (Distributed Application Runtime) is an open-source, event-driven runtime designed to help developers build resilient, stateless, and stateful applications that can run seamlessly on cloud or edge environments.

Dapr abstracts the complexities of distributed systems, offering building blocks for service invocation, state management, publish/subscribe messaging, and resource bindings, which simplify the development of microservices and cloud-native applications.

Dapr can be deployed in a local environment using Podman by following their self-hosted podman setup.

To initialize Dapr with Podman after installing the Dapr CLI, execute the following command:

$ dapr init --container-runtime podman

Once initialized, you can manage and interact with Dapr directly within Podman Desktop:

dapr

Additionally, Podman Desktop provides a "Launch Browser" button, allowing quick and convenient access to the Dapr UI for monitoring and management:

dapr browser

Conclusion

Whether you’re managing Kubernetes clusters, harnessing the power of Backstage for developer portals, or deploying microservices with Dapr, Podman Desktop provides a unified environment to streamline your workflows.

Check out the list of graduate and incubating projects to discover even more possibilities with Podman Desktop.

Podman Desktop + CNCF - Community Driven Move

· 5 min read
Markus Eisele
Product Marketing
Stevan Le Meur
Product Manager

banner

Today, we're thrilled to announce our application for Podman Desktop to join the Cloud Native Computing Foundation (CNCF) as a Sandbox project.This is a huge milestone for our project and our community, and we're incredibly excited for what the future holds.

About Podman Desktop

Podman Desktop builds upon the innovations brought by Podman, offering a powerful yet user-friendly environment for containerized development. Podman provides a daemonless, rootless container engine that enhances security and flexibility, while Podman Desktop delivers an intuitive graphical interface for managing containers and interacting with Kubernetes. Enhanced by a plug-in system that allows developers to customize their inner loop container workflows to their needs and offers flexible extension points for other projects as well as other container engines.

Why the CNCF?

The CNCF is a vital organization for the cloud-native world, supporting collaboration and driving innovation for critical projects like Kubernetes, Prometheus, and Envoy. As a CNCF project, Podman Desktop will benefit from increased visibility, a neutral home for open governance, and access to a wealth of resources and expertise. CNCF projects will take a renewed interest in collaborating with us. This move will help us grow our community, ensure the project's long-term sustainability, and accelerate its development.

How Podman Desktop simplifies containers and Kubernetes

Developing with containers can be complex. Podman Desktop simplifies this by providing an intuitive interface and powerful tools for building, managing, and running containers. This allows developers to focus on writing code, not wrestling with infrastructure. Why is this important? Because in today's complex world, developer productivity is paramount. By removing friction and simplifying workflows, Podman Desktop empowers developers to deliver value faster. Podman Desktop enables developers to run Kubernetes locally, mirroring their production environment. This eliminates the "works on my machine" problem and allows for early detection of configuration issues. By closing the gap between development and production, Podman Desktop reduces deployment risks and accelerates the feedback loop. This leads to higher quality software and faster release cycles.

Open source and the CNCF: A perfect match for developer tools

We believe in the power of open source. Open source software fosters transparency, encourages collaboration, and drives innovation. By donating Podman Desktop to the CNCF, we're ensuring it remains open and accessible to all, fostering a vibrant community around it. The CNCF is the perfect home for Podman Desktop because it champions open source values and provides a neutral ground for collaborative development. This ensures that Podman Desktop remains vendor-neutral and driven by the needs of its users, keeping options open and avoiding vendor lock-in.

Furthermore, while the CNCF has fostered incredible innovation and many developers profit from the number of projects available through the CNCF, there's a recognized need for more developer-focused tooling. Podman Desktop fills this gap perfectly by providing a developer-centric, streamlined, and intuitive experience for containerizing, managing, and deploying cloud-native applications. Podman Desktop has a natural affinity to Kubernetes due to its design and features that seamlessly bridge the gap between local container development and Kubernetes deployments. This close relationship aligns perfectly with the CNCF's mission to drive the adoption of cloud-native technologies.

Join the growing Podman Desktop community

As a CNCF project, we have the opportunity to open our doors to a wider community of contributors and users. We believe that open source thrives on collaboration and diverse perspectives. By broadening our contributor base, we can accelerate innovation, improve the quality of Podman Desktop, and ensure it meets the needs of a diverse range of users.

You can contribute in various ways

  • Reporting issues: If you encounter bugs or have suggestions for improvements, you can report them on the GitHub issue tracker. Be sure to provide detailed information and steps to reproduce the issue.

  • Working on issues: You can browse the issue tracker and contribute by fixing bugs or implementing new features. This involves forking the repository, making changes, and submitting pull requests.

  • Contributing code: Beyond addressing existing issues, you can propose and contribute entirely new features or enhancements to Podman Desktop's functionality, user interface, or integrations with other tools. Learn more about how to contribute.

  • Contributing plug-ins: Feel like there is an integration missing? You can contribute your own plug-in functionality for Podman Desktop. Check out the guide.

  • Improving documentation: Clear and comprehensive documentation is essential. You can contribute by improving existing documentation, adding new guides, or creating tutorials.

  • Providing website contributions: The Podman Desktop website is also open source. You can contribute to its content, design, or translations.

  • Becoming an Adopter: If you are a happy user, we’d love to know and share the word. Consider adding yourself or your organization to the list of adopters with a pull request.

Before you start contributing, it's helpful to familiarize yourself with the project's contribution guidelines and code architecture. These resources provide valuable information on coding style, testing procedures, and the overall development process. You can also join #podman-desktop on the Kubernetes Slack to connect with other contributors and get help.

KubeCon 2024 and beyond

We are at KubeCon NA 2024 in Salt Lake, to officially announce this exciting news and share more about Podman Desktop and our roadmap. Stop by the Red Hat booth to say hello, contribute to the project, and help us shape the future of cloud-native development.

Get involved and learn more

We're incredibly excited about this new chapter for Podman Desktop and can't wait to see what we can achieve together with the CNCF community.

Creating a MicroShift bootable image with Podman Desktop

· 7 min read
Charlie Drage
Software Engineer

banner

If you're unfamiliar with BootC, it offers an impressive method for deploying applications directly to bare metal from either a single Containerfile or a pre-existing bootc-supported image.

A "bootable" image, known as a BootC container image, allows you to use a simple container image to create a full bootable operating system, whether it's a raw virtual machine image or an iso for USB installation!

This capability is ideal for a variety of uses, from a simple HTTP server to an OS powering a full-stack application.

In this tutorial, we'll deploy an OpenShift derivative called MicroShift, an edge-optimized version of OpenShift designed for single-node setups on resource-constrained configurations. Think of it as a compact version of OpenShift!

This entire process is carried out using a single Containerfile (or Dockerfile).

Requirements

Before starting the tutorial, ensure you have:

Building the BootC container image

First, we'll build the initial BootC container image from which we'll later create a bootable OS.

Logging into Red Hat registry

Before proceeding, download the Red Hat Authentication extension from the catalog to enable access to Red Hat registries:

red hat login

Then log into your account:

red hat login sign in

Download your OpenShift Hybrid Cloud pull secret

Download your pull secret.

This is downloaded as pull-secret.txt. Put it in a secure location.

Creating the Containerfile (or Dockerfile)

The Containerfile is crucial for creating the bootable image.

It's important to note that we will be providing one argument during the build and that is the PASSWORD in order to access the Virtual Machine that will be logged in via the redhat username.

We will be using the Containerfile from the MicroShift image mode GitHub documentation.

Copy the Containerfile from the above link to a new file which we will be building with Podman Desktop:

$ curl https://raw.githubusercontent.com/openshift/microshift/main/docs/config/Containerfile.bootc-rhel9 -o Containerfile

Build with Podman Desktop

Select the Containerfile and build it within Podman Desktop.

You will need to provide:

  • A password for the redhat user that will be created in the Containerfile.

Pass the argument as USER_PASSWD in the build page arguments.

build

Build the bootable image with BootC Podman Desktop extension

Install

Install the BootC Podman Desktop extension from the extensions catalog:

install

Build the image

Now, create the bootable image from our container image!

Click the new BootC icon on the navigation bar and go to build:

build_button

Once the build is complete, you'll see a confirmation on the dashboard.

Next, select the image we built and choose an appropriate output format for testing the bootable image. RAW is a common choice for local testing with QEMU and other VM software like libvirt.

Testing the image

Explore various ways to test your image, using local software or cloud platforms. Here are some common steps for using the RAW output bootable image.

Running the Virtual Machine

This guide doesn't cover all methods for running a virtual machine, but here are the most common:

When using Hyper-V, create a .vhd image with BootC:

  1. When building, select the .vhd option.
  2. Install Hyper-V
  3. Import the virtual machine

Configuring and verifying MicroShift

After you boot your virtual machine, you can now configure MicroShift as well as verify the connection.

Copying over the OpenShift pull secret

Before proceeding with verifying OpenShift, the OpenShift pull secret must be copied over so that MicroShift can download Red Hat registry-authenticated container images.

Below we will copy the OpenShift secret you had previously downloaded to the virtual machine.

  1. Download your OpenShift pull secret which is downloaded as pull-secret.txt

  2. Use scp to copy over to the virtual machine:

$ scp -P 2222 pull-secret.txt redhat@localhost:~/
  1. SSH into the VM:
$ ssh redhat@localhost -p 2222
  1. Move the secret to /etc/crio/openshift-pull-secret:
$ sudo mv pull-secret.txt /etc/crio/openshift-pull-secret
  1. Restart the microshift service:
$ sudo systemctl restart microshift

Listing pods

Below we will SSH into the virtual machine and confirm that MicroShift is deploying Pods correctly:

  1. SSH into the VM:
$ ssh redhat@localhost -p 2222
  1. Copy the generated kubeconfig file to ~/.kube/config:
$ mkdir -p ~/.kube
$ sudo cp /var/lib/microshift/resources/kubeadmin/kubeconfig ~/.kube/config
$ sudo chown redhat ~/.kube/config
  1. Verify Pods are running by using oc or kubectl:
$ kubectl get pods -A
NAMESPACE NAME READY STATUS RESTARTS AGE
kube-system csi-snapshot-controller-856bb8b9bc-9n7lj 1/1 Running 1 3d23h
kube-system csi-snapshot-webhook-7c64d4d4d7-98v6l 1/1 Running 1 3d23h
openshift-dns dns-default-n2td4 2/2 Running 2 3d23h
openshift-dns node-resolver-7cslg 1/1 Running 1 3d23h
openshift-ingress router-default-7cbc67954b-nqqc6 1/1 Running 1 3d23h
openshift-ovn-kubernetes ovnkube-master-zcqw5 4/4 Running 5 3d23h
openshift-ovn-kubernetes ovnkube-node-crnn9 1/1 Running 2 3d23h
openshift-service-ca service-ca-6799f567-k7lsc 1/1 Running 1 3d23h

Using Podman Desktop to verify MicroShift

Alternatively, you can copy the MicroShift configuration file to your local machine and test it remotely on Podman Desktop.

  1. On your local machine, create the .kube directory if it does not exist already:
$ mkdir ~/.kube
  1. Copy the remote kubeconfig file to a local configuration file:

Within MicroShift, a kubeconfig file is automatically created at /var/lib/microshift/resources/kubeadmin/kubeconfig.

Copy the file over to your local system:

scp -P 2222 redhat@localhost:/var/lib/microshift/resources/kubeadmin/kubeconfig ~/config

If you already have a ~/.kube/config, copy the contents of config to the ~/.kube/config file.

  1. Use Podman Desktop to verify the MicroShift cluster:

Podman Desktop will automatically detect your .kube/config file.

Note: You may need to modify your .kube/config file to reflect the correct domain or IP address of your cluster.

cluster

Storage configuration

By default, storage configuration requires an LVM partition and LVMS storage manager will not be deployed. This is due to a limitation when building a RAW image. An alternative non-local storage solution is required to use OpenShift artifacts with storage capabilities. The feature to add LVM support is tracked in this pull request.

Conclusion

This tutorial provided a step-by-step guide on deploying a bootable MicroShift image using Podman Desktop and the BootC extension. By leveraging tools such as BootC and Podman, we've streamlined the process of creating a lightweight, yet fully functional, OpenShift environment suitable for single-node edge computing scenarios.

Thank you for following along, and happy deploying!

Introduction to Podman Desktop extensions

· 4 min read
Charlie Drage
Software Engineer

programming

Extensions are a powerful tool to customize and extend the functionality of Podman Desktop. Whether you want to add new container management features, streamline current workflows, or create custom UI elements specific to your tech stack, building extensions allows you to tailor the Podman Desktop experience to your specific needs.

In this guide, we'll introduce how you can build your own Podman Desktop extension, with links to detailed documentation that covers each part of the process.

Introduction to extensions

Extensions are abundant in Podman Desktop and can be found in the Extensions -> Catalog section.

extension catalog

Each extension expands on Podman Desktop, such as providing Kubernetes development clusters with Minikube or even analyzing your image layers.

Below is an example of the layers explorer extension and how it integrates into Podman Desktop:

layers_explorer

Getting started with your project

The first step in creating your extension is setting up the project environment. To learn how to configure the project and add basic components, check out the Templates for creating an extension guide, which walks you through initializing your project from an official template.

Adding UI components

One of the most common tasks when creating an extension is adding a user interface. Whether it’s adding buttons, panels, or icons, UI components help make your extension more interactive and accessible. Adding a UI component is totally optional and an extension can be ran without UI components. Learn more about this in the Adding UI components documentation, where you’ll find instructions on creating and integrating components into the application’s UI.

Working with icons

Icons are a great way to make your extension more visually unique. You can learn how to add and style custom icons by following the Adding icons documentation.

Below is an example of how the bootc extension added icons to the image list within Podman Desktop:

icons

Extensions often integrate with existing menus and navigation to offer users easy access to new commands and features. If you want to add items to the context menu, explore the Menu configuration documentation, which explains how to add commands to menus and control when they are displayed using When Clauses.

Below is an example of how the bootc extension added a new menu command to image list:

menus

Adding and configuring commands

Commands are the backbone of most extensions, allowing users to interact with the application and trigger specific actions.

If you need to define and register custom commands, the Commands guide will show you how to create commands that respond to user actions or input, and tie them into your extension’s workflow.

You can also configure these commands to appear in different contexts. Check out the When clause Contexts documentation to learn more about restricting commands to specific scenarios.

Commands are heavily influenced by VS Code commands and can be configured similarly. See our commands guide for more information.

Setting up onboarding workflows

Creating a smooth onboarding experience is essential to help users get started with your extension. This includes steps for CLI binary installations or other initial setup values.

You can provide guidance, tutorials, or initial setup steps using the Onboarding workflow guide.

Below is an example of how the built-in compose extension adds onboarding for the compose CLI binary installation:

compose

Configuration settings

Once you’ve built your components and commands, you may want to setup configuration settings for advanced usage of your extension.

The Configuration documentation outlines the configuration file structure and how to link everything together to use user-specific values.

Publishing your extension

Publishing enables users to install your extension, you can compile your extension into a container image for users to easily consume. Follow the Publishing guide to learn how to distribute your extension.

Conclusion

Creating an extension opens up endless possibilities to customize Podman Desktop to your specific needs.

It is also easy to package and publish your extension for others to use.

Have fun exploring our documentation on how to create an extension and happy coding!

Podman Desktop 1.13 Release

· 6 min read
Sonia Sandler
Associate Software Engineer

Podman Desktop 1.13 Release! 🎉

podman-desktop-hero-1.13

Podman Desktop 1.13 is now available. Click here to download it!

This release includes:

  • Hyper-V support: You can now create and manage Hyper-V Podman machines directly from Podman Desktop.
  • Search image feature: Search for an image from Podman Desktop.
  • Updated empty state pages: Start your journey in the containers, images, pods, and Kubernetes pages with a click of a button
  • New Kubernetes navigation: All Kubernetes related pages have been moved to a separate sub menu for easier and less crowded navigation.
  • Image Layer explorer extension: With this new extension, you can explore the various layers of images.
  • Experimental Docker compatibility mode page: You can now try out our experimental Docker compatibility mode page.

Build your Kubernetes application with Podman Desktop

· 5 min read
Shipra Singh
Tech writer

The integration of Podman Desktop with Kubernetes helps you to run your application on a Kubernetes cluster, such as Kind or Minikube.

This blog covers the following aspects:

  • Build a containerized application from registry images
  • Create a pod
  • Set up a local Kubernetes cluster
  • Deploy the application to Kubernetes
  • Verify the running service

Building a containerized application

With this blog, you will build a containerized application that uses:

  • a back-end Redis server container
  • a front-end Python application container

To do so, you can pull the relevant images from the quay.io registry.

  1. Go to the Images component page.

  2. Click Pull. pull from registry

  3. Start the first container:

    1. Enter the image name to pull from a registry. For example, quay.io/podman-desktop-demo/podify-demo-backend. enter image name
    2. Click Pull image. A download complete notification opens.
    3. Click Done.
    4. Click the Run Image icon corresponding to the new image added. running an image
    5. Enter the container name redis-server.
    6. Click Start Container. start a back-end container
    7. Click the Logs tab to view that the Redis server is running in standalone mode. view Logs tab
  4. Start the second container:

    1. Enter the image name to pull from a registry. For example, quay.io/podman-desktop-demo/podify-demo-frontend.

    2. Click Pull image and then Done.

    3. Click the Run Image icon corresponding to the new image added.

    4. Enter the container name python-app. enter image name

      note

      If the default port is already in use, you can specify a different port in the Port mapping field.

    5. Select the Networking tab and enter hostname as redis-server and IP address as 10.88.0.2 to enable communication with the Redis server.

      note

      You can find the IP address in the Inspect tab of the redis-server Container Details page.

    6. Click Start Container. start a front-end container

    7. Click the Logs tab to view that the application is running on port 5000. front-end app running

    8. Click the Open browser icon on the right side of the page.

    9. View the running front-end application. running front-end application

Creating a pod

You can use both the containers to create a pod. This way both the front-end and back end container applications can share resources, such as storage and network.

Pod creation with existing containers

  1. Go to the Containers page.
  2. Select both the front-end and back-end containers.
  3. Click the Create Pod button. create a pod from containers
  4. Click Create Pod. copying containers to a pod
  5. View the newly created pod on the Pods page.
  6. Click the name of the pod and then click the Summary tab to view its summary. viewing pod details

Alternative: Pod creation with Kubernetes YAML

You can generate a Kubernetes manifest for any existing pod or container and use it to create a local Kubernetes YAML file. Then, you can customize that file and create a pod from it.

At the time of pod creation, you can select a runtime to indicate whether you want to run the pod on a Podman engine or a Kubernetes cluster. Based on the selection, you get to see the newly created pod running in that environment on the Pods component page.

The following procedure creates a pod that runs on a Podman engine.

  1. Go to the Pods page.
  2. Click the overflow menu icon corresponding to the pod. overflow menu icon
  3. Select the Generate Kube option from the dropdown list.
  4. View the Kubernetes YAML configuration in the Kube tab. kube manifest
  5. Copy the configuration and paste it into a YAML file on your machine.
  6. Edit the YAML configuration and save it.
  7. Go to the Pods component page.
  8. Click Play Kubernetes YAML. play kubernetes yaml
  9. Select the YAML file from your machine.
  10. Check that the Runtime field is set to Podman container engine.
  11. Click Play and then Done.
  12. View the newly created pod on the same page.

After creating the pod, set up a local Kubernetes cluster to deploy the pod.

Setting up a local Kubernetes cluster

You can set up a local Kubernetes cluster. Once the cluster is connected and running, you can deploy your application on it.

Based on your preference, use the Kind or Minikube extension:

  1. Install the extension from the Extensions catalog.
  2. Create a Kubernetes cluster. See Kind cluster creation or Minikube cluster creation.

Once a kubernetes cluster is created, you can view a running control plane node and a running Kubernetes service on the Kubernetes component page. The page also shows that the cluster is connected.

Deploying the application to Kubernetes

You can deploy the application pod to a Kubernetes cluster that has an active connection and access it through a service. Also, any container that is part of a pod is deployable to a Kubernetes cluster.

  1. Select your Kubernetes context.

  2. Go to the Pods component page.

  3. Click the overflow menu icon corresponding to the pod. overflow menu icon

  4. Select the Deploy to Kubernetes option from the dropdown list.

  5. Select the checkbox to expose the service locally using the ingress controller. expose the service locally

    note

    When you configure custom port mapping while running an image, you get the option to select an Ingress host port from the dropdown list. ingress-host-port Otherwise, you do not see the option.

  6. Click Deploy and then Done.

Verifying the running service

  1. Go the Kubernetes component page.

  2. Perform the following steps:

    1. Click the Services option to view the newly created service, my-pod-5000. service created
    2. Click the Ingresses and Routes option to view the newly created ingress, my-pod. ingress created
    note

    Use the Apply YAML button to directly apply a Kubernetes YAML file to create a resource.

Podman Desktop 1.12 Release

· 15 min read
Charlie Drage
Software Engineer

Podman Desktop 1.12 Release! 🎉

podman-desktop-hero-1.12

Podman Desktop 1.12 is now available. Click here to download it!

This release includes:

  • Podman remote: We now support remote Podman setups! Manage your remote Podman machines all within the UI.
  • macOS GPU support: Container GPU access on macOS is now available. libkrun is now a selectable provider type to allow GPU passthrough enablement.
  • Windows GPU support: Want to try out Windows GPU support too? Podman already supports it, but we are now showcasing it in our AI Lab extension
  • Podman 5.2.0: This new version of Podman provides GPU access for macOS, as well as a host of new features.
  • Light mode out of experimental: Our light mode has been well-received, and we have now marked it as non-experimental! Enjoy the new theme.
  • Kubernetes features: ConfigMaps, Secrets and multi-file Kubernetes YAML applying have now been added to our Kubernetes dashboard.
  • Improved font consistency: You'll notice a big difference in consistency this release, as we updated all font sizes throughout Podman Desktop.

Using RHEL as a WSL podman machine

· 5 min read
Jeff Maury
Engineering Manager

Red Hat provides a tool called Image Builder that allows developers to build their own custom image of RHEL in a variety of formats. Recently, Image Builder added WSL as a target, enabling you to run RHEL on Windows as a WSL distribution.

This article details the steps and actions required to build and run your RHEL WSL image.

The purpose of this article is to describe the options needed for the RHEL WSL distribution so that it can be used as a Podman machine.

To use the RHEL WSL image as a Podman machine, ensure that the following packages are installed:

  • podman
  • podman-docker
  • procps-ng
  • openssh-server
  • net-tools
  • iproute
  • dhcp-client
  • sudo
  • systemd-networkd

Luckily, all but the last package are available from the pre-configured RHEL 9 repositories. The last package (systemd-networkd) is available from the EPEL 9 repository and will need to be configured when building the image.

Build the image

Navigate to image builder

image builder

On the upper right menu, enable the Preview mode.

image builder preview

Click Add blueprint to open the Create image dialog wizard.

image wizard

On the Image output page, select the following:

  • From the Release list, select Red Hat Enterprise Linux (RHEL) 9.
  • From the Select target environments option, select WSL - Windows Subsystem for Linux (.tar.gz).
  • Click Next.
warning

Although the RHEL 10 (Beta) option is available in the Release, please note that it is incompatible with At the time of writing, the WSL kernel does not support nftables.

On the Register page, select Automatically register and enable advanced capabilities.

On the OpenSCAP page, as it is not supported for WSL images, click Next.

On the File system configuration page, select Recommended: Use automatic partitioning.

  • Click Next.

On the Content page, complete the following steps to add additional packages to your image:

  • On the Repository snapshot step:

    • Select Use latest content.
    • Click Next.
  • On the Custom repositories step:

custom repositories

Click on the Create and manage repositories here link. This will open a new tab

custom repositories

Click Add repositories now

add custom repository

Click Add repositories

add custom repository

On the Add custom repositories page, select the following:

  • In the Name list, enter EPEL 9.
  • In the URL field, enter https://dl.fedoraproject.org/pub/epel/9/Everything/x86_64/
  • In the GPG key field, enter https://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL-9
  • Click Save.

Close the tab and switch back to the previous one

  • In the filter input field, type EPEL
  • Select the EPEL 9 repository

custom repository created

Click Next

  • On the Additional packages step:

    • On the Available packages search field, enter podman and click the button.
    • Select the podman and podman-docker packages.
    • On the Available packages search field, enter procps-ng and click the button.
    • Select the procps-ng package.
    • On the Available packages search field, enter openssh-server and click the button.
    • Select the openssh-server package.
    • On the Available packages search field, enter net-tools and click the button.
    • Select the net-tools package.
    • On the Available packages search field, enter iproute and click the button.
    • Select the iproute package.
    • On the Available packages search field, enter dhcp-client and click the button.
    • Select the dhcp-client package.
    • On the Available packages search field, enter sudo and click the button.
    • Select the sudo package and click the > button to add the selected package shown in the package search results to the Chosen packages dual list box.
    • On the Available packages search field, enter systemd and click the button.
    • Select the systemd-networkd package.
    • Click Next

On the First boot script configuration page:

  • Click Next.

On the Details page:

  • In the Blueprint name, enter rhel-wsl.
  • Click Next.

On the Review page:

  • Click Create blueprint and build image.

images list

The image is being built. Once the build is finished, the download link will be available. Click on the Download (.tar.gz) link and save the downloaded file to one of your local folders.

Create the RHEL WSL podman machine

Launch Podman Desktop and go to the Settings -> Resources page:

images list

On the Podman provider, click on Create new ...

On the Create Podman machine page, click the Browse button for the Image Path field and select the file downloaded from Image Builder.

create podman machine

Click on the Create button: the machine will be created and started. After a short time, the operation status should be reported.

podman machine created

Let's play with the RHEL WSL podman machine

Go to the Images page and pull the httpd image

pull httpd image

Click on Done

images list

Start the image by clicking on the Run image icon

images list

Once the container is started, the Apache server can be accessed on localhost:9000

Podman Desktop 1.11 Release

· 6 min read
Charlie Drage
Software Engineer

Podman Desktop 1.11 Release! 🎉

Podman-desktop-1-11-hero

This release introduces:

  • Experimental light mode!: Our most-requested feature is here! Try out our new experimental light mode in the settings.
  • Rosetta support for Apple Silicon: Build AMD64 binaries near the same speed as ARM64 binaries.
  • Kubernetes improvements: Check out our new Node and Volume pages for Kubernetes.
  • Improved UI: In addition to our light mode, you'll notice updates to our container listing page.
  • Increased manifest support: Images built as a manifest are now grouped together.

Podman Desktop 1.11 is now available. Click here to download it!

Podman Desktop 1.10 Release

· 5 min read
Tim deBoer
Architect

Podman Desktop 1.10 Release! 🎉

Podman-desktop-1-10-hero

This release introduces:

  • 1 Million Downloads!: Wow, we made it!
  • Extension Catalog: Redesigned extensions page and catalog to get the most out of Podman Desktop.
  • Podman 5: Podman 5.0.2 now recommended for all users.
  • Multi-platform Builds: Build for multiple platforms at once.
  • Extension API Improvements: Additional updates to the extension API used by 🦭 Podman Desktop's extensions.

Podman Desktop 1.10 is now available. Click here to download it!

Podman Desktop 1.9 Release

· 7 min read
Florent Benoit
Principal Software Engineer

Podman Desktop 1.9 Release! 🎉

Podman-desktop-1-9-hero

This release introduces: 🦭 a splash of innovation, a wave of excitement, and an ocean of possibilities!

  • Podman 5! Podman 5.0.1 for new users (and as an experimental upgrade for 4.x users).
  • Podman 4.9.4: Podman 4.9.4 is now included in both Windows and macOS installers.
  • Backup/Restore Images: Save images or containers to tar archives and restore them.
  • Kubernetes Pods Terminal: Connect to a terminal within Kubernetes pods.
  • Extension API Improvements: Additional updates to the extension API used by 🦭 Podman Desktop's extensions.

Podman Desktop 1.9 is now available. Click here to download it!

Podman Desktop Wins 2024 DEVIES Award

· 2 min read
Cedric Clyburn
Developer Advocate

We’re honored to announce that Podman Desktop has been recognized with the prestigious 2024 DEVIES Award in the category of Containers & Kubernetes. This award is a testimony to the effectiveness of the Podman Desktop team and greater open-source community's efforts to help developers. Podman Desktop increases developer container workflow efficiency as well as provides an easy transition of applications from containers to Kubernetes, the leading open-source container orchestration platform.

“While Podman Desktop only went into general availability last year, the community response has been very impressive and incredibly gratifying. We are extremely proud to receive this outstanding recognition which celebrates passion, commitment and innovation for shaping the future of container development backed by the vibrant open-source standards that Red Hat supports. ” said Stévan Le Meur, Product Manager on the Podman Desktop team.

hero

What are the DEVIES awards?

The DEVIES Awards, presented by DeveloperWeek, recognize the most innovative and impactful tools, platforms, and technologies in the software development community. Podman Desktop's win as the best innovation in Containers & Kubernetes highlights its significant impact on the industry and its role in revolutionizing the way developers build, ship, and run their applications. DEVIES Award winners are selected from hundreds of nominees by the independent, industry-leading DevNetwork Advisory Board.

Join us in celebrating!

We’re excited to be receiving this award on stage at DeveloperWeek 2024, happening on February 21-23, 2024, in Oakland, CA and February 27-29, 2024 (Virtually). In addition, Red Hat developer advocate Cedric Clyburn will be presenting a session on Podman Desktop, titled “Going from Containers, to Pods, to Kubernetes – Help for Your Developer Environments!”, with a full presentation on Podman, a demonstration of the Podman Desktop experience, and a multi-tier application going from containers, to pods, to finally Kubernetes!

Finally, it would be seal-y to not include and acknowledge that this award was earned by the entire Podman Desktop community of contributors! We also thank the DevNetwork Advisory Board and DeveloperWeek for this honorable award, and for the opportunity to share Podman Desktop's innovations with the greater developer community.

Share your local podman images with the Kubernetes cluster

· 8 min read
Florent Benoit
Principal Software Engineer

As developers we constantly improve and refine our applications. One of the challenges we face is quickly iterating when working with container images and kubernetes deployments/pods.

For example, when we want to try a new image in a kubernetes pod, this image needs to be available on a private/public registry or on the nodes of the kubernetes cluster. Sometimes we need to call extra commands such as kind load docker-image or minikube cache add <image> or publish the image first to a 3rd party registry.

You'll agree that trying out a new image in a Kubernetes pod should be as seamless as building the image itself.

In this blog post, we will explore the best practice for streamlining the image iteration process in Kubernetes with Podman Desktop.

hero