docker之-nginx+tomcat+mysql
阿新 • • 發佈:2019-04-17
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