docker之-nginx+tomcat+mysql

docker  实现nginx+tomcat+mysql
[一].创建数据目录

1.创建nginx数据目录
mkdir -p /app/data/nginx/{conf,conf.d,html,logs}
2.创建mysql数据目录
mkdir -p /app/data/mysql/{conf,mysql_init_data}
3.创建tomcat数据目录
mkdir -p /app/data/tomcat

[二].镜像构建

#nginx,tomcat,mysql 都可以自建dockerfile构建,由于个人构建镜像偏大等原因。所以这里nginx,mysql采用官方镜像,tomcat 通过dockerfile自行构建。

构建tomcat镜像
创建dockerfile文件及存放目录
mkdir -p /app/Docker/Tomcat
cd /app/Docker/Tomcat/
cat>/app/Docker/Tomcat/Dockerfile<<EOF
FROM centos
#指定基础镜像来自于哪里
MAINTAINER Tomcat7 images
#进行说明
ADD jdk1.8.0_144/ /opt/jdk
#添加jdk
ADD apache-tomcat-7.0.75 /opt/tomcat
#添加tomcat
#COPY xxx.war /opt/tomcat/webapps/
#war包可进行挂在或者直接拷贝
EXPOSE 8080
#开发端口
RUN /usr/bin/sed -i '107a JAVA_HOME=/opt/jdk' /opt/tomcat/bin/catalina.sh
#配置环境变量
CMD ["/bin/bash","-c","/opt/tomcat/bin/catalina.sh run"]
#开启Tomcat
EOF

构建镜像:
docker build -t tomcat7:01 /app/Docker/Tomcat
docker images查看镜像

[三].创建tomcat数据文件

#用于与镜像内文件格式等保持一致,这里我们先启动一个容器将需要后续改动的配置拷贝出来
cd /app/tomcat
docker run -d --name "tomcat01" tomcat:01
#拷贝出需要后续配置的文件(保持与镜像内文件格式相同)
docker cp -a tomcat01:/opt/tomcat/webapps ./
docker cp -a tomcat01:/opt/tomcat/logs ./
docker cp -a tomcat01:/opt/tomcat/bin ./
docker cp -a tomcat01:/opt/tomcat/conf ./
docker rm -f tomcat01
echo "欢迎使用tomcat7-jdk8">>/app/data/tomcat/webapps/ROOT/index.html
docker rm -f tomcat01

[四].创建nginx配置文件

cat >/app/data/nginx/conf/nginx.conf<<EOF
user  nginx;
worker_processes  1;
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       /etc/nginx/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  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #启用gzip
    gzip on;
    #需要压缩文件的最小尺寸,单位是B
    gzip_min_length  1000;
    #gzip文件缓存大小
    gzip_buffers     4 8k; # 4和8之间有个空格的啊
    #gzip压缩文件格式,以下涵盖了一般所需的类型
    gzip_types       text/plain application/x-javascript text/css application/xml application/javascript application/json;
    #gzip压缩等级,数值越高压缩得越狠,也越占资源
    gzip_comp_level 3;
    include /etc/nginx/conf.d/*.conf;
}
EOF
cat >/app/data/nginx/conf.d/bestyunyan.culb.conf<<EOF
upstream my_server{
        #ip_hash;
        server tomcat01:80;
        #server 124.207.22.13:8080;
        #hash $request_uri; 第三方模块
}
 
server{
        listen  80;
        server_name 172.16.235.11;
 
        location / {
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forward-For $proxy_add_x_forwarded_for;
                proxy_set_header Host $http_host;
                proxy_set_header X-Nginx-Proxy true;
                proxy_pass http://my_server;
                proxy_redirect off;
        }
}

EOF

[五].创建mysql配置文件

cat >/app/data/mysql/conf/my.cnf<<EOF
[mysqld]
user=mysql
character-set-server=utf8
default_authentication_plugin=mysql_native_password
max_connections=3000
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 
[client]
default-character-set=utf8
[mysql]
default-character-set=utf8
EOF
cat /app/data/mysql/mysql_init_data/init.sql
#创建数据库
 DROP database IF EXISTS `wyl_database`;
 create database `wyl_database` default character set utf8 collate utf8_general_ci;
#切换到test_data数据库
 use wyl_database; 
#创建建表 
 DROP TABLE IF EXISTS `person`; 
CREATE TABLE `user` (    
    `id` bigint(20) NOT NULL,     
    `name` varchar(255) DEFAULT NULL,     
    `age` bigint(20) NOT NULL,    
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 
#插入数据插 
INSERT INTO `user` (`id`,`name`,`age` ) VALUES    (0,'wangyunlong',18);

[6].创建docker-compose文件

#三版本:
version: '3' #指定是docker compose版本
services:    #指定服务

  nginx: #容器名
    container_name: nginx
    image: nginx #镜像名如果没有此镜像会利用build指定的位置进行构建.镜像并启动
    ports: #指定端口
      - "80:80"
    volumes:
     - "/app/data/nginx/html:/usr/share/nginx/html"
     - "/app/data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf"
     - "/app/data/nginx/conf.d:/etc/nginx/conf.d"
     - "/app/data/nginx/logs:/var/log/nginx"
     
    networks:
      mall-network:
        aliases:
          - nginx
    depends_on:
      - tomcat

  tomcat: #容器名
    container_name: tomcat
    image: tomcat:01 #镜像名如果没有此镜像会利用build指定的位置进行构建.镜像并启动
    ports: #指定端口
      - "8080:8080"
    volumes:
      - "/app/data/tomcat/webapps:/opt/tomcat/webapps"
      - "/app/data/tomcat/bin:/opt/tomcat/bin"
      - "/app/data/tomcat/conf:/opt/tomcat/conf"
      - "/app/data/tomcat/logs:/opt/tomcat/logs"   
    networks:
      mall-network:
        aliases:
          - tomcat
    depends_on:
      - mysql

  mysql: #容器名
    container_name: mysql
    image: mysql:5.7.17 #镜像名如果没有此镜像会利用build指定的位置进行构建.镜像并启动
    ports: #指定端口
      - "3306:3306"
    volumes:
      - "/app/data/mysql/mysql_init_data:/docker-entrypoint-initdb.d"  
      - "/app/data/mysql/conf/my.cnf:/etc/my.cnf"
      - web_data:/var/lib/mysql
    environment:
      - MYSQL_USER="wyl"
      - MYSQL_PASSWORD="wylpwd123456"
      - MYSQL_ROOT_PASSWORD="rootpwd123456"
    networks:
      mall-network:
        aliases:
          - mysql

volumes:
    web_data:
#通过docker volume ls 列出数据卷
#docker volume inspect  xxx #查看持久化到本地的具体位置

networks:
  mall-network:
    driver: bridge

#以上volumes语法采用3版本,2版本请参考:
#https://stackoverflow.com/questions/45494746/docker-compose-volumes-from-usage-example
#compose.yml语法:
#http://www.cnblogs.com/magic-chenyang/p/7729307.html

[7]启动容器

docker-compose up -d #后台启动
docker volume ls #查看数据卷
docker volume inspect test_web_data|grep Mount #查看持久化目录
[root@h test]# docker-compose up -d
Creating mysql ... done
Creating tomcat ... done
Creating nginx  ... done
[root@h test]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
bf47d42838d6        nginx               "nginx -g 'daemon of…"   12 seconds ago      Up 11 seconds       0.0.0.0:80->80/tcp       nginx
7bb8a6f38991        tomcat:01           "/bin/bash -c '/opt/…"   13 seconds ago      Up 12 seconds       0.0.0.0:8080->8080/tcp   tomcat
73a5ef5f29f9        mysql:5.7.17        "docker-entrypoint.s…"   14 seconds ago      Up 13 seconds       0.0.0.0:3306->3306/tcp   mysql
[root@h test]# docker volume ls
DRIVER              VOLUME NAME
local               test_web_data
[root@h test]# docker volumes inspect test_web_data|grep Mount
docker: 'volumes' is not a docker command.
See 'docker --help'
[root@h test]# docker volume inspect test_web_data|grep Mount
        "Mountpoint": "/var/lib/docker/volumes/test_web_data/_data",
[root@h test]# ll /var/lib/docker/volumes/test_web_data/_data
total 188480
-rw-r----- 1 polkitd input       56 Apr 17 17:52 auto.cnf
-rw------- 1 polkitd input     1679 Apr 17 17:52 ca-key.pem
-rw-r--r-- 1 polkitd input     1074 Apr 17 17:52 ca.pem
-rw-r--r-- 1 polkitd input     1078 Apr 17 17:52 client-cert.pem
-rw------- 1 polkitd input     1675 Apr 17 17:52 client-key.pem
-rw-r----- 1 polkitd input     1314 Apr 17 17:52 ib_buffer_pool
-rw-r----- 1 polkitd input 79691776 Apr 17 18:52 ibdata1
-rw-r----- 1 polkitd input 50331648 Apr 17 18:52 ib_logfile0
-rw-r----- 1 polkitd input 50331648 Apr 17 17:52 ib_logfile1
-rw-r----- 1 polkitd input 12582912 Apr 17 18:52 ibtmp1
drwxr-x--- 2 polkitd input     4096 Apr 17 17:52 mysql
drwxr-x--- 2 polkitd input     4096 Apr 17 17:52 performance_schema
-rw------- 1 polkitd input     1679 Apr 17 17:52 private_key.pem
-rw-r--r-- 1 polkitd input      451 Apr 17 17:52 public_key.pem
-rw-r--r-- 1 polkitd input     1078 Apr 17 17:52 server-cert.pem
-rw------- 1 polkitd input     1675 Apr 17 17:52 server-key.pem
drwxr-x--- 2 polkitd input    12288 Apr 17 17:52 sys
drwxr-x--- 2 polkitd input     4096 Apr 17 17:52 wyl_database

 

转载于:https://my.oschina.net/wangyunlong/blog/3038330

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值