217 lines
4.7 KiB
Plaintext
217 lines
4.7 KiB
Plaintext
---
|
|
description: |
|
|
The Packer Docker import post-processor takes an artifact from the docker
|
|
builder and imports it with Docker locally. This allows you to apply a
|
|
repository and tag to the image and lets you use the other Docker
|
|
post-processors such as docker-push to push the image to a registry.
|
|
page_title: Docker Import - Post-Processors
|
|
sidebar_title: Docker Import
|
|
---
|
|
|
|
# Docker Import Post-Processor
|
|
|
|
Type: `docker-import`
|
|
|
|
The Packer Docker import post-processor takes an artifact from the [docker
|
|
builder](/docs/builders/docker) and imports it with Docker locally. This
|
|
allows you to apply a repository and tag to the image and lets you use the
|
|
other Docker post-processors such as
|
|
[docker-push](/docs/post-processors/docker-push) to push the image to a
|
|
registry.
|
|
|
|
## Basic Example
|
|
|
|
<Tabs>
|
|
<Tab heading="JSON">
|
|
|
|
```json
|
|
{
|
|
"builders": [
|
|
{
|
|
"type": "docker",
|
|
"image": "ubuntu:18.04",
|
|
"export_path": "party_parrot.tar"
|
|
}
|
|
],
|
|
"post-processors": [
|
|
{
|
|
"type": "docker-import",
|
|
"repository": "local/ubuntu",
|
|
"tag": "latest"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
</Tab>
|
|
<Tab heading="HCL2">
|
|
|
|
```hcl
|
|
source "docker" "example" {
|
|
image = "ubuntu:18.04"
|
|
export_path = "party_parrot.tar"
|
|
}
|
|
|
|
build {
|
|
sources = [
|
|
"source.docker.example"
|
|
]
|
|
|
|
post-processor "docker-import" {
|
|
repository = "local/ubuntu"
|
|
tag = "latest"
|
|
}
|
|
}
|
|
```
|
|
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
## Configuration
|
|
|
|
The configuration for this post-processor only requires a `repository`, a `tag`
|
|
is optional.
|
|
|
|
### Required:
|
|
|
|
- `repository` (string) - The repository of the imported image.
|
|
|
|
### Optional:
|
|
|
|
- `tag` (string) - The tag for the imported image. By default this is not
|
|
set.
|
|
|
|
- `changes` (array of strings) - Dockerfile instructions to add to the
|
|
commit. Example of instructions are `CMD`, `ENTRYPOINT`, `ENV`, and
|
|
`EXPOSE`. Example: `[ "USER ubuntu", "WORKDIR /app", "EXPOSE 8080" ]`
|
|
|
|
- `keep_input_artifact` (boolean) - if true, do not delete the source tar
|
|
after importing it to docker. Defaults to false.
|
|
|
|
## Example
|
|
|
|
An example is shown below, showing only the post-processor configuration:
|
|
|
|
<Tabs>
|
|
<Tab heading="JSON">
|
|
|
|
```json
|
|
{
|
|
"type": "docker-import",
|
|
"repository": "hashicorp/packer",
|
|
"tag": "0.7"
|
|
}
|
|
```
|
|
|
|
</Tab>
|
|
<Tab heading="HCL2">
|
|
|
|
```hcl
|
|
post-processor "docker-import" {
|
|
repository = "hashicorp/packer"
|
|
tag = "0.7"
|
|
}
|
|
```
|
|
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
This example would take the image created by the Docker builder and import it
|
|
into the local Docker process with a name of `hashicorp/packer:0.7`.
|
|
|
|
Following this, you can use the
|
|
[docker-push](/docs/post-processors/docker-push) post-processor to push it
|
|
to a registry, if you want.
|
|
|
|
## Changing Metadata
|
|
|
|
Below is an example using the changes argument of the post-processor. This
|
|
feature allows the tarball metadata to be changed when imported into the Docker
|
|
environment. It is derived from the `docker import --change` command line
|
|
[option to
|
|
Docker](https://docs.docker.com/engine/reference/commandline/import/).
|
|
|
|
Example uses of all of the options, assuming one is building an NGINX image
|
|
from ubuntu as an simple example:
|
|
|
|
<Tabs>
|
|
<Tab heading="JSON">
|
|
|
|
```json
|
|
{
|
|
"type": "docker-import",
|
|
"repository": "local/centos6",
|
|
"tag": "latest",
|
|
"changes": [
|
|
"USER www-data",
|
|
"WORKDIR /var/www",
|
|
"ENV HOSTNAME www.example.com",
|
|
"VOLUME /test1 /test2",
|
|
"EXPOSE 80 443",
|
|
"LABEL version=1.0",
|
|
"ONBUILD RUN date",
|
|
"CMD [\"nginx\", \"-g\", \"daemon off;\"]",
|
|
"ENTRYPOINT /var/www/start.sh"
|
|
]
|
|
}
|
|
```
|
|
|
|
</Tab>
|
|
<Tab heading="HCL2">
|
|
|
|
```hcl
|
|
post-processor "docker-import" {
|
|
repository = "local/centos6"
|
|
tag = "latest"
|
|
changes = [
|
|
"USER www-data",
|
|
"WORKDIR /var/www",
|
|
"ENV HOSTNAME www.example.com",
|
|
"VOLUME /test1 /test2",
|
|
"EXPOSE 80 443",
|
|
"LABEL version=1.0",
|
|
"ONBUILD RUN date",
|
|
"CMD [\"nginx\", \"-g\", \"daemon off;\"]",
|
|
"ENTRYPOINT /var/www/start.sh",
|
|
]
|
|
}
|
|
```
|
|
|
|
</Tab>
|
|
</Tabs>
|
|
|
|
Allowed metadata fields that can be changed are:
|
|
|
|
- CMD
|
|
- String, supports both array (escaped) and string form
|
|
- EX: `"CMD [\"nginx\", \"-g\", \"daemon off;\"]"`
|
|
- EX: `"CMD nginx -g daemon off;"`
|
|
- ENTRYPOINT
|
|
- String
|
|
- EX: `"ENTRYPOINT /var/www/start.sh"`
|
|
- ENV
|
|
- String, note there is no equal sign:
|
|
- EX: `"ENV HOSTNAME www.example.com"` not
|
|
`"ENV HOSTNAME=www.example.com"`
|
|
- EXPOSE
|
|
- String, space separated ports
|
|
- EX: `"EXPOSE 80 443"`
|
|
- LABEL
|
|
- String, space separated key=value pairs
|
|
- EX: `"LABEL version=1.0"`
|
|
- ONBUILD
|
|
- String
|
|
- EX: `"ONBUILD RUN date"`
|
|
- MAINTAINER
|
|
- String, deprecated in Docker version 1.13.0
|
|
- EX: `"MAINTAINER NAME"`
|
|
- USER
|
|
- String
|
|
- EX: `"USER USERNAME"`
|
|
- VOLUME
|
|
- String
|
|
- EX: `"VOLUME FROM TO"`
|
|
- WORKDIR
|
|
- String
|
|
- EX: `"WORKDIR PATH"`
|