经历了之前的两篇,我们已经大体上了解了docker部署容器的过程。

不过,整个部署过程中需要手动输入很多的docker命令,稍显繁琐并且容易出错。那么有没有一种相对简洁优雅的方式来完成这些部署工作呢?答案是有的,docker-compose(一下简称“compose”)正是为此而生。

关于docker-compose(了解更多:https://docs.docker.com/compose/):

Docker-Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。Compose 是一个用户定义和运行多个容器的 Docker 应用程序。在 Compose 中你可以使用 YAML 文件来配置你的应用服务。然后,只需要一个简单的命令,就可以创建并启动你配置的所有服务。

“compose”的安装过程这里就不详述了,不过个人推荐通过pip进行安装,具体安装过程可百度得知。

下面就让我们来使用“compose”完成之前的部署工作,看看“compose”是怎么简化操作的。

先看一个配置文件docker-compose.yml:

version: "3"
services:
mysql:
image: mysql:5.7
restart: always
container_name: mysql
ports:
- "3306:3306"
volumes:
- ~/mysql/conf:/etc/mysql/conf.d
- ~/mysql/data:/var/lib/mysql
- ~/mysql/logs:/var/log/mysql
environment:
- MYSQL_ROOT_PASSWORD=admin tomcat1:
image: tomcat
container_name: tomcat1
volumes:
- ~/tomcat/conf:/usr/local/tomcat/conf
- ~/tomcat/webapps:/usr/local/tomcat/webapps
depends_on:
- mysql
links:
- mysql tomcat2:
image: tomcat
container_name: tomcat2
volumes:
- ~/tomcat/conf:/usr/local/tomcat/conf
- ~/tomcat/webapps:/usr/local/tomcat/webapps
depends_on:
- mysql
links:
- mysql nginx:
image: nginx
container_name: nginx
ports:
- "80:80"
volumes:
- ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- ~/nginx/www:/usr/share/nginx/html
- ~/nginx/logs:/var/log/nginx
links:
- tomcat1
- tomcat2

关于compose配置文件的详细解释请参看:https://docs.docker.com/compose/compose-file/

这里简单说下,docker-compose.yml是“compose”的默认配置文件,“compose”就是通过这个文件对docker容器进行快速编排、部署管理的。配置文件遵循YAML语法,并且由三个核心部分组成:version、services和networks(本篇没有用到)。

version指明当前版本,目前主要有1,2,3三个大版本,每个版本都跟docker-engine有着对应关系。大体的对应关系如下:

services定义了用于部署的服务(容器),以配置文件中的mysql为例进行说明:

image              指定容器镜像及其版本
container_name 设置容器名称
ports 配置容器的端口映射
volumes 绑定宿主机的本地路径到容器
environment 预设容器的环境变量

tomcat1中还有depends_on和links,这是两个很有使用的配置项。

depends_on         通过依赖关系按顺序启动docker服务
links 将依赖的服务以hosts形式注册到容器

我们知道在部署软件的时候,时常要考虑个组件之间的依赖关系。比如tomcat如果想访问数据库,必须要先启动mysql(当然也可以是其他数据库)。在传统的做法中,一般依赖于软件实施人员手动进行控制和确认,但是“compose”提供了depends_on配置项就解决了这个问题,只需配置好依赖的docker服务,“compose”就会在部署时优先启动被依赖的服务。使用过spring的同学应该能够理解,这就是容器间的“依赖注入”啊。

至于links这个配置项,就更是利器了。在之前的篇章中,我们都是在mysql部署后通过“docker inspect mysql|grep IPAddress”查看mysql的IP,然后再修改tomcat中关于mysql的配置,这样的方式非常的不智能并且麻烦。但是通过links配置项,docker在启动过程中会将容器所需连接的服务以hostname的形式注册到网络中,那么容器启动后可通过hostname访问对应的docker服务,免去了手动配置的痛苦。

使用docker部署nginx+tomcat架构(3):使用docker-compose简化部署操作的更多相关文章

  1. 使用docker部署nginx+tomcat架构(2):访问mysql数据库

    上一篇完成了通过docker部署nginx+tomcat的基础软件架构,但是距离一个真正可用的软件架构还差得很远.其中最重要的一点是缺少数据库这个角色的存在,那么本篇就来完善这一点. 废话少说,直接进 ...

  2. 使用docker部署nginx+tomcat架构

    架构说明: 使用nginx+tomcat实现动态/静态(资源请求)分离和负载均衡. 参考文档: https://www.runoob.com/docker/docker-tutorial.html 配 ...

  3. kubernetes部署nginx/tomcat

    kubernetes集群已经部署好了,需要的话可以参考之前的文章https://www.cnblogs.com/winter1519/p/10015420.html [root@master tomc ...

  4. docker-compose入门示例:一键部署 Nginx+Tomcat+Mysql

    整体环境配置 整体环境的配置,如果一个一个 Dockerfile 去写,那么是相当麻烦的,好在 Docker 有一个名为 Docker-Compose 的工具提供,我们可以使用它一次性完成整体环境的配 ...

  5. Docker中nginx+tomcat实现负载均衡

    拉取tomcat镜像 docker pull tomcat 运行两个tomcat容器 docker run -d -p 8088:8080 --name tomcat8088 tomcat docke ...

  6. centos7 部署 nginx+tomcat+MariaDB 环境并安装安全狗,使用natapp隧道

    jdk安装: -openjdk 参考:https://blog.csdn.net/dhr201499/article/details/81626466 tomcat安装: 使用版本:8.5.37 参考 ...

  7. shell一键部署nginx+tomcat

    1.首先拉取环境  tomcat需要用到jdk环境 提前准备好nginx源码包,放于指定目录下 vim test.sh #!/bin/bash yum -y install gcc gcc-c++ z ...

  8. nginx+tomcat 架构 HttpServletRequest.getScheme()获取正确的协议

    http://blog.csdn.net/ofofw/article/details/46791447

  9. Docker部署Mysql, Tomcat, Nginx, Redis

    1. Mysql部署 问题及解决方案 容器内的网络和外部机器不能直接通信 外部机器和宿主机可以直接通信 宿主机和容器可以直接通信 当容器中的网络服务需要被外部机器访问时,可以将容器中提供服务的端口映射 ...

随机推荐

  1. 【BZOJ4944】[NOI2017]泳池(线性常系数齐次递推,动态规划)

    [BZOJ4944][NOI2017]泳池(线性常系数齐次递推,动态规划) 首先恰好为\(k\)很不好算,变为至少或者至多计算然后考虑容斥. 如果是至少的话,我们依然很难处理最大面积这个东西.所以考虑 ...

  2. WPF WebBrowser抑制Suppress 弹出 脚本错误 对话框 但是样式改变 需要继续改善

    1.添加引用 using System.Reflection;using System.Windows.Controls; 2.静态类扩展方法(this) public static class We ...

  3. Loadrunner 11.00 初始化失败; 通信错误。 Error (-81024): LR_VUG: The 'WS_SOAP' type is not supported on 'WIN32' platforms .

    搜索LR安装目录bin文件夹下有个“wlrun.exe”的文件,邮件点击“属性”->"兼容性"->兼容模式中选择“windows 7”,确认后重新打开即可,win10下 ...

  4. Java高级工程师面试宝典

    Java高级工程师面试宝典 JavaSE 多线程 进程与线程的区别? 答:进程是所有线程的集合,每一个线程是进程中的一条执行路径,线程只是一条执行路径. 为什么要用多线程? 答:提高程序效率 多线程创 ...

  5. Python数据分析工具:Pandas之Series

    Python数据分析工具:Pandas之Series Pandas概述Pandas是Python的一个数据分析包,该工具为解决数据分析任务而创建.Pandas纳入大量库和标准数据模型,提供高效的操作数 ...

  6. MySql5.7配置文件my.ini 设置 my.ini文件路径

    mysql配置文件my-default.ini  my.ini修改后重启无效,原来是路径错了,记录一下: windows操作系统下: 1. 由于我们使用MySql 时,需要修改mysql 的 my.i ...

  7. 剑指:链表中倒数第k个节点

    题目描述 输入一个链表,输出该链表中倒数第k个结点. 解法 pre 指针走 k-1 步.之后 cur 指针指向 phead,然后两个指针同时走,直至 pre 指针到达尾结点. 即cur与pre始终相距 ...

  8. cephfs测试中出现的问题

    最近重新对cephfs进行性能测试. 测试步骤: (1) 选取一个特地版本的操作系统内核,挂载20000个客户端; (2) 用iozone中的fileop工具,在每隔挂载点上都跑一个fileop进程; ...

  9. python常用库(转)

    转自http://www.west999.com/info/html/wangluobiancheng/qita/20180729/4410114.html Python常用的库简单介绍一下 fuzz ...

  10. 二十、Python与Mysql交互

    先安装一个python与MySQL交互的包:MySQL-python $ gunzip MySQL-python-1.2.2.tar.gz $ tar -xvf MySQL-python-1.2.2. ...