https://github.com/minhtuannguyen/cljocker
A simple DSL to build Dockerfile
https://github.com/minhtuannguyen/cljocker
clojure docker dockerfile dockerfiles dsl infrastructure infrastructure-as-code
Last synced: 4 months ago
JSON representation
A simple DSL to build Dockerfile
- Host: GitHub
- URL: https://github.com/minhtuannguyen/cljocker
- Owner: minhtuannguyen
- License: apache-2.0
- Created: 2016-07-08T11:24:25.000Z (almost 10 years ago)
- Default Branch: master
- Last Pushed: 2018-09-05T08:00:11.000Z (almost 8 years ago)
- Last Synced: 2025-06-30T11:52:01.368Z (12 months ago)
- Topics: clojure, docker, dockerfile, dockerfiles, dsl, infrastructure, infrastructure-as-code
- Language: Clojure
- Homepage: https://github.com/minhtuannguyen/cljocker
- Size: 26.4 KB
- Stars: 4
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# cljocker
[](https://travis-ci.org/minhtuannguyen/cljocker)
[](https://coveralls.io/github/minhtuannguyen/cljocker?branch=master)
[](https://versions.deps.co/minhtuannguyen/cljocker)
[](https://versions.deps.co/minhtuannguyen/cljocker)
[](https://clojars.org/minhtuannguyen/cljocker)
A simple DSL to define and generate Dockerfile
## Examples
To generate a Dockerfile from spec:
```clojure
(:require [cljocker.hh.dsl.docker :as d])
(defn- heap [heap] (str "-Xmx=" heap "m "))
(defn- port [port] (str "-Dport=" port))
(-> [:from "java:8"
:run (lazy-seq ["mkdir" "-p" "/var/opt/folder"])
:user "nobody"
:add ["from" "to"]
:workdir "/var/opt/folder"
:cmd ["java" (heap 512) (port 512) ["-jar" "artifact.jar"]]]
(d/new-dockerfile)
(d/write! "path/to/dockerfile"))
```
The content of the generated Dockerfile will be:
```shell
FROM java:8
RUN mkdir -p /var/opt/folder
USER nobody
ADD from to
WORKDIR /var/opt/folder
CMD java -Xmx=512m -Dport=512 -jar artifact.jar
```
To validate a dockerfile spec:
```clojure
(:require [cljocker.hh.dsl.docker :as d])
(is (= [:valid]
(-> [:from "image" :cmd "echo"]
(d/new-dockerfile)
(d/validate))))
(is (= [:invalid "first instruction must be FROM"]
(-> [:cmd "echo"]
(d/new-dockerfile)
(d/validate))))
```
## License
Copyright © 2016
Distributed under the Eclipse Public License