1 用docker compose部署服务
- 需求:假如现在我们手里有很多容器,每个容器对应每个服务,有nginx容器,redis容器,mysql容器等。现在我们需要批量化的去管理,批量启动,停止,重启等操作!当然你会说用shell,可是如何不用shell来完成需求呢,那就需要用到接下来介绍的docker compose了。
- docker compose可以方便我们快捷高效地管理容器的启动、停止、重启等操作,它类似于linux下的shell脚本,基于yaml语法,在该文件里我们可以描述应用的架构,比如用什么镜像、数据卷、网络模式、监听端口等信息。我们可以在一个compose文件中定义一个多容器的应用(比如jumpserver),然后通过该compose来启动这个应用。
- 安装compose
<code>[root@chy ~]</code><code># curl -L https://github.com/docker/compose/releases/download/1.17.0-rc1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose //从官方下载一个最新的compose</code>
<code>[root@chy ~]</code><code># chmod 755 /usr/local/bin/docker-compose //将权限设置为755</code>
<code>[root@chy ~]</code><code># docker-compose version</code>
<code>docker-compose version 1.17.0-rc1, build a0f95af</code>
<code>docker-py version: 2.5.1</code>
<code>CPython version: 2.7.13</code>
<code>OpenSSL version: OpenSSL 1.0.1t 3 May 2016</code>
<code>Compose区分Version 1和Version 2(Compose 1.6.0+,Docker Engine 1.10.0+)。</code>
<code>Version 2支持更多的指令。Version 1没有声明版本默认是</code><code>"version 1"</code><code>。Version 1将来会被弃用。</code>
定义一个docker compose 管理器
<code>[root@chy ~]</code><code># docker ps //查看容器的名称,后面会用到</code>
<code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code>f98ab40c32a6 centos </code><code>"bash"</code> <code>10 seconds ago Up 4 seconds heuristic_torvalds</code>
<code>c06361830af1 centos7_1 </code><code>"/bin/sh -c '/usr/..."</code> <code>About a minute ago Up About a minute 0.0.0.0:8080->80</code><code>/tcp</code> <code>root_app1_1</code>
<code>726da06d12c8 centos7_1 </code><code>"tail -f /etc/passwd"</code> <code>21 minutes ago Up 20 minutes 80</code><code>/tcp</code> <code>root_app2_1</code>
<code>1101ab2618a4 centos7_1 </code><code>"/bin/sh -c '/usr/..."</code> <code>18 hours ago Up 18 hours 0.0.0.0:81->80</code><code>/tcp</code> <code>hopeful_pasteur</code>
<code>[root@chy ~]</code><code># vim docker-compose.yml</code>
<code>version: </code><code>"2"</code>
<code>services:</code>
<code> </code><code>app1:</code>
<code> </code><code>image: centos_nginx</code>
<code> </code><code>ports:</code>
<code> </code><code>- </code><code>"8080:80"</code>
<code> </code><code>networks:</code>
<code> </code><code>- </code><code>"net1"</code>
<code> </code><code>volumes:</code>
<code> </code><code>- </code><code>/data/</code><code>:</code><code>/data</code>
<code> </code><code>app2:</code>
<code> </code><code>image: centos_with_nettool</code>
<code> </code><code>- </code><code>"net2"</code>
<code> </code><code>- </code><code>/data/</code><code>:</code><code>/data1</code>
<code> </code><code>entrypoint: </code><code>tail</code> <code>-f </code><code>/etc/passwd</code>
<code>networks:</code>
<code> </code><code>net1:</code>
<code> </code><code>driver: bridge</code>
<code> </code><code>net2:</code>
<code>参数详解:</code>
<code>version: </code><code>"2"</code> <code>//</code><code>版本为2版本</code>
<code>services: </code><code>//</code><code>相关容器或者镜像操作</code>
<code> </code><code>app1: </code><code>//app1</code><code>对应的是容器1的信息,这里需要注意是要运行的容器的名称</code>
<code> </code><code>image: centos7_1 </code><code>///images</code><code>的名字</code>
<code> </code><code>ports: </code><code>//</code><code>映射端口</code>
<code> </code><code>- </code><code>"8080:80"</code> <code>//</code><code>映射宿主机8080对应容器的80端口</code>
<code> </code><code>networks: </code><code>//</code><code>网络(默认是bridge模式)</code>
<code> </code><code>- </code><code>"net1"</code> <code>//</code><code>下面定义的net1(要是需要pipwork怎么办?官方不支持,就只能在写shell然后在 driver后面 定义none)</code>
<code> </code><code>volumes: </code><code>//-v</code><code>的参数指定</code>
<code> </code><code>- </code><code>/data/</code><code>:</code><code>/data</code> <code>//</code><code>目录映射</code>
<code> </code><code>image: centos</code>
<code> </code><code>entrypoint: </code><code>tail</code> <code>-f </code><code>/etc/passwd</code> <code>///</code><code>还是老问题BUG 为了不让执行后关闭,我们使用这条命令</code>
<code>networks: </code><code>//</code><code>这里就是如上net1定义的网络模式</code>
<code>[root@chy ~]</code><code># docker-compose up -d </code>
<code>Recreating root_app2_1 ... </code>
<code>Recreating root_app2_1</code>
<code>Recreating root_app2_1 ... </code><code>done</code>
<code>[root@chy ~]</code><code># docker ps</code>
<code>CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES</code>
<code>9646c0a40ae1 centos </code><code>"tail -f /etc/passwd"</code> <code>7 minutes ago Up 7 minutes root_app2_1</code>
<code>f98ab40c32a6 centos </code><code>"bash"</code> <code>8 minutes ago Up 7 minutes heuristic_torvalds</code>
<code>c06361830af1 centos7_1 </code><code>"/bin/sh -c '/usr/..."</code> <code>9 minutes ago Up 9 minutes 0.0.0.0:8080->80</code><code>/tcp</code> <code>root_app1_1</code>
<code>1101ab2618a4 centos7_1 </code><code>"/bin/sh -c '/usr/..."</code> <code>18 hours ago Up 18 hours 0.0.0.0:81->80</code><code>/tcp</code> <code>hopeful_pasteur</code>
<code>[root@chy ~]</code><code># docker-compose --help //有不会的指令及时查看命令帮助</code>
本文转自我不是瘦子51CTO博客,原文链接:http://blog.51cto.com/chy940405/1982876,如需转载请自行联系原作者