Docker Image Tag Deployment
Introduced in 0.4.0
The Dokku tags plugin allows you to add Docker image tags to the currently deployed app image for versioning and subsequent deployment.
dokku ps:rebuild APP on an application deployed via the
tags plugin, the following may occur:
- Applications previously deployed via another method (
tar): The application may revert to a state before the latest custom image tag was deployed.
- Applications that were only ever deployed via the
tagsplugin: No action will be taken against your application.
Please use the
tags:deploy command when redeploying an application deployed via Docker image.
See the port management documentation.
Listing tags for an application
For example, you can list all tags for a given application:
Creating a tag
You can also create new tags for that app using the
tags:create function. Tags should conform to the Docker tagging specification for your Docker version. As of 1.10, that specification is available here, while users of older versions can check the documentation here.
Once the tag is created, you can see the output by running the
tags command again.
Deploying an image tag
Finally, you can also deploy a local image using the
tags:deploy command. When specifying a tag that is not
latest, the released image will be retagged as the
latest image tag for the app.
For images based on Herokuish, using the
tags:deploy command will reset environment variables written into the image, causing a retag to occur. This will - on average - add two extra layers to your deployed image. Note that this does not affect Dockerfile-based images, which are the majority of images deployed via the
-----> Releasing node-js-app (dokku/node-js-app:v1)... -----> Deploying node-js-app (dokku/node-js-app:v1)... -----> Running pre-flight checks For more efficient zero downtime deployments, create a file CHECKS. See http://dokku.viewdocs.io/dokku/deployment/zero-downtime-deploys/ for examples CHECKS file not found in container: Running simple container check... -----> Waiting for 10 seconds ... -----> Default container check successful! =====> node-js-app container output: Detected 512 MB available memory, 512 MB limit per process (WEB_MEMORY) Recommending WEB_CONCURRENCY=1 > firstname.lastname@example.org start /app > node index.js Node app is running at localhost:5000 =====> end node-js-app container output -----> Running post-deploy -----> Configuring node-js-app.dokku.me... -----> Creating http nginx.conf -----> Running nginx-pre-reload Reloading nginx -----> Shutting down old containers in 60 seconds =====> 025eec3fa3b442fded90933d58d8ed8422901f0449f5ea0c23d00515af5d3137 =====> Application deployed: http://node-js-app.dokku.me
Deploying from a Docker registry
You can alternatively add image pulled from a Docker registry and deploy from it by using tagging feature. In this example, we are deploying from Docker Hub.
Create Dokku app as usual.
Pull image from Docker Hub.
Retag the image to match the created app.
Deploying an image from CI
To ensure your builds are always reproducible, it's considered bad practice to store build artifacts in your repository. For some projects however, building artifacts during deployment to Dokku may affect the performance of running applications.
One solution is to build a finished Docker image on a CI service (or even locally) and deploy it directly to the host running Dokku.
Build image on CI (or locally).
Deploy image to Dokku host.
You can also use a Docker registry to push and pull the image rather than uploading it directly.
Here's a more complete example using the above method: