@@ -1,55 +1,64 @@
1import Docker.Client
1import Docker.Client
3runNginxContainer :: IO ContainerID
3runNginxContainer :: IO ContainerID
5+ h <- defaultHttpHandler
4−runNginxContainer = runDockerT (defaultClientOpts, defaultHttpHandler) $ do
6+ runDockerT (defaultClientOpts, h) $
5− let pb = PortBinding 80 TCP [HostPort "0.0.0.0" 8000]
7+ do let pb = PortBinding 80 TCP [HostPort "0.0.0.0" 8000]
6− let myCreateOpts = addPortBinding pb $ defaultCreateOpts "nginx:latest"
8+ let myCreateOpts = addPortBinding pb $ defaultCreateOpts "nginx:latest"
7− cid <- createContainer myCreateOpts (Just "myNginxContainer")
9+ cid <- createContainer myCreateOpts (Just "myNginxContainer")
8− case cid of
10+ case cid of
9− Left err -> error $ show err
11+ Left err -> error $ show err
10− Right i -> do
12+ Right i -> do
11− _ <- startContainer defaultStartOpts i
13+ _ <- startContainer defaultStartOpts i
14stopNginxContainer :: ContainerID -> IO ()
16stopNginxContainer :: ContainerID -> IO ()
17+stopNginxContainer cid = do
18+ h <- defaultHttpHandler
15−stopNginxContainer cid = runDockerT (defaultClientOpts, defaultHttpHandler) $ do
19+ runDockerT (defaultClientOpts, h) $
16− r <- stopContainer DefaultTimeout cid
20+ do r <- stopContainer DefaultTimeout cid
17− case r of
21+ case r of
18− Left _ -> error "I failed to stop the container"
22+ Left _ -> error "I failed to stop the container"
19− Right _ -> return ()
23+ Right _ -> return ()
21runPostgresContainer :: IO ContainerID
25runPostgresContainer :: IO ContainerID
26+runPostgresContainer = do
27+ h <- defaultHttpHandler
22−runPostgresContainer = runDockerT (defaultClientOpts, defaultHttpHandler) $ do
28+ runDockerT (defaultClientOpts, h) $
23− let pb = PortBinding 5432 TCP [HostPort "0.0.0.0" 5432]
29+ do let pb = PortBinding 5432 TCP [HostPort "0.0.0.0" 5432]
24− let b = Bind "/tmp" "/tmp" Nothing
30+ let b = Bind "/tmp" "/tmp" Nothing
25− let myCreateOpts = addBind b $ addPortBinding pb $ defaultCreateOpts "postgres:9.5"
31+ let myCreateOpts = addBind b $ addPortBinding pb $ defaultCreateOpts "postgres:9.5"
26− cid <- createContainer myCreateOpts Nothing
32+ cid <- createContainer myCreateOpts Nothing
27− case cid of
33+ case cid of
28− Left err -> error $ show err
34+ Left err -> error $ show err
29− Right i -> do
35+ Right i -> do
30− _ <- startContainer defaultStartOpts i
36+ _ <- startContainer defaultStartOpts i
33-- | Example of how we can start a database container while hosting it's
39-- | Example of how we can start a database container while hosting it's
34-- data in a data volume living inside another container.
40-- data in a data volume living inside another container.
35runPostgresWithDataContainer :: IO ContainerID
41runPostgresWithDataContainer :: IO ContainerID
36−runPostgresWithDataContainer = runDockerT (defaultClientOpts, defaultHttpHandler) $ do
42+runPostgresWithDataContainer = do
43+ h <- defaultHttpHandler
44+ runDockerT (defaultClientOpts, h) $
37− -- We use a dummy command like /bin/true because we don't want to start
45+ -- We use a dummy command like /bin/true because we don't want to start
38− -- the postgres database in the data container we just want it to
46+ -- the postgres database in the data container we just want it to
39− -- create a container filesystem for us.
47+ -- create a container filesystem for us.
40− let dataOpts = setCmd "/bin/true" $ defaultCreateOpts "postgres:9.5"
48+ do let dataOpts = setCmd "/bin/true" $ defaultCreateOpts "postgres:9.5"
41− cid <- createContainer dataOpts (Just "myDataContainer")
49+ cid <- createContainer dataOpts (Just "myDataContainer")
42− _ <- case cid of
51+ case cid of
43− Left err -> error $ show err
52+ Left err -> error $ show err
44− Right i -> startContainer defaultStartOpts i
53+ Right i -> startContainer defaultStartOpts i
45− let pb = PortBinding 5432 TCP [HostPort "0.0.0.0" 5432]
54+ let pb = PortBinding 5432 TCP [HostPort "0.0.0.0" 5432]
46− -- Default permission is read-write if we don't specify anything
55+ -- Default permission is read-write if we don't specify anything
47− let vf = VolumeFrom "myDataContainer" Nothing
56+ let vf = VolumeFrom "myDataContainer" Nothing
48− let myCreateOpts = addVolumeFrom vf $ addPortBinding pb $ defaultCreateOpts "postgres:9.5"
57+ let myCreateOpts = addVolumeFrom vf $ addPortBinding pb $ defaultCreateOpts "postgres:9.5"
49− ccid <- createContainer myCreateOpts (Just "pgContainer")
58+ ccid <- createContainer myCreateOpts (Just "pgContainer")
50− case ccid of
59+ case ccid of
51− Left err -> error $ show err
60+ Left err -> error $ show err
52− Right i -> do
61+ Right i -> do
53− _ <- startContainer defaultStartOpts i
62+ _ <- startContainer defaultStartOpts i