Files
dokku/docs/deployment/dockerfiles.md
Jose Diaz-Gonzalez 9010bc8fa4 Flesh out initial application deployment docs
- Move some docs to nginx and checks pages
- Flesh out dockerfiles and image tagging documentation a bit on their own pages
2015-10-14 05:20:20 -04:00

38 lines
2.1 KiB
Markdown

# Dockerfile Deployment
> New as of 0.3.15
While dokku normally defaults to using [heroku buildpacks](https://devcenter.heroku.com/articles/buildpacks) for deployment, you can also use docker's native `Dockerfile` system to define a container.
To use a dockerfiles for deployment, commit a valid `Dockerfile` to the root of your repository and push the repository to your Dokku installation. If this file is detected, Dokku will default to using it to construct containers **except** in the following two cases:
- The application has a `BUILDPACK_URL` environment variable set via the `dokku config:set` command or in a committed `.env` file. In this case, dokku will use your specified buildpack.
- The application has a `.buildpacks` file in the root of the repository. In this case, dokku will use your specified buildpack(s).
## Exposed ports
By default, Dokku will extract the first `EXPOSE` port and use said port with nginx to proxy your app to that port. For applications that have multiple ports exposed, you may override this port via the following command:
```shell
# replace APP with the name of your application
dokku config:set APP DOKKU_DOCKERFILE_PORT=8000
```
Dokku will not expose other ports on your application without a [custom docker-option](/dokku/configuration/docker-options/).
By default no arguments are passed to `docker run` when deploying the container and the `CMD` or `ENTRYPOINT` defined in the `Dockerfile` are executed. You can take advantage of docker ability of overriding the `CMD` or passing parameters to your `ENTRYPOINT` setting `$DOKKU_DOCKERFILE_START_CMD`. Let's say for example you are deploying a base nodejs image, with the following `ENTRYPOINT`:
```
ENTRYPOINT ["node"]
```
You can do:
```
dokku config:set DOKKU_DOCKERFILE_START_CMD="--harmony server.js"
```
To tell docker what to run.
Setting `$DOKKU_DOCKERFILE_CACHE_BUILD` to `true` or `false` will enable or disable docker's image layer cache. Lastly, for more granular build control, you may also pass any `docker build` option to `docker`, by setting `$DOKKU_DOCKER_BUILD_OPTS`.