docker-compose入门示例:一键部署 Nginx+Tomcat+Mysql
整体环境配置
整体环境的配置,如果一个一个 Dockerfile 去写,那么是相当麻烦的,好在 Docker 有一个名为 Docker-Compose 的工具提供,我们可以使用它一次性完成整体环境的配置:
首先我们看看 docker-compose.yml 配置文件的内容:
version: "3"
services:
mysql:
container_name: mysql
image: 192.168.1.30:5000/mysql:5.7 #从私有仓库拉镜像
restart: always
volumes:
- ./mysql/data/:/var/lib/mysql/ #映射mysql的数据目录到宿主机,保存数据
- ./mysql/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf #把mysql的配置文件映射到容器的相应目录
ports:
- "6033:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
nginx:
container_name: nginx
restart: always
image: 192.168.1.30:5000/nginx
ports:
- 80:80
- 443:443
- 5050:5050
- 4040:4040
volumes:
- ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf #映射nginx的配置文件到容器里
- ./nginx/logs/:/var/log/nginx/
- ./nginx/data/:/var/share/nginx/html/ #映射nginx的网页目录到容器里
links:
- tomcat:t1 #连接 tomcat镜像
tomcat:
container_name: tomcat
restart: always
image: 192.168.1.30:5000/tomcat
ports:
- 8080:8080
- 8009:8009
volumes:
- ./tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml #映射 tomcat的配置文件到容器里
- ./tomcat/webapps/web:/usr/local/tomcat/webapps/web #映射一个web服务
- ./tomcat/logs/:/usr/local/tomcat/logs/
links:
- mysql:m1 #连接数据库镜像
一共设置了三个 service,分别是 mysql, nginx, tomcat,其中,需要注意的地方是它们的 volumes 以及 links。
mysql 环境配置
首先看看最简单的 mysql,它没有设置 links,因为是其他容器来连接它,不需要设置links。但是 mysql 的 volumes 最为重要,如果不设置 volumes 的话,每一次 docker 重启,或者 mysql 的 container 重启,database 数据就会啥都没有了。所以 mysql 的 volumes设置了mysql 产生的 data 文件需要映射到宿主机的./mysql/data 目录下,这个目录可以自己定,mysql 的配置文件从宿主机的./mysql/conf/mysqld.conf 读取,内容可自己配置好。
nginx 环境配置
它也设置了 volumes和links,这个地方的 links,建立了与 tomcat 容器的连接,因为nginx 负责监听 80 端口,tomcat 负责监听 8080 端口,nginx 接收到动态网页需要由 tomcat 来处理,就要转发到 8080端口。docker 的环境下,nginx 直接将请求转发到 8080,tomcat 是不会转发的。所以用llinks,这里的值为 t1,为名字。
在 nginx.conf文件中,要加上如下配置:
在http端中加
upstream backend { #后台负载均衡容器及端口,本例为一个,t1 tomcat容器的名字
server t1:8080;
}
在server加
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;
}
tomcat 环境配置
volumes:
- ./tomcat/conf/server.xml:/usr/local/tomcat/conf/server.xml #映射 tomcat的配置文件到容器里
- ./tomcat/webapps/web:/usr/local/tomcat/webapps/web #映射一个web服务
该server.xml文件提前在宿主机配置好,包括web网页;同时把web映射到容器的相应目录。
最后执行如下命令:
docker-compose up 或者 docker-compose -f *.yaml文件名
创建容器。如果没有出现错误,创建成功。
一般的错误,都是因为挂载目录有错误,有的是写错了,有的是映射到容器中的相应目录不正确,关于容器的目录我总结如下:
mysql::/etc/mysql/mysql.conf.d/mysqld.cnf 为配置文件位置
nginx: :/etc/nginx/nginx.conf 为配置文件位置,/var/share/nginx/html/ 为nginx的网页目录
tomcat: :/usr/local/tomcat/conf/server.xml 为tomcat的配置文件位置,/usr/local/tomcat/webapps 为网页站点目录
通过以上我们不只可以一键创建一个mysql,nginx, tomcat 的动静分离网站环境,同时我们对 docker-compose 有了一定的了解,使我们轻松完成docker-compose 的入门学习。
docker-compose入门示例:一键部署 Nginx+Tomcat+Mysql的更多相关文章
- shell一键部署nginx+tomcat
1.首先拉取环境 tomcat需要用到jdk环境 提前准备好nginx源码包,放于指定目录下 vim test.sh #!/bin/bash yum -y install gcc gcc-c++ z ...
- Docker Compose 一键部署Nginx代理Tomcat集群
Docker Compose 一键部署Nginx代理Tomcat集群 目录结构 [root@localhost ~]# tree compose_nginx_tomcat/ compose_nginx ...
- 使用docker部署nginx+tomcat架构(3):使用docker-compose简化部署操作
经历了之前的两篇,我们已经大体上了解了docker部署容器的过程. 使用docker部署nginx+tomcat架构 使用docker部署nginx+tomcat架构():访问mysql数据库 不过, ...
- 使用docker部署nginx+tomcat架构(2):访问mysql数据库
上一篇完成了通过docker部署nginx+tomcat的基础软件架构,但是距离一个真正可用的软件架构还差得很远.其中最重要的一点是缺少数据库这个角色的存在,那么本篇就来完善这一点. 废话少说,直接进 ...
- Tomcat热部署:Maven项目一键部署到Tomcat服务器 - 支持多环境
参考:Eclipse中的Maven项目一键部署到Tomcat服务器 - 支持多环境部署 命令 debug模式设置关联源码 eclipse --> 项目右键 --> Debug As --& ...
- Git+Gitlab+Ansible的roles实现一键部署Nginx静态网站(一)--技术流ken
前言 截止目前已经写了<Ansible基础认识及安装使用详解(一)--技术流ken>,<Ansible常用模块介绍及使用(二)--技术流ken><Ansible剧本介绍及 ...
- docker 部署 nginx+php+mysql
系统:centos7 使用root账户 开放80端口 firewall-cmd --zone=public --add-port=80/tcp --permanent 安装docker yum ins ...
- shell脚本一键部署nginx
一键部署nginx 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ...
- Git+Gitlab+Ansible的roles实现一键部署Nginx静态网站(4)
前言 截止目前已经写了<Ansible基础认识及安装使用详解(一)–技术流ken>,<Ansible常用模块介绍及使用(二)–技术流ken><Ansible剧本介绍及使用 ...
随机推荐
- ASP.NET常用内置对象之——Server
简介 Server对象是HttpServerUtility的一个实例,也是上下文对象context的一个属性,提供用于处理Web请求的Helper方法. 常用成员 一.Server.MapPath() ...
- mongodb 启动
>mongod.exe --dbpath C:\Environ\mongodb-3.0.6\data\db >mongod.exe --logpath "C:\Environ\ ...
- Spark资源调度分配内幕天机彻底解密:Driver在Cluster模式下的启动、两种不同的资源调度方式源码彻底解析、资源调度内幕总结
本课主题 Master 资源调度的源码鉴赏 资源调度管理 任务调度与资源是通过 DAGScheduler.TaskScheduler.SchedulerBackend 等进行的作业调度 资源调度是指应 ...
- OC基础数据类型-NSDictionary
1.字典NSDictionary 字典与数组的区别:数组讲究顺序,而字典可以快速帮助我们找到数据,数据是我们的目的,键是我们的手段 NSDictionary *dict = [[NSDictionar ...
- ROC曲线手画
绘图过程很简单:给定m个正例子,n个反例子,根据学习器预测结果进行排序,先把分类阈值设为最大,使得所有例子均预测为反例,此时TPR和FPR均为0,在(0,0)处标记一个点,再将分类阈值依次设为每个样例 ...
- Kill占用指定端口的进程的方法
(1)查询占用指定端口进程的PID 打开cmd命令行,输入netstat -ano|findstr 8080(指定端口号) 最后一列即为占用该端口的进程的PID (2)KILL指定PID的进程 紧接着 ...
- Java虚拟机5:常用JVM命令参数
这里汇总一些平时用到的.看到的一些虚拟机参数: (1)-Xms20M 表示设置堆容量的最小值为20M,必须以M为单位 (2)-Xmx20M 表示设置堆容量的最大值为20M,必须以M为单位.将-Xmx和 ...
- 如何遍历一个JSON对象的属性值???
当遇到一个JSON格式的对象时,不知道它有多少个属性,也不知道有什么属性,该如何遍历它的属性及其属性值呢??? 还是使用Java语言还是很像的,使用for语句. var obj = data[i]; ...
- bzoj2336 [HNOI2011]任务调度
Description 正解:搜索+随机化. 先写个搜索,枚举所有没有要求的任务属于哪一种任务,然后再用爬山来更新最优解. 具体来说就是先把所有先做任务$A$的按照$a$时间从大到小排序,先做任务$B ...
- chromedriver链接
http://npm.taobao.org/mirrors/chromedriver/