服务器环境的搭建一直是一个对新手不友好的环节,但借助容器技术 Docker 和编排工具 Docker-Compose,我们可以非常方便的一次性完成配套环境的搭建及项目发布。
前言
先上项目代码: 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 的配置必不可少,但是这个我们也不多说了。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于