使用docker部署nginx+tomcat架构(3):使用docker-compose简化部署操作

墨蓝 2023-06-01 11:16 113阅读 0赞

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

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

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

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

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

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

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

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

  1. version: "3"
  2. services:
  3. mysql:
  4. image: mysql:5.7
  5. restart: always
  6. container_name: mysql
  7. ports:
  8. - "3306:3306"
  9. volumes:
  10. - ~/mysql/conf:/etc/mysql/conf.d
  11. - ~/mysql/data:/var/lib/mysql
  12. - ~/mysql/logs:/var/log/mysql
  13. environment:
  14. - MYSQL_ROOT_PASSWORD=admin
  15. tomcat1:
  16. image: tomcat
  17. container_name: tomcat1
  18. volumes:
  19. - ~/tomcat/conf:/usr/local/tomcat/conf
  20. - ~/tomcat/webapps:/usr/local/tomcat/webapps
  21. depends_on:
  22. - mysql
  23. links:
  24. - mysql
  25. tomcat2:
  26. image: tomcat
  27. container_name: tomcat2
  28. volumes:
  29. - ~/tomcat/conf:/usr/local/tomcat/conf
  30. - ~/tomcat/webapps:/usr/local/tomcat/webapps
  31. depends_on:
  32. - mysql
  33. links:
  34. - mysql
  35. nginx:
  36. image: nginx
  37. container_name: nginx
  38. ports:
  39. - "80:80"
  40. volumes:
  41. - ~/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
  42. - ~/nginx/www:/usr/share/nginx/html
  43. - ~/nginx/logs:/var/log/nginx
  44. links:
  45. - tomcat1
  46. - 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有着对应关系。大体的对应关系如下:644402-20190820221124029-887960736.png

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

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

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

  1. depends_on 通过依赖关系按顺序启动docker服务
  2. 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服务,免去了手动配置的痛苦。?

*nginx的配置文件负载均衡部分:

  1. upstream tomcat {
  2. server tomcat1:8080;
  3. server tomcat2:8080;
  4. }

*tomcat关于mysql的配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <Context>
  3. <Resource name="mysql/test"
  4. auth="Container"
  5. type="javax.sql.DataSource"
  6. driverClassName="com.mysql.jdbc.Driver"
  7. url="jdbc:mysql://mysql:3306/test"
  8. username="root"
  9. password="admin"
  10. maxActive="20"
  11. maxIdle="10"
  12. maxWait="10000" />
  13. </Context>

除上述所提到的,“compose”还提供了很多配置项,具体的就请自己通过官方文档去了解吧。

好了,大体上介绍了配置文件的具体含义,那么接下来就让我们操作下,来看看实际效果。

  1. 在配置文件所在目录,执行命令:docker-compose up -d

644402-20190820225315519-1238328833.png

OK,that’s all。结束了,就是这么简单,我们之前废了半天劲才做好的部署工作,这么一条语句就搞定了。?

#更新

  1. 参考源:
  2. https://docs.docker.com/network/links/
  3. https://docs.docker.com/network/bridge/

--link选项已被docker官方列为legacy feature,推荐使用user-defined networks(即自定义网络)来配置容器间的连接关系。

修改docker-composer.yml:

  1. version: "3"
  2. services:
  3. nginx:
  4. ...
  5. networks:
  6. - my_net
  7. tomcat:
  8. ...
  9. networks:
  10. - my_net
  11. networks:
  12. my_net:
  13. driver: bridge

转载于:https://www.cnblogs.com/lichmama/p/11386192.html

发表评论

表情:
评论列表 (有 0 条评论,113人围观)

还没有评论,来说两句吧...

相关阅读

    相关 使用Docker部署ELK

    这篇文章主要是将之前部署的ELK改为docker部署,都使用5.6的镜像,因为最新的elk镜像改地址了,国内一直拉不下来 非Docker部署ELK:[https://blog