天天看点

docker compose部署服务

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` &gt; /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-&gt;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-&gt;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-&gt;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-&gt;80</code><code>/tcp</code>     <code>hopeful_pasteur</code>

<code>[root@chy ~]</code><code># docker-compose --help //有不会的指令及时查看命令帮助</code>

docker compose部署服务

     本文转自我不是瘦子51CTO博客,原文链接:http://blog.51cto.com/chy940405/1982876,如需转载请自行联系原作者