https://github.com/sourcegraph/godockerize
Build Docker images from Go packages
https://github.com/sourcegraph/godockerize
Last synced: 10 months ago
JSON representation
Build Docker images from Go packages
- Host: GitHub
- URL: https://github.com/sourcegraph/godockerize
- Owner: sourcegraph
- License: bsd-2-clause
- Fork: true (neelance/godockerize)
- Created: 2017-12-04T13:05:25.000Z (about 8 years ago)
- Default Branch: master
- Last Pushed: 2024-06-04T17:33:58.000Z (over 1 year ago)
- Last Synced: 2025-04-05T15:11:57.012Z (10 months ago)
- Language: Go
- Size: 39.1 KB
- Stars: 9
- Watchers: 10
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# godockerize
godockerize builds a Dockerfile for a given Go project. The base image uses
Alpine.
### Usage
```
$ godockerize build github.com/path/to/your/go/main
```
Will generate a Dockerfile, build a Go binary for that package, and then build
the Dockerfile with the Go binary.
Run `--help` to view the full list of options for customizing the program's
behavior.
### Build tags
godockerize supports a number of build tags that can be used to customize the
content of the generated Dockerfile. Add a `//docker:` comment line to
the package being built to customize the behavior. Here are the tags:
##### //docker:env
Adding this to your Go binary:
```go
//docker:env TZ=UTC
package main
```
Adds an ENV command to the dockerfile:
```
ENV TZ=UTC
```
##### //docker:expose
Expose the provided ports via an EXPOSE command
```go
//docker:expose 5000
```
##### //docker:install
Install the provided packages. In addition, if a package name ends with `@edge`,
the edge apk repositories will be added to `/etc/apk/repositories`.
```go
//docker:install git@edge openssh-client
```
Generates:
```
FROM alpine:3.8
RUN echo -e "@edge http://dl-cdn.alpinelinux.org/alpine/edge/main" >> /etc/apk/repositories
RUN echo -e "@edge http://dl-cdn.alpinelinux.org/alpine/edge/community" >> /etc/apk/repositories
RUN apk add --no-cache ca-certificates git@edge mailcap openssh-client tini
USER myuser
ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/mybinary"]
ADD mybinary /usr/local/bin/
```
##### //docker:repository
Can be used to add other repository versions. Note as a special case, the `edge`
repository is automatically added as part of the `docker:install` step for any
packages that end in `@edge`.
```go
//docker:repository v3.6
```
Will add these lines to the Dockerfile:
```
RUN echo -e "http://dl-cdn.alpinelinux.org/alpine/v3.6/main\n" >> /etc/apk/repositories && \
echo -e "http://dl-cdn.alpinelinux.org/alpine/v3.6/community\n" >> /etc/apk/repositories
```
##### //docker:run
Add custom commands to run in the Dockerfile.
```go
//docker:run apk add curl
```
##### //docker:user
Run commands in the Dockerfile as a custom user.
```go
//docker:user myuser
```
```
RUN addgroup -S myuser && adduser -S -G myuser -h /home/myuser myuser && mkdir -p /data/repos && chown -R myuser:myuser /data/repos
USER myuser
```
### Errata
Alpine base images had a security vulnerability where apk installing/unpacking
resources onto the filesystem could lead to RCE. That vulnerability has been
fixed in Alpine 3.8.1. `godockerize` uses a base image that includes the
security patch.