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的更多相关文章

  1. Docker部署web环境之Lanmp

    1. 案例一 整套项目多容器分离通过docker-compose部署lanmp环境 中方文档参考网址: docker/kubernets网址 http://www.dockerinfo.net/doc ...

  2. Docker部署web环境之总结篇

    3. 问题总结 问题总结1: 数据库容器时区问题以及环境变量的安全控制 docker-compose.yml文件中的环境变量,可以配置的变量方法有两种: 方法一:docker-compose.yml文 ...

  3. Docker部署web项目-jar包

    一.Docker部署web项目-jar包 ①搜索mysql镜像 docker search mysql ②拉取镜像至本地仓库(本文选取的mysql镜像5.7版本) docker pull mysql/ ...

  4. Docker部署SDN环境

    2014-12-03 by muzi Docker image = Java class Docker container = Java object 前言 5月份的时候,当我还是一个大学生的时候,有 ...

  5. docker部署-windows环境

    docker部署-windows环境 1.      docker windows 1.1.    安装 win7或者win8需要利用docker toolbox来安装,其是一个docker工具集,w ...

  6. Linux Ubuntu从零开始部署web环境及项目 -----部署项目 (三)

    上一篇讲了如何在linux搭建web环境,这边将如何部署项目. 1,打包项目包 2,上传项目包 将.war项目包通过xftp上传到tomcat目录wabapps目录下 3,启动项目 通过xshell命 ...

  7. Linux Ubuntu从零开始部署web环境及项目 -----tomcat+jdk+mysql (二)

    上一篇介绍如何在linux系统下搭建ssh环境 这篇开始将如何搭建web服务器 1,下载文件 在官网下载好 tomcat.jdk.mysql的linux压缩包 后缀名为.tar.gz 并通过xftp上 ...

  8. docker部署Javaweb环境数据库连接问题

    最近在docker部署了一个Javaweb项目运行的环境,在容器中部署了mysql和Javaweb项目,但是本地可以跑项目,放到容器里面不行. 具体报错内容是不能访问数据库. Could not ge ...

  9. Linux Ubuntu从零开始部署web环境及项目 -----快捷键设置(四)

    上篇将了如何在linux部署web项目,这篇介绍如何设置常用快捷键 一.路径快捷键设置 临时快捷键设置:  执行XShel,输入: alias 'aa=cd /etc/sysconfig'       ...

随机推荐

  1. 四、IDS4建立Authorization server和Client

    一.准备 创建一个名为QuickstartIdentityServer的ASP.NET Core Web 空项目(asp.net core 2.2),端口5000创建一个名为Api的ASP.NET C ...

  2. yum 仓库搭建与源码包安装实战

    目录 一.yum 仓库自建示例: 二.源码包安装实践 基础环境 服务端配置 下载及安装fpm软件 客户端: 一.yum 仓库自建示例: 1.安装ftp服务 yum -y install vsftpd ...

  3. 【LeetCode】Array

    [11] Container With Most Water [Medium] O(n^2)的暴力解法直接TLE. 正确的解法是Two Pointers. O(n)的复杂度.保持两个指针i,j:分别指 ...

  4. 0xC0000005: 写入位置 0x00000000 时发生访问冲突的解决办法(转)

    上面的意识就是你吧值付给了不该赋给的变量,或者说你把值付给了不能付给的变量(或者常量) ()最简单也最直接的错误可能就是scanf()的问题,我们都知道输入的时候都是scanf("%格式&q ...

  5. Django创建工程项目以及工作原理

    一.Django 创建工作项目 1.创建 North 工程项目 (1)使用CMD命令行,切换到指定路径 django-admin.py startproject north (2)使用pycharm创 ...

  6. js 页面向下滚动

    向下滚动一段距离 距离顶部距离 var scrollTop=document.documentElement.scrollTop||document.body.scrollTop; <scrip ...

  7. css强制换行和超出部分隐藏实现

    一.强制换行 1 word-break: break-all; 只对英文起作用,以字母作为换行依据. 2 word-wrap: break-word; 只对英文起作用,以单词作为换行依据. 3 whi ...

  8. iSkysoft iMedia Converter Deluxe Mac如何制作视频?视频格式转换工具制作动图的方法

    使用iSkysoft iMedia Converter Deluxe Mac如何制作视频?使用视频格式转换工具,你可以轻松进行动图或视频的制作,也可以把你喜欢的视频的某一段提取出来,制作成你自己风格的 ...

  9. vue-cli脚手架快速搭建项目

    前言 vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目. 准备工作 在搭建一个vue项目之前,需要先安装好node.js和cnpm. 虽然np ...

  10. 【leetcode】947. Most Stones Removed with Same Row or Column

    题目如下: On a 2D plane, we place stones at some integer coordinate points.  Each coordinate point may h ...