on networkendpoints help sign in
docker-hs/examples/Example.hs
64 lines 2.6 kB history raw
1import Docker.Client
3runNginxContainer :: IO ContainerID
4runNginxContainer = 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
16stopNginxContainer :: ContainerID -> IO ()
17stopNginxContainer 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 ()
25runPostgresContainer :: IO ContainerID
26runPostgresContainer = 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
39-- | Example of how we can start a database container while hosting it's
40-- data in a data volume living inside another container.
41runPostgresWithDataContainer :: IO ContainerID
42runPostgresWithDataContainer = 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