{"id":17817165,"url":"https://github.com/030/dip","last_synced_at":"2025-03-18T03:31:35.081Z","repository":{"id":45984048,"uuid":"219571931","full_name":"030/dip","owner":"030","description":"Docker Image Patrol (DIP) is a tool that returns the latest version of a docker image using a regular expression.","archived":false,"fork":false,"pushed_at":"2024-04-14T08:08:07.000Z","size":256,"stargazers_count":5,"open_issues_count":15,"forks_count":6,"subscribers_count":3,"default_branch":"main","last_synced_at":"2024-04-14T16:18:10.972Z","etag":null,"topics":["cli","devops","devops-tools","docker","docker-image","docker-registry","go","golang","kubernetes","openshift","tags","versions"],"latest_commit_sha":null,"homepage":"https://dip.releasesoftwaremoreoften.com/","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/030.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2019-11-04T18:43:07.000Z","updated_at":"2024-04-16T07:41:22.407Z","dependencies_parsed_at":"2024-04-16T07:41:01.999Z","dependency_job_id":null,"html_url":"https://github.com/030/dip","commit_stats":null,"previous_names":[],"tags_count":37,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/030%2Fdip","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/030%2Fdip/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/030%2Fdip/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/030%2Fdip/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/030","download_url":"https://codeload.github.com/030/dip/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243897073,"owners_count":20365499,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","devops","devops-tools","docker","docker-image","docker-registry","go","golang","kubernetes","openshift","tags","versions"],"created_at":"2024-10-27T16:41:01.242Z","updated_at":"2025-03-18T03:31:34.678Z","avatar_url":"https://github.com/030.png","language":"Go","readme":"# DIP\n\n[![CI](https://github.com/030/dip/workflows/Go/badge.svg?event=push)](https://github.com/030/dip/actions?query=workflow%3AGo)\n[![GoDoc Widget]][godoc]\n![GitHub go.mod Go version](https://img.shields.io/github/go-mod/go-version/030/dip?logo=go)\n[![Go Report Card](https://goreportcard.com/badge/github.com/030/dip)](https://goreportcard.com/report/github.com/030/dip)\n[![StackOverflow SE Questions](https://img.shields.io/stackexchange/stackoverflow/t/dip.svg?logo=stackoverflow)](https://stackoverflow.com/tags/dip)\n[![DevOps SE Questions](https://img.shields.io/stackexchange/devops/t/dip.svg?logo=stackexchange)](https://devops.stackexchange.com/tags/dip)\n[![ServerFault SE Questions](https://img.shields.io/stackexchange/serverfault/t/dip.svg?logo=serverfault)](https://serverfault.com/tags/dip)\n[![Docker Pulls](https://img.shields.io/docker/pulls/utrecht/dip?logo=docker\u0026logoColor=white)](https://hub.docker.com/r/utrecht/dip)\n![Docker Image Size (latest semver)](https://img.shields.io/docker/image-size/utrecht/dip?logo=docker\u0026logoColor=white\u0026sort=semver)\n![Issues](https://img.shields.io/github/issues-raw/030/dip.svg)\n![Pull requests](https://img.shields.io/github/issues-pr-raw/030/dip.svg)\n![Total downloads](https://img.shields.io/github/downloads/030/dip/total.svg)\n![GitHub forks](https://img.shields.io/github/forks/030/dip?label=fork\u0026style=plastic)\n![GitHub watchers](https://img.shields.io/github/watchers/030/dip?style=plastic)\n![GitHub stars](https://img.shields.io/github/stars/030/dip?style=plastic)\n![License](https://img.shields.io/github/license/030/dip.svg)\n![Repository Size](https://img.shields.io/github/repo-size/030/dip.svg)\n![Contributors](https://img.shields.io/github/contributors/030/dip.svg)\n![Commit activity](https://img.shields.io/github/commit-activity/m/030/dip.svg)\n![Last commit](https://img.shields.io/github/last-commit/030/dip.svg)\n![Release date](https://img.shields.io/github/release-date/030/dip.svg)\n[![GitHub release (latest SemVer)](https://img.shields.io/github/v/release/030/dip?logo=github\u0026sort=semver)](https://github.com/030/dip/releases/latest)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=030_dip\u0026metric=bugs)](https://sonarcloud.io/dashboard?id=030_dip)\n[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=030_dip\u0026metric=code_smells)](https://sonarcloud.io/dashboard?id=030_dip)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=030_dip\u0026metric=coverage)](https://sonarcloud.io/dashboard?id=030_dip)\n[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=030_dip\u0026metric=duplicated_lines_density)](https://sonarcloud.io/dashboard?id=030_dip)\n[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=030_dip\u0026metric=ncloc)](https://sonarcloud.io/dashboard?id=030_dip)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=030_dip\u0026metric=sqale_rating)](https://sonarcloud.io/dashboard?id=030_dip)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=030_dip\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=030_dip)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=030_dip\u0026metric=reliability_rating)](https://sonarcloud.io/dashboard?id=030_dip)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=030_dip\u0026metric=security_rating)](https://sonarcloud.io/dashboard?id=030_dip)\n[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=030_dip\u0026metric=sqale_index)](https://sonarcloud.io/dashboard?id=030_dip)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=030_dip\u0026metric=vulnerabilities)](https://sonarcloud.io/dashboard?id=030_dip)\n[![codecov](https://codecov.io/gh/030/dip/branch/main/graph/badge.svg)](https://codecov.io/gh/030/dip)\n[![GolangCI](https://golangci.com/badges/github.com/golangci/golangci-web.svg)](https://golangci.com/r/github.com/030/dip)\n[![Chocolatey](https://img.shields.io/chocolatey/dt/dip)](https://chocolatey.org/packages/dip)\n[![dip](https://snapcraft.io//dip/badge.svg)](https://snapcraft.io/dip)\n[![codebeat badge](https://codebeat.co/badges/f4aa5086-a4d5-41cd-893a-5da816ee9107)](https://codebeat.co/projects/github-com-030-dip-main)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits\u0026logoColor=white)](https://conventionalcommits.org)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n\n[godoc]: https://godoc.org/github.com/030/dip\n[godoc widget]: https://godoc.org/github.com/030/dip?status.svg\n\n\u003ca href=\"https://dip.releasesoftwaremoreoften.com\"\u003e\\\n\u003cimg src=\"https://github.com/030/dip/raw/main/assets/logo/logo.png\" width=\"100\"\u003e\u003c/a\u003e\n\nDocker Image Patrol (DIP) keeps docker images up-to-date.\n\n## Installation\n\nKeep Docker Images Up To Date (KDIUTD)\n\n```bash\nsudo snap install kdiutd\n```\n\n## Usage\n\n```bash\nUsage:\n  dip [flags]\n  dip [command]\n\nAvailable Commands:\n  help        Help about any command\n  image       A brief description of your command\n\nFlags:\n      --configCredHome string   config and cred file home directory (default is $HOME/.dip)\n      --debug                   debugging mode\n  -h, --help                    help for dip\n  -v, --version                 version for dip\n\nUse \"dip [command] --help\" for more information about a command.\n```\n\n## k8s\n\nCreate a `~/.dip/config.yml` file:\n\n```bash\ndip_images:\n  docker.io/alpine: 3\\.[0-9]+\\.[0-9]+\n  elastic/elasticsearch: 7\\.[0-9]+\\.[0-9]+\n  fluent/fluentd-kubernetes-daemonset: v.*-debian-elasticsearch7-.*\n  grafana/grafana: 7\\.[0-9]+\\.[0-9]+\n  docker.io/kibana: 7\\.[0-9]+\\.[0-9]+\n  kubernetesui/dashboard: v2\\.[0-9]+\\.[0-9]+\n  kubernetesui/metrics-scraper: v1\\.[0-9]+\\.[0-9]+\n  docker.io/mongo: 4\\.[0-9]+\\.[0-9]+\n  docker.io/postgres: 13\\.[0-9]+\\.[0-9]+\n  prom/alertmanager: v0\\.[0-9]+\\.[0-9]+\n  prom/prometheus: v2\\.[0-9]+\\.[0-9]+\n  prom/pushgateway: v1\\.[0-9]+\\.[0-9]+\n  sonatype/nexus3: 3\\.[0-9]+\\.[0-9]+\n```\n\nand create a `~/.dip/creds.yml` file:\n\n```bash\nslack_channel_id: someSlackChannelID\nslack_token: some-token\n```\n\nor for k8s:\n\n```bash\napiVersion: v1\nkind: ConfigMap\nmetadata:\n  name: dip\n  namespace: dip\ndata:\n  config.yml: |-\n    ---\n    dip_images:\n      docker.io/alpine: 3\\.[0-9]+\\.[0-9]+\n      elastic/elasticsearch: 7\\.[0-9]+\\.[0-9]+\n```\n\nand\n\n```bash\napiVersion: v1\nkind: Secret\nmetadata:\n  name: dip\n  namespace: dip\nstringData:\n  creds.yml: |-\n    ---\n    slack_channel_id: some-id\n    slack_token: some-token\n```\n\nNote: follow these steps to create\n[a Slack Token](https://github.com/030/sasm#create-a-slack-token).\n\n## latest\n\n### alpine\n\n```bash\ndip image --name=alpine --regex=\"(\\d+\\.){2}\\d\"\n```\n\n### minio\n\n```bash\ndip image --name=minio/minio --regex=\"RELEASE\\.2019.*\"\n```\n\n### nexus\n\n```bash\ndip image --name=sonatype/nexus3 --regex=\"(\\d+\\.){2}\\d\"\n```\n\n### nginx\n\n```bash\ndip image --name=nginx --regex=\".*(\\d+\\.){2}\\d-alpine$\"\n```\n\n### sonarqube\n\n```bash\ndip image --name=sonarqube --regex=\".*-community$\"\n```\n\n### traefik\n\n```bash\ndip image --name=traefik --regex=\"^v(\\d+\\.){1,2}\\d+$\"\n```\n\n### ubuntu\n\n```bash\ndip image --name=ubuntu --regex=\"^xenial.*\"\n```\n\n## dockerfile\n\nUse `-dockerfile` to check whether the image that is defined in the `FROM`\nshould be updated. If the command is run in the Continuous Integration (CI),\nthe pipeline will fail as an exit 1 is returned if an image is outdated.\n\n### golang\n\n```bash\ndip image --name=golang --regex=\"([0-9]+\\.){2}[0-9]+$\" --dockerfile\n```\n\n### adoptopenjdk\n\n```bash\ndip image --name=adoptopenjdk --regex=\"14.*-jre-hotspot-bionic\" --dockerfile\n```\n\n## docker\n\n[![dockeri.co](https://dockeri.co/image/utrecht/dip)](https://hub.docker.com/r/utrecht/dip)\n\n```bash\ndocker run utrecht/dip:4.2.3 dip image --name=grafana/grafana --regex=^7\\.5\\.7$\n```\n\nwill return:\n\n```bash\n7.5.7\n```\n\n## updateDockerfile\n\nUse the `--updateDockerfile` to check and update the image that is defined in\nthe `FROM` inside a Dockerfile.\n\n### golang alpine builder\n\n```bash\ndip image --name=golang --regex=\"^([0-9]+\\.){2}[0-9]-alpine([0-9]+\\.)[0-9]{2}$\" --updateDockerfile\n```\n\n## quay\n\n```bash\ndip image --name=prometheus/prometheus --regex=\"^v2(\\.[0-9]+){2}$\" --quayIo\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F030%2Fdip","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F030%2Fdip","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F030%2Fdip/lists"}