Docker部署web环境之Lanmt
2. 案例二 整套项目多容器分离通过docker-compose部署lanmt环境
详细的安装准备环境,省略,配置以及部署参考案例一即可 即可实现批量创建web,也可以实现多web共用一个php或mysql容器
2.1 目录路径的案例
[root@test compose_lanmt]# pwd
/home/yangjw/compose_lanmt
[root@test compose_lanmt]# ll
总用量 20
drwxr-xr-x 6 root root 4096 11月 11 17:44 apache
-rw-r--r-- 1 root root 2524 11月 11 17:44 docker-compose-lanmt.yml
drwxr-xr-x 4 root root 4096 11月 11 17:44 mysql
drwxr-xr-x 5 root root 4096 11月 11 17:44 nginx
drwxr-xr-x 6 root root 4096 11月 11 17:44 tomcat
2.2 nginx代理的Dockerfile文件配置
注意: 和lnmp里面的dockerfile相同
进入到nginx目录下配置
将需要安装的nginx包,放入到nginx指定目录下
cat Dockerfile
FROM centos:7
MAINTAINER Mr.JingWen
RUN yum install -y wget telnet vim iproute iputils gcc gcc-c++ make openssl-devel pcre pcre-devel
RUN useradd -s /sbin/nologin -u 3000 nginx
ENV TZ="Asia/Shanghai" nginx_v="1.14.2" soft_sign="PXJY_WebSer" nginx_dir="/usr/local/nginx"
ADD source_file/nginx-${nginx_v}.tar.gz /usr/local/src/
# 隐藏服务和版本号
#注意: 若nginx的版本不是 1.14.2 ,需要修改 nginx.h 里面的版本号,使其对应
COPY ./source_file/nginx.h /usr/local/src/nginx-${nginx_v}/src/core/
COPY ./source_file/ngx_http_header_filter_module.c /usr/local/src/nginx-${nginx_v}/src/http/
COPY ./source_file/ngx_http_special_response.c /usr/local/src/nginx-${nginx_v}/src/http/
RUN cd /usr/local/src/nginx-${nginx_v} \
&& ./configure --prefix=${nginx_dir} --user=nginx --group=nginx --with-http_ssl_module --with-http_stub_status_module \
--with-http_gzip_static_module --with-pcre \
&& make -j 4 && make install
RUN rm -rf /usr/local/src/nginx-${nginx_v}* && yum clean all
RUN chown -R nginx ${nginx_dir} && rm -rf /usr/local/src/nginx-${nginx_v}
WORKDIR ${nginx_dir}
EXPOSE 80
CMD ["./sbin/nginx", "-g", "daemon off;"]
注:通过此镜像编译后,可直接启动无需挂载配置文件,若有需要,根据自己需要进行挂载配置,也可以编译自己想要编译的版本
cat nginx.conf
user nginx;
worker_processes auto;
error_log logs/error.log info;
pid logs/nginx.pid;
worker_rlimit_nofile 65535;
events {
use epoll;
worker_connections 3072;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
keepalive_timeout 65;
tcp_nodelay on;
server_tokens off;
#proxy_buffer_size 64k;
#proxy_buffers 4 256k;
#proxy_busy_buffers_size 256k;
#client_header_buffer_size 64k;
#large_client_header_buffers 4 64k;
#fastcgi_connect_timeout 60;
#fastcgi_send_timeout 180;
fastcgi_read_timeout 600;
proxy_connect_timeout 600;
proxy_read_timeout 600;
proxy_send_timeout 600;
client_body_buffer_size 20M;
client_max_body_size 20M; #设置允许客户端请求的最大的单个文件字节数
client_header_buffer_size 20M; #指定来自客户端请求头的headebuffer大小
include conf.d/*.conf;
}
cat conf.d/project.conf
upstream lb_tomcat {
ip_hash;
server compose-tomcat01:8080;
server compose-tomcat02:8080;
}
server {
listen 80;
server_name localhost;
access_log /applog/app1.access.log main;
error_log /applog/app1.error.log;
location / {
proxy_pass http://lb_tomcat;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
2.3 apache代理服务的Dockerfile文件配置
cat ./apache/Dockerfile
FROM centos:7
MAINTAINER Mr.JingWen
# apache和php环境的环境变量参数;
# 注: 编译php版本前,需要先修改下面httpd.conf中php模块的版本号,libphp
ENV TZ="Asia/Shanghai" apr_v="1.7.0" apr_util_v="1.6.0" httpd_v="2.4.39" httpd_dir="/usr/local/httpd"
RUN useradd -s /sbin/nologin -u 3300 apache
RUN yum install -y gcc gcc-c++ make cmake autoconf automake ncurses-devel \
libxml2-devel perl-devel libcurl-devel libgcrypt libgcrypt-devel \
libxslt libxslt-devel pcre-devel openssl-devel openssl wget \
curl-devel db4-devel libXpm-devel gmp-* libc-client-devel vim \
openldap-devel freetype freetype-devel gd gd-devel libjpeg-devel \
libpng-devel zlib zlib-devel bzip2-devel libtool expat-devel bison \
iproute telnet iputils libtermcap-devel
#=============== 构建 Apache 服务镜像配置 ==============#
RUN echo -e "\033[44;37m 开始编译 apache 服务 \033[0m" && sleep 3
ADD source_file/apr-${apr_v}.tar.gz /usr/local/src
RUN cd /usr/local/src/apr-${apr_v} \
&& ./configure --prefix=/usr/local/apr \
&& make -j 4 && make install
ADD source_file/apr-util-${apr_util_v}.tar.gz /usr/local/src
RUN cd /usr/local/src/apr-util-${apr_util_v} \
&& ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr \
&& make -j 4 && make install
ADD source_file/httpd-${httpd_v}.tar.gz /usr/local/src
WORKDIR /usr/local/src/httpd-${httpd_v}
#优化apache请求数 || 隐藏apache版本号和更改软件名字标志的函数
RUN perl -pi -e "s/DEFAULT_SERVER_LIMIT 256/DEFAULT_SERVER_LIMIT 15000/g" server/mpm/prefork/prefork.c \
&& sed -i "/#define AP_SERVER_BASEPRODUCT/s/Apache/PXJY WebSer/" include/ap_release.h \
#开始编译
&& ./configure --prefix=${httpd_dir} -enable-cgi --with-zlib --with-pcre --with-apr=/usr/local/apr \
--enable-expires=shared --enable-vhost-alias=shared --with-apr-util=/usr/local/apr-util \
--enable-rewrite=shared --enable-speling=shared --enable-proxy=shared --enable-so --enable-ssl \
--with-mpm=prefork --with-expat=builtin --enable-modules=all --enable-usertrack=shared \
&& make -j 4 && make install
WORKDIR ${httpd_dir}/conf
RUN sed -i 's/#ServerName www.example.com:80/ServerName 0.0.0.0:80/g' httpd.conf \
&& sed -i '$a Include conf/extra/httpd-vhosts.conf' httpd.conf \
&& sed -i 's/User daemon/User apache/g' httpd.conf \
&& sed -i 's/Group daemon/Group apache/g' httpd.conf \
&& sed -i 's/DirectoryIndex index.html/DirectoryIndex index.php index.html/g' httpd.conf \
&& sed -i '$a ServerTokens Prod' httpd.conf \
&& sed -i '$a ServerSignature Off' httpd.conf \
&& sed -i 's/#LoadModule/LoadModule/g' httpd.conf
RUN chown -R apache.apache ${httpd_dir}
WORKDIR ${httpd_dir}
EXPOSE 80
ENTRYPOINT ["./bin/httpd", "-D", "FOREGROUND"]
注:通过此镜像编译后,可直接启动无需挂载配置文件,若有需要,根据自己需要进行挂载配置,也可以编译自己想要编译的版本
2.4 tomcat的Dockerfile文件配置
进入到tomcat的目录
将需要的源码包 jdk和tomcat包,放入到tomcat目录下
或者,jdk环境,用物理机上面的,做一下挂载即可,考虑到jdk包比较大
cat Dockerfile
FROM centos:7
MAINTAINER Mr.JingWen
RUN yum install -y wget telnet vim iproute iputils gcc gcc-c++ make cmake
RUN useradd -u 3200 tomcat
ADD source_file/jdk1.8.0_111.tgz /usr/local
ENV TZ="Asia/Shanghai" tomcat_dir="/usr/local/tomcat" JAVA_HOME="/usr/local/jdk1.8.0_111" tomcat_v="9.0.20"
ENV CLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/jre/lib/rt.jar
ENV PATH=$JAVA_HOME/bin:$PATH:$HOME/bin:$JAVA_HOME/jre/bin:/usr/local/libexec/git-core
ENV LD_LIBRARY_PATH=$JAVA_HOME/jre/bin:/usr/local/lib
ENV export JAVA_HOME CLASSPATH PATH LD_LIBRARY_PATH
ADD source_file/apache-tomcat-${tomcat_v}.tar.gz /usr/local/
RUN mv /usr/local/apache-tomcat-${tomcat_v} ${tomcat_dir}
ADD source_file/cronolog-1.6.2.tar.gz /usr/local/src
WORKDIR /usr/local/src/cronolog-1.6.2
RUN ./configure && make -j 4 && make install
COPY source_file/catalina.sh ${tomcat_dir}/bin
RUN chmod +x ${tomcat_dir}/bin/*.sh \
&& chmod +x ${JAVA_HOME}/bin/* \
&& chown -R tomcat.tomcat ${tomcat_dir}
USER tomcat
WORKDIR ${tomcat_dir}
EXPOSE 8005 8080 8009
ENTRYPOINT ["./bin/catalina.sh", "run"]
2.5 mysql的Dockerfile文件配置
注意:mysql的Dockerfile 可以自己编译,亦可以用镜像直接启动即可,方法和lnmp里面的安装启动方法是一样的
进入到mysql目录
mkdir -p conf data
再进入到conf目录下,配置my.cnf文件
cat my.cnf
[mysqld]
user=mysql
port=3306
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
pid-file=/var/run/mysql/mysql.pid
log_error=/var/log/mysql/error.log
character_set_server = utf8
max_connections=3600
2.6 docker-copose-lanmt.yml配置文件
附: lanmt环境目录
[root@localhost compose_lanmt]# pwd
/app/docker_web/compose_lanmt
[root@localhost compose_lanmt]# ll
总用量 20
drwxr-xr-x 6 3200 3200 4096 7月 19 12:08 apache
-rw-r--r-- 1 3200 3200 2339 7月 19 15:07 docker-compose-lanmt.yml
drwxr-xr-x 4 3200 3200 4096 1月 19 2018 mysql
drwxr-xr-x 5 3200 3200 4096 7月 19 15:45 nginx
drwxr-xr-x 8 3200 3200 4096 7月 19 15:52 tomcat
docker-compose.yml 文件所在位置和nginx,myslq,tomcat目录同级
管理多个容器的工具,执行一条命令即可安装启动多个容器
- docker-copose-lanmt.yml配置如下
cat docker-compose-lanmt.yml
#===============================================
#========== 定义了版本信息 ===============
version: '3'
#===============================================
#=========== Network Service ===============
networks:
lanmt:
driver: bridge
ipam:
config:
- subnet: 192.168.30.0/24
#===============================================
#========= 定义了服务的配置信息 ==========
services:
#Nginx Service
compose-nginx-proxy:
hostname: compose-nginx-proxy
container_name: compose-nginx-proxy
restart: always
image: yangsir/nginx-proxy:1.14.2
build:
context: ./nginx
dockerfile: Dockerfile
ports:
- 82:80
networks:
lanmt:
ipv4_address: 192.168.30.11
depends_on:
- compose-tomcat01
- compose-tomcat02
environment:
TZ: Asia/Shanghai
volumes:
- ./nginx/config/conf82:/usr/local/nginx/conf
- ./nginx/applog:/applog
#apache Service
compose-apahce-proxy:
hostname: compose-apache-proxy
container_name: compose-apache-proxy
restart: always
image: yangsir/apache-proxy:2.4.39
build:
context: ./apache
dockerfile: Dockerfile
ports:
- 83:80
networks:
lanmt:
ipv4_address: 192.168.30.12
depends_on:
- compose-tomcat01
- compose-tomcat02
environment:
TZ: Asia/Shanghai
volumes:
- ./apache/config/conf83:/usr/local/httpd/conf
- ./apache/applog:/applog
#tomcat01 Service
compose-tomcat01:
hostname: compose-tomcat01
container_name: compose-tomcat01
restart: always
image: yangsir/tomcat:9.0.20
build:
context: ./tomcat
dockerfile: Dockerfile
networks:
lanmt:
ipv4_address: 192.168.30.13
environment:
TZ: Asia/Shanghai
volumes:
- ./tomcat/config/conf-01:/usr/local/tomcat/conf
- ./tomcat/applog:/usr/local/tomcat/logs
- ./tomcat/webapps/tomcat01/ROOT:/usr/local/tomcat/webapps/ROOT
#tomcat02 Service
compose-tomcat02:
hostname: compose-tomcat02
container_name: compose-tomcat02
restart: always
image: yangsir/tomcat:9.0.20
build:
context: ./tomcat
dockerfile: Dockerfile
networks:
lanmt:
ipv4_address: 192.168.30.14
environment:
TZ: Asia/Shanghai
volumes:
- ./tomcat/config/conf-02:/usr/local/tomcat/conf
- ./tomcat/applog:/usr/local/tomcat/logs
- ./tomcat/webapps/tomcat02/ROOT:/usr/local/tomcat/webapps/ROOT
下载地址:
https://cdn.mysql.com/Downloads/Connector-J/mysql-connector-java-5.1.47.tar.gz
注意:
1) 编写yml文件和tomcat的Dockerfile的时候,需要注意下,jdk的环境变量
2) 默认如上安装后,是连接不上数据库的,需要一个连接数据库的jar包,mysql-connector-java-5.1.31.jar,上传到tomcat/lib下面
3) 修改数据库的连接配置
eg: 配置数据库如下
cat db.properties
jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://mysql:3306/gongyike?useUnicode=true&characterEncoding=utf-8&autoReconnect=true&zeroDateTime\
Behavior=convertToNull
jdbc.username = root
jdbc.password = 123456
jdbc.maxActive = 100
jdbc.maxWait = 20000
jdbc.maxIdle = 2000
jdbc.defaultAutoCommit = false
jdbc.minPoolSize = 10
jdbc.maxPoolSize = 100
jdbc.acquireIncrement = 3
jdbc.initialPoolSize = 20
注意:数据库连接的配置文件,主机名有三种配置方法,均能实现
- 通过mysql的容器名来连接
- 通过mysql容器的主机名连接
- 通过映射到宿主机的端口来连接
如上面的配置,端口前面的mysql,为容器主机名
2.7 启动lanmt环境
启动方法雷同 lnmp 的启动
前台执行:
docker-compose -f docker-compose.yml up
后台执行:
docker-compose -f docker-compose.yml up -d
常用命令:(省略-f)
docker-compose rm/down/pause/unpause/stop/start/restart/logs/up
帮助命令:
docker-compose -h
删除所有未被任何容器关联引用的卷“
docker volume rm $(docker volume ls -qf dangling=true)
删除所有已退出的容器
docker rm -v $(docker ps -aq -f status=exited)
删除所有状态为dead的容器
docker rm -v $(docker ps -aq -f status=dead)
Docker部署web环境之Lanmt的更多相关文章
- Docker部署web环境之Lanmp
1. 案例一 整套项目多容器分离通过docker-compose部署lanmp环境 中方文档参考网址: docker/kubernets网址 http://www.dockerinfo.net/doc ...
- Docker部署web环境之总结篇
3. 问题总结 问题总结1: 数据库容器时区问题以及环境变量的安全控制 docker-compose.yml文件中的环境变量,可以配置的变量方法有两种: 方法一:docker-compose.yml文 ...
- Docker部署web项目-jar包
一.Docker部署web项目-jar包 ①搜索mysql镜像 docker search mysql ②拉取镜像至本地仓库(本文选取的mysql镜像5.7版本) docker pull mysql/ ...
- Docker部署SDN环境
2014-12-03 by muzi Docker image = Java class Docker container = Java object 前言 5月份的时候,当我还是一个大学生的时候,有 ...
- docker部署-windows环境
docker部署-windows环境 1. docker windows 1.1. 安装 win7或者win8需要利用docker toolbox来安装,其是一个docker工具集,w ...
- Linux Ubuntu从零开始部署web环境及项目 -----部署项目 (三)
上一篇讲了如何在linux搭建web环境,这边将如何部署项目. 1,打包项目包 2,上传项目包 将.war项目包通过xftp上传到tomcat目录wabapps目录下 3,启动项目 通过xshell命 ...
- Linux Ubuntu从零开始部署web环境及项目 -----tomcat+jdk+mysql (二)
上一篇介绍如何在linux系统下搭建ssh环境 这篇开始将如何搭建web服务器 1,下载文件 在官网下载好 tomcat.jdk.mysql的linux压缩包 后缀名为.tar.gz 并通过xftp上 ...
- docker部署Javaweb环境数据库连接问题
最近在docker部署了一个Javaweb项目运行的环境,在容器中部署了mysql和Javaweb项目,但是本地可以跑项目,放到容器里面不行. 具体报错内容是不能访问数据库. Could not ge ...
- Linux Ubuntu从零开始部署web环境及项目 -----快捷键设置(四)
上篇将了如何在linux部署web项目,这篇介绍如何设置常用快捷键 一.路径快捷键设置 临时快捷键设置: 执行XShel,输入: alias 'aa=cd /etc/sysconfig' ...
随机推荐
- Python面向对象初始(三大特征,多态,继承,封装)
Python面向对象的初始 面向过程的程序设计的核心是过程(流水线式思维),过程即解决问题的步骤,面向过程的设计就好比精心设计好一条流水线,考虑周全什么时候处理什么东西. 优点是:极大的降低了写程序的 ...
- Struts2后台使用Request和Session方法
在Struts2后台,如果需要使用Request和Session的话,可以通过下面的方法: 主要是利用了com.opensymphony.xwork2.ActionContext类以及ora.apac ...
- C#编程—第四天
五一放假三天 ······续写第三天的if else-if.if语句的嵌套.很多例题(还有很多没有整理好的) 5.4下午初步学习循环语句for 老师布置了几个小练习题 循环语句 循环:可以反复执行某段 ...
- 关于 ioctl 函数
ioctl函数是用于控制的设备的接口 1.底层: long (*unlocked_ioctl) (struct file *filp, unsigned int cmd, unsigned long ...
- centos 搭建本地YUM源并使用apache共享YUM源
搭建本地YUM源 1.挂载镜像 2.搭建本地YUM源 删除多余repo文件保留一个就行 本地YUM源就搭建好了 yum repolist 查看yum源 3.使用apache共享YUM源 YUM服务器配 ...
- 基于mybatis拦截器分表实现
1.拦截器简介 MyBatis提供了一种插件(plugin)的功能,但其实这是拦截器功能.基于这个拦截器我们可以选择在这些被拦截的方法执行前后加上某些逻辑或者在执行这些被拦截的方法时执行自己的逻辑. ...
- bootStrap @media 用法
一. @media 格式 @media all and (min-width:xxx) and (max-width:xxx) (亦可以写成@media all and (min-width:xxx) ...
- html+jquery+php实现文件上传全过程
本例子采用html+jquery+php实现上传功能 html部分 <!DOCTYPE html> <html> <head> <meta charset=& ...
- 目标检测中roi的有关操作
1.roi pooling 将从rpn中得到的不同Proposal大小变为fixed_length output, 也就是将roi区域的卷积特征拆分成为H*W个网格,对每个网格进行maxpooling ...
- 工具类Collections、Arrays(传入的是数组)
Collections类: 1. Collections.sort(list) //对list集合进行排序前提是 list里面存储的对象已经实现了 comparable接口 2. Collecti ...