您的位置:首页 > 运维架构 > Docker

docker-compose 一键部署 Nginx+Tomcat+Mysql+solo2.7.0

2019-03-29 15:05 836 查看

前言
先上项目代码: liumapp/solo-in-docker

拷贝到本地目录后,先运行 build-image.sh 脚本安装相关 Docker 镜像:Tomcat9, Mysql5 以及 Nginx。

至于 solo,则是直接在本地打包编译好,然后放置在 webapps 目录下,通过 /conf/server.xml 的配置,来让 Tomcat 进行加载。首次运行的伙伴们可以不作修改直接使用。

整体环境配置
对于环境配置,我会做拆分来讲,因为单个容器的环境和多个容器的环境在运行上是有区别的,容器与容器之间的连接也要考虑。

打个比方,在 Nginx 容器中的 localhost:8080 并不会指向 Tomcat 容器中所监听的 8080 端口。

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

首先我们看看 docker-compose.yml 配置文件的内容:

version: “3”

services:
mysql:
container_name: mysql
image: mysql:5.5.60
restart: always
volumes:
- ./mysql/data:/var/lib/mysql
- ./mysql/conf/mysqld.conf:/etc/mysql/mysql.conf.d/mysqld.cnf
ports:
- “6603:3306”
environment:
- MYSQL_ROOT_PASSWORD=adminadmin
nginx:
container_name: nginx
restart: always
image: nginx:1.13
ports:
- 80:80
- 443:443
- 5050:5050
- 4040:4040
volumes:
- ./conf/vhosts:/etc/nginx/conf.d
- ./logs:/var/log/nginx
- ./www/:/var/www/
links:
- tomcat:t1
tomcat:
container_name: tomcat
restart: always
image: tomcat:9.0
ports:
- 8080:8080
- 8009:8009
volumes:
- ./webapps/solo.war:/usr/local/tomcat/webapps/solo.war
- ./conf/server.xml:/usr/local/tomcat/conf/server.xml
- ./logs:/usr/local/tomcat/logs
links:
- mysql:m1
可以看到,我们一共设置了三个 service,分别是 mysql, nginx, tomcat,其中,需要注意的地方是它们的 volumes 以及 links,其他的地方相信大家很容易理解。

mysql 环境配置
首先看看最简单的 mysql,它没有设置 links,因为是其他容器连接它,它也就不需要理会别的家伙了。但是 mysql 的 volumes 却是最为重要的,如果我们在这里不设置 volumes 的话,那么很棒,每一次 docker 重启,或者 mysql 的 container 重启,您辛辛苦苦产生的 database 数据就会一夜回到解放前:“啥都没有”。

所以 mysql 的 volumes,就设置了两点:

指定 mysql 产生的 data 文件需要同步到宿主机的./mysql/data 目录下

指定 mysql 的配置文件从宿主机的./mysql/conf/mysqld.conf 读取

那么至于 mysql 的配置文件中定义了什么内容,就由伙伴们自行研究吧。

nginx 环境配置
接下来我们看看 Nginx,它有 volumes,也有 links,那么这个地方的 volumes 我们就不解释了,大家可以参照 mysql 的解释来理解,重点看看 links,我们可以发现,Nginx 的 links 建立了与 tomcat 容器的连接,为什么呢,配置过 nginx+tomcat 的伙伴们应该会知道,nginx 负责监听 80 端口,tomcat 负责监听 8080 端口,nginx 接收到需要由 tomcat 来处理的请求就将请求转发到 8080。

那么在 docker 的环境下,nginx 直接将请求转发到 8080,tomcat 会接受到吗?答案肯定是不能的。

我们必须先定义一个 links,这里的值为 t1,那么在 nginx 负责转发的配置文件里,就要写上:

upstream backend {
server t1:8080;
}

server {
listen 80;
server_name localhost

access_log off;

location / {
proxy_pass http://backend$request_uri;
proxy_set_header  Host $host:$server_port;
proxy_set_header  X-Real-IP  $remote_addr;
client_max_body_size  10m;
}

}
来告诉 nginx,tomcat 在哪里。

tomcat 环境配置
最后便是 Tomcat 了,它比较特殊,因为还有 solo 的 war 包需要发布上去。

但发布 solo 的 war 包我们只需要定义几个 volumes 的值便可以了。

volumes:

  • ./webapps/solo.war:/usr/local/tomcat/webapps/solo.war
  • ./conf/server.xml:/usr/local/tomcat/conf/server.xml
    当然,server.xml 的配置必不可少,但是这个我们也不多说了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: