docker-composede 的使用

来源:互联网 发布:java wait 例子 编辑:程序博客网 时间:2024/05/29 09:03

今天要在我的本子上搭建一个mediawiki环境,之前的经验,用fig去配置是最简单的了。可是下载fig失败,去官网一看才知道,fig已经被compose工具取代了。原文是这样说的:

<code class="hljs oxygene has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">Fig <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">has</span> been replaced <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">by</span> Docker Compose, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">and</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> now <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">deprecated</span>. The <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">new</span> documentation <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">on</span> the Docker website.</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

既然如此,就去官网看看compose到底为何物。 
compose是用来在docker中定义和运行复杂应用的小工具,比如在一个文件中定义多个容器,只用一行命令就可以让一切就绪并运行。它的功能与我们所熟知的fig相似,换句话说,compose是fig的替代产品,fig就这样退出docker的历史舞台了。

然而在github上的compose有这样的说法:

<code class="hljs oxygene has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">Fig <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">has</span> been renamed <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> Docker Compose, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">or</span> just Compose <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> short. This <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">has</span> several implications <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> you:The command you <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">type</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">is</span> now docker-compose, <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">not</span> fig.You should rename your fig.yml <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">to</span> docker-compose.yml.</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li></ul>

看来fig是被重命名成compose了,配置文件变成了docker-compose.yml,其他都几乎一样。不但fig不能下载了,原来有fig工具的环境用fig去搭建mediawiki都不可用了,报错如下:

<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">fig up -dCreating hgserver_mediawiki_1...Pulling image amclain/hgweb...Traceback (most recent call <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">last</span>):  File <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"<string>"</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">3</span>, <span class="hljs-operator" style="box-sizing: border-box;">in</span> <module>  File <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/code/build/fig/out00-PYZ.pyz/fig.cli.main"</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">31</span>, <span class="hljs-operator" style="box-sizing: border-box;">in</span> main  File <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/code/build/fig/out00-PYZ.pyz/fig.cli.docopt_command"</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">21</span>, <span class="hljs-operator" style="box-sizing: border-box;">in</span> sys_dispatch  File <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/code/build/fig/out00-PYZ.pyz/fig.cli.command"</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">28</span>, <span class="hljs-operator" style="box-sizing: border-box;">in</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">dispatch</span>  File <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/code/build/fig/out00-PYZ.pyz/fig.cli.docopt_command"</span>, <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">line</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">24</span>, <span class="hljs-operator" style="box-sizing: border-box;">in</span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">dispatch</span>...fig.progress_stream.StreamOutputError: Get <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">https</span>://index.docker.io/v1/repositories/amclain/hgweb/images: dial tcp: lookup index.docker.io <span class="hljs-command" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">on</span> <span class="hljs-title" style="box-sizing: border-box;">10</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.202</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.72</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.118</span>:<span class="hljs-title" style="box-sizing: border-box;">53</span>: <span class="hljs-title" style="box-sizing: border-box;">read</span> <span class="hljs-title" style="box-sizing: border-box;">udp</span> <span class="hljs-title" style="box-sizing: border-box;">10</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.202</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.72</span><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">.118</span>:<span class="hljs-title" style="box-sizing: border-box;">53</span>: <span class="hljs-title" style="box-sizing: border-box;">i</span>/<span class="hljs-title" style="box-sizing: border-box;">o</span> <span class="hljs-title" style="box-sizing: border-box;">timeout</span></span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li></ul>

如此看来,使用compose是必须的了。 
下面说说compose的用法。 
1.安装compose 
OS X和64位的Linux用如下命令安装。

<code class="hljs vala has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># curl -L https://github.com/docker/compose/releases/download/1.1.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose</span><span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;">#chmod +x /usr/local/bin/docker-compose</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li></ul>

其他平台可以像python包一样安装:

<code class="hljs lasso has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">$ sudo pip install <span class="hljs-attribute" style="box-sizing: border-box;">-U</span> docker<span class="hljs-attribute" style="box-sizing: border-box;">-compose</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li></ul>

2.命令简介

<code class="hljs livecodeserver has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">$ docker-compose Fast, isolated development environments <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">using</span> Docker.Usage:  docker-compose [options] [COMMAND] [ARGS...]  docker-compose -h|<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">--help</span>Options:  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">--verbose                 Show more output</span>  <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">--version                 Print version and exit</span>  -f, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">--file FILE           Specify an alternate compose file (default: docker-compose.yml)</span>  -p, <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;">--project-name NAME   Specify an alternate project name (default: directory name)</span>Commands:  build     Build <span class="hljs-operator" style="box-sizing: border-box;">or</span> rebuild services  help      Get help <span class="hljs-command" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">on</span> <span class="hljs-title" style="box-sizing: border-box;">a</span> <span class="hljs-title" style="box-sizing: border-box;">command</span></span>  <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">kill</span>      Kill containers  logs      View output <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">from</span> containers  port      Print <span class="hljs-operator" style="box-sizing: border-box;">the</span> public port <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> <span class="hljs-operator" style="box-sizing: border-box;">a</span> port binding  ps        List containers  pull      Pulls service images  rm        Remove stopped containers  run       Run <span class="hljs-operator" style="box-sizing: border-box;">a</span> <span class="hljs-constant" style="box-sizing: border-box;">one</span>-off <span class="hljs-command" style="box-sizing: border-box;"><span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">command</span></span>  scale     Set <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">number</span> <span class="hljs-operator" style="box-sizing: border-box;">of</span> containers <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">for</span> <span class="hljs-operator" style="box-sizing: border-box;">a</span> service  start     Start services  stop      Stop services  restart   Restart services  up        Create <span class="hljs-operator" style="box-sizing: border-box;">and</span> start containers</code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li><li style="box-sizing: border-box; padding: 0px 5px;">16</li><li style="box-sizing: border-box; padding: 0px 5px;">17</li><li style="box-sizing: border-box; padding: 0px 5px;">18</li><li style="box-sizing: border-box; padding: 0px 5px;">19</li><li style="box-sizing: border-box; padding: 0px 5px;">20</li><li style="box-sizing: border-box; padding: 0px 5px;">21</li><li style="box-sizing: border-box; padding: 0px 5px;">22</li><li style="box-sizing: border-box; padding: 0px 5px;">23</li><li style="box-sizing: border-box; padding: 0px 5px;">24</li><li style="box-sizing: border-box; padding: 0px 5px;">25</li><li style="box-sizing: border-box; padding: 0px 5px;">26</li><li style="box-sizing: border-box; padding: 0px 5px;">27</li><li style="box-sizing: border-box; padding: 0px 5px;">28</li><li style="box-sizing: border-box; padding: 0px 5px;">29</li></ul>

3.compose编写mediawiki的docker-compose.yml 
首先编写compose的配置文件,语法与fig类似,文件名为docker-compose.yml,内容如下:

<code class="hljs haml has-numbering" style="display: block; padding: 0px; color: inherit; box-sizing: border-box; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background: transparent;">wiki2:    image: 'nickstenning/mediawiki'    ports:        -<span class="ruby" style="box-sizing: border-box;"> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"8880:80"</span></span>    links:        -<span class="ruby" style="box-sizing: border-box;"> <span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">db:</span>database</span>    volumes:        -<span class="ruby" style="box-sizing: border-box;"> /data/<span class="hljs-symbol" style="color: rgb(0, 102, 102); box-sizing: border-box;">wiki2:</span>/data</span>db:    image: "mysql"    expose:        -<span class="ruby" style="box-sizing: border-box;"> <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"3306"</span></span>    environment:        -<span class="ruby" style="box-sizing: border-box;"> <span class="hljs-constant" style="box-sizing: border-box;">MYSQL_ROOT_PASSWORD</span>=defaultpass</span></code><ul class="pre-numbering" style="box-sizing: border-box; position: absolute; width: 50px; top: 0px; left: 0px; margin: 0px; padding: 6px 0px 40px; border-right-width: 1px; border-right-style: solid; border-right-color: rgb(221, 221, 221); list-style: none; text-align: right; background-color: rgb(238, 238, 238);"><li style="box-sizing: border-box; padding: 0px 5px;">1</li><li style="box-sizing: border-box; padding: 0px 5px;">2</li><li style="box-sizing: border-box; padding: 0px 5px;">3</li><li style="box-sizing: border-box; padding: 0px 5px;">4</li><li style="box-sizing: border-box; padding: 0px 5px;">5</li><li style="box-sizing: border-box; padding: 0px 5px;">6</li><li style="box-sizing: border-box; padding: 0px 5px;">7</li><li style="box-sizing: border-box; padding: 0px 5px;">8</li><li style="box-sizing: border-box; padding: 0px 5px;">9</li><li style="box-sizing: border-box; padding: 0px 5px;">10</li><li style="box-sizing: border-box; padding: 0px 5px;">11</li><li style="box-sizing: border-box; padding: 0px 5px;">12</li><li style="box-sizing: border-box; padding: 0px 5px;">13</li><li style="box-sizing: border-box; padding: 0px 5px;">14</li><li style="box-sizing: border-box; padding: 0px 5px;">15</li></ul>


4.创建并启动mediawiki  

<code class="hljs lasso has-numbering" style="font-family: 'Source Code Pro', monospace; display: block; padding: 0px; color: inherit; box-sizing: border-box;font-size:undefined; white-space: pre; border-radius: 0px; word-wrap: normal; background-image: initial; background-attachment: initial; background-color: transparent; background-size: initial; background-origin: initial; background-clip: initial; background-position: initial; background-repeat: initial;">$ docker<span class="hljs-attribute" style="box-sizing: border-box;">-compose</span> up <span class="hljs-attribute" style="box-sizing: border-box;">-d</span></code>

原文地址:http://blog.csdn.net/lincyang/article/details/44588397

0 0