1. 程式人生 > >docker之-nginx+tomcat+mysql

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語法:
#https://blog.csdn.net/liguangxianbin/article/details/79492866

[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_data