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