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' ...
随机推荐
- JQuery通过URL获取图片宽高
var img_url ='https://www.baidu.com/img/bd_logo1.png'; // 创建对象 var img = new Image(); // 改变图片的src im ...
- shell unique
由于uniq命令只能对相邻行进行去重复操作,所以在进行去重前,先要对文本行进行排序,使重复行集中到一起 1.文本行去重 (1)排序由于uniq命令只能对相邻行进行去重复操作,所以在进行去重前,先要对文 ...
- 4python 解析库的使用
4.1 xml库 https://cuiqingcai.com/5545.html XPath,全称XML Path Language,即XML路径语言,它是一门在XML文档中查找信息的语言.它最初是 ...
- JDBC中如何进行事务处理?
Connection提供了事务处理的方法,通过调用setAutoCommit(false)可以设置手动提交事务:当事务完成后用commit()显式提交事务:如果在事务处理过程中发生异常则通过rollb ...
- springboot 2.x相关配置
1.在配置文件中进行配置 #############指定项目中所有的日期类型返回json格式########### spring.jackson.date-format=yyyy-MM-dd HH:m ...
- cpanle/Apache 强制http跳转到https
因为租的虚拟主机是使用Cpanel,按照网上找的文章,处理的步骤如下: 打开Cpanel面板-文件管理器-设置(在页面的右上角)-勾选显示隐藏文件(dotfiles)-save . 找到网站所在的目录 ...
- jsp获取url路径的方法
如果你请求的URL是 http://localhost:8080/demo/Index.jsp request.getScheme() //输出:http request.getServerName ...
- MyBatis注解开发-@Insert和@InsertProvider(@Select、@SelectProvider雷同)
@Insert和@InsertProvider都是用来在实体类的Mapper类里注解保存方法的SQL语句.不同的是,@Insert是直接配置SQL语句,而@InsertProvider则是通过SQL工 ...
- 【POM】maven profile切换正式环境和测试环境
有时候,我们在开发和部署的时候,有很多配置文件数据是不一样的,比如连接mysql,连接redis,一些properties文件等等 每次部署或者开发都要改配置文件太麻烦了,这个时候,就需要用到mave ...
- Database基础(一):构建MySQL服务器、 数据库基本管理 、MySQL 数据类型、表结构的调整
一.构建MySQL服务器 目标: 本案例要求熟悉MySQL官方安装包的使用,快速构建一台数据库服务器: 安装MySQL-server.MySQl-client软件包 修改数据库用户root的密码 确认 ...