Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (ns docker
- (:require [clojure.string :as string]
- [me.raynes.conch :as sh]))
- (sh/programs docker)
- (defn endpoint-port!
- "Retrieve the docker port for the \"name\" docker service, nil if it
- cannot be fetched. It always returns the first port in
- NetworkSettings.Ports."
- [name]
- (let [{:keys [stdout exit-code]} (docker "inspect" "--format" "{{ .NetworkSettings.Ports }}"
- name
- {:verbose true
- :throw false})]
- (when (= 0 @exit-code)
- (first (re-seq #"[0-9]+" stdout)))))
- (defn endpoint-with-port!
- "Retrieve the endpoint for the \"name\" service, nil if it cannot be
- fetched. It adds the port after the classical \":\""
- [name]
- (let [{:keys [stdout exit-code]} (docker "inspect" "--format" "{{ .NetworkSettings.IPAddress }}"
- name
- {:verbose true
- :throw false
- :seq true})
- port (endpoint-port! name)]
- (when (and port (= 0 @exit-code))
- (str (first stdout) ":" port))))
- (defn postgres!
- [db-name]
- (let [{exit-code :exit-code} (docker "run" "-d"
- "--name" "postgres"
- "-e" (str "POSTGRES_DB=" db-name)
- "postgres:9.5.3"
- {:verbose true :throw true})]
- (when (= 0 @exit-code)
- (println "Postgres container created and running at %s \n" (endpoint-with-port! "postgres")))))
- ;; (defn postgres!
- ;; [{:keys [user psw db]}]
- ;; (let [{exit-code :exit-code} (docker "run" "-d"
- ;; "--name" "postgres"
- ;; "-e" (str "POSTGRES_PASSWORD=" psw)
- ;; "-e" (str "POSTGRES_USER=" user)
- ;; "-e" (str "POSTGRES_DB=" db)
- ;; "postgres:9.5.3"
- ;; {:verbose true :throw true})]
- ;; (when (= 0 @exit-code)
- ;; (util/info "Postgres container created and running at %s \n" (endpoint-with-port! "postgres")))))
- (defn elasticsearch!
- [docker opts]
- (let [{exit-code :exit-code} (docker "run" "-d"
- "--name" "elasticsearch"
- "elasticsearch:2.3.3"
- {:verbose true :throw true})]
- (when (= 0 @exit-code)
- (println "Elasticsearch container created and running at %s\n" (endpoint-with-port! "elasticsearch")))))
- (defn start!
- [name]
- (let [{exit-code :exit-code} (docker "start" name {:verbose true :throw true})]
- (when (= 0 @exit-code)
- (println (str (string/capitalize name) " is now running at %s\n") (endpoint-with-port! name)))))
- (defn running?
- [name]
- (every? #{"true"} (docker "inspect" "--format" "{{ .State.Running }}" name {:throw false :seq true})))
- (defn container?
- [name]
- (every? #{""} (docker "inspect" "--format" "{{ .State }}" name {:throw false :seq true})))
- (defn start-if-not-running!
- [name]
- (if-not (docker/running? name)
- (docker/start! name)
- (println (str (string/capitalize name) " is now running at %s\n") (endpoint-with-port! name))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement