mirror of
https://github.com/ilyakooo0/docker-hs.git
synced 2024-09-11 10:35:29 +03:00
According to this it makes sense to just put in the year the software was initially released. And not have to update the year in the licence every time. http://www.contentious.com/2007/01/07/copyright-notice-is-the-year-really-necessary/
120 lines
3.5 KiB
Haskell
120 lines
3.5 KiB
Haskell
{-# LANGUAGE ExplicitForAll #-}
|
|
{-# LANGUAGE ScopedTypeVariables #-}
|
|
|
|
{-|
|
|
Module : Docker.Client
|
|
Copyright : (c) Deni Bertovic, 2014
|
|
License : BSD3
|
|
Maintainer : deni@denibertovic.com
|
|
Stability : experimental
|
|
Portability : POSIX
|
|
|
|
= Getting started
|
|
|
|
Creating a container:
|
|
|
|
We're going to create a nginx container and we're going to map port @80@ from within the container to port @8000@ on
|
|
the host.
|
|
|
|
@
|
|
import Docker.Client
|
|
|
|
runNginxContainer :: IO ContainerID
|
|
runNginxContainer = do
|
|
h <- defaultHttpHandler
|
|
runDockerT (defaultClientOpts, h) $ do
|
|
let pb = PortBinding 80 TCP [HostPort "0.0.0.0" 8000]
|
|
let myCreateOpts = addPortBinding pb $ defaultCreateOpts "nginx:latest"
|
|
cid <- createContainer myCreateOpts
|
|
case cid of
|
|
Left err -> error $ show err
|
|
Right i -> do
|
|
_ <- startContainer defaultStartOpts i
|
|
return i
|
|
@
|
|
|
|
Let's start out nginx container:
|
|
|
|
>>> cid <- runNginxContainer
|
|
|
|
|
|
Visit http://localhost:8000 and verify that nginx is running.
|
|
|
|
Let's stop the container now:
|
|
|
|
@
|
|
stopNginxContainer :: ContainerID -> IO ()
|
|
stopNginxContainer cid = do
|
|
h <- defaultHttpHandler
|
|
runDockerT (defaultClientOpts, h) $ do
|
|
r <- stopContainer DefaultTimeout cid
|
|
case r of
|
|
Left err -> error "I failed to stop the container"
|
|
Right _ -> return ()
|
|
@
|
|
|
|
>>> stopNginxContainer cid
|
|
|
|
Let's start a Postgres container by mapping the \/tmp directory from within the container to the
|
|
\/tmp directory on the host. That way we make sure that the data we write to \/tmp in the container will
|
|
persist on the host file system.
|
|
|
|
@
|
|
runPostgresContainer :: IO ContainerID
|
|
runPostgresContainer = do
|
|
h <- defaultHttpHandler
|
|
runDockerT (defaultClientOpts, h) $ do
|
|
let pb = PortBinding 5432 TCP [HostPort "0.0.0.0" 5432]
|
|
let myCreateOpts = addBinds [Bind "\/tmp" "\/tmp" Nothing] $ addPortBinding pb $ defaultCreateOpts "postgres:9.5"
|
|
cid <- createContainer myCreateOpts
|
|
case cid of
|
|
Left err -> error $ show err
|
|
Right i -> do
|
|
_ <- startContainer defaultStartOpts i
|
|
return i
|
|
@
|
|
|
|
= Get Docker API Version
|
|
|
|
>>> h <- defaultHttpHandler
|
|
>>> runDockerT (defaultClientOpts, h) $ getDockerVersion
|
|
Right (DockerVersion {version = "1.12.0", apiVersion = "1.24", gitCommit = "8eab29e", goVersion = "go1.6.3", os = "linux", arch = "amd64", kernelVersion = "4.6.0-1-amd64", buildTime = "2016-07-28T21:46:40.664812891+00:00"})
|
|
|
|
= Setup SSL Authentication
|
|
|
|
Let's create a custom 'HttpHandler' that uses a client's certificate and private key for SSL authentication.
|
|
It also accepts a self-signed CA certificate which is specified via 'clientParamsSetCA'.
|
|
This handler can replace 'defaultHttpHandler' in the arguments to 'runDockerT'.
|
|
|
|
@
|
|
let host = "domain.name"
|
|
let port = fromInteger 4000
|
|
let privKey = "path\/to\/private\/key"
|
|
let cert = "path\/to\/certificate"
|
|
let ca = "path\/to\/CA"
|
|
paramsE <- clientParamsWithClientAuthentication host port privKey cert
|
|
case paramsE of
|
|
Left err ->
|
|
error err
|
|
Right params' -> do
|
|
params <- clientParamsSetCA params' ca
|
|
settings <- HTTP.mkManagerSettings (TLSSettings params) Nothing
|
|
manager <- newManager settings
|
|
return $ httpHandler manager
|
|
@
|
|
|
|
|
|
-}
|
|
module Docker.Client (
|
|
-- * Client functions
|
|
module Docker.Client.Api
|
|
-- * Types
|
|
, module Docker.Client.Types
|
|
-- * Http
|
|
, module Docker.Client.Http
|
|
) where
|
|
|
|
import Docker.Client.Api
|
|
import Docker.Client.Http
|
|
import Docker.Client.Types
|