http://blog.csdn.net/lincyang/article/details/44588397
compose是用来在docker中定义和运行复杂应用的小工具,比如在一个文件中定义多个容器,只用一行命令就可以让一切就绪并运行。它的功能与我们所熟知的fig相似,换句话说,compose是fig的替代产品,fig就这样退出docker的历史舞台了。
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="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<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/44835799
第一种情况,挂载host目录的,比如之前的hg-server。备份就很简单,直接把那些hg源码目录在host做备份即可。
第二种情况,需要在container中安装新软件。用export或者save命令吧。
<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 docker commit <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">9</span>ab6e234c9ba linc<span class="hljs-attribute" style="box-sizing: border-box;">-wiki</span> sudo docker images REPOSITORY <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">TAG</span> IMAGE ID CREATED VIRTUAL SIZE linc<span class="hljs-attribute" style="box-sizing: border-box;">-wiki</span> latest b5a1e34b01c2 <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">14</span> seconds ago <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">689.7</span> MB sudo docker export <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">9</span>ab6e234c9ba <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span> /home/linc/docker/images<span class="hljs-attribute" style="box-sizing: border-box;">-bk</span>/linc<span class="hljs-attribute" style="box-sizing: border-box;">-wiki</span><span class="hljs-attribute" style="box-sizing: border-box;">-export</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>tar sudo docker save linc<span class="hljs-attribute" style="box-sizing: border-box;">-wiki</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">></span> <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">..</span>/images<span class="hljs-attribute" style="box-sizing: border-box;">-bk</span>/linc<span class="hljs-attribute" style="box-sizing: border-box;">-wiki</span><span class="hljs-attribute" style="box-sizing: border-box;">-save</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>tar $ du <span class="hljs-attribute" style="box-sizing: border-box;">-sh</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">*</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">495</span>M linc<span class="hljs-attribute" style="box-sizing: border-box;">-wiki</span><span class="hljs-attribute" style="box-sizing: border-box;">-export</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>tar <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">672</span>M linc<span class="hljs-attribute" style="box-sizing: border-box;">-wiki</span><span class="hljs-attribute" style="box-sizing: border-box;">-save</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>tar sudo cat /home/linc/docker/images<span class="hljs-attribute" style="box-sizing: border-box;">-bk</span>/linc<span class="hljs-attribute" style="box-sizing: border-box;">-wiki</span><span class="hljs-attribute" style="box-sizing: border-box;">-export</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>tar <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">|</span> sudo docker <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">import</span> <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">-</span> docker_hgweb sudo docker load <span class="hljs-subst" style="color: rgb(0, 0, 0); box-sizing: border-box;">--</span>input <span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">..</span>/images<span class="hljs-attribute" style="box-sizing: border-box;">-bk</span>/linc<span class="hljs-attribute" style="box-sizing: border-box;">-wiki</span><span class="hljs-attribute" style="box-sizing: border-box;">-save</span><span class="hljs-built_in" style="color: rgb(102, 0, 102); box-sizing: border-box;">.</span>tar</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></ul>
第三种情况,mysql中的数据哪里去啦?
这个问题困扰我几天了。就拿部署的mediawiki说吧,没有将数据文件链接到host中,而是放到了/var/lib/mysql中,如下:
<code class="hljs vbnet 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;">/var/<span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">lib</span>/mysql<span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># ls</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">auto</span>.cnf ib_logfile0 ib_logfile1 ibdata1 ibtmp1 my_wiki mysql performance_schema</code>Docker实践7:容器与主机拷贝数据
http://blog.csdn.net/lincyang/article/details/44176569
在Docker实践2中使用-v参数将主机与容器中相关目录联系在一起(挂载),所以我们可以用这个通道将想要互相拷贝的数据放入其中,这样就可以用cp命令来复制文件了。
除了这个办法,我们还可以分别用不同的命令来拷贝数据。
从容器中像主机拷贝数据
docker提供了cp命令,用法如下:
<code class="hljs perl 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-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># docker ps</span> CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a77a72ac178c tutum/apache-php:latest <span class="hljs-string" style="color: rgb(0, 136, 0); box-sizing: border-box;">"/run.sh"</span> <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">21</span> hours ago Up <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">21</span> hours <span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>.<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">0</span>:<span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">8080</span>-><span class="hljs-number" style="color: rgb(0, 102, 102); box-sizing: border-box;">80</span>/tcp phpapache_phpapache_1 <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># docker-enter a77a72ac178c</span> root<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@a77a72ac178c</span>:~<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># ls /var/www/html</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>.php logo.png root<span class="hljs-variable" style="color: rgb(102, 0, 102); box-sizing: border-box;">@a77a72ac178c</span>:~<span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># exit</span> logout <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># docker cp a77a72ac178c:/var/www/html /var/www/</span> <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># ls /var/www/</span> app download <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>.html <span class="hljs-comment" style="color: rgb(136, 0, 0); box-sizing: border-box;"># ls /var/www/app/</span> <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">index</span>.php logo.png </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>
从主机向容器中拷贝数据
这里要使用一个docker提供的神奇通道来完成主机向容器的数据传输。
首先要用docker inspect方法获得容器的完整id,
<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;"> inspect <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">Return</span> low<span class="hljs-attribute" style="box-sizing: border-box;">-level</span> information <span class="hljs-keyword" style="color: rgb(0, 0, 136); box-sizing: border-box;">on</span> a container</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>
然后用/var/lib/docker/aufs/mnt/通道来完成拷贝。
举例如下:
<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;"># docker inspect -f '{{.Id}}' a77a72ac178c</span> a77a72ac178c1e35708d2af446197c10239b0b1bd8932104578e334b83eb93a2 <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># cp docker/docker-start.sh /var/lib/docker/aufs/mnt/a77a72ac178c1e35708d2af446197c10239b0b1bd8932104578e334b83eb93a2/root/</span> <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># docker-enter a77a72ac178c</span> <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># pwd</span> /root <span class="hljs-preprocessor" style="color: rgb(68, 68, 68); box-sizing: border-box;"># ls</span> docker-start.sh</code>