Docker 綜合實驗php
|
實驗拓撲:html 【調度器】mysql Keepalived + nginx nginx 一.Keepalived服務的安裝配置:web 關閉LVS服務器的ipv4代理和轉換的功能。sql vim /etc/sysctl.confdocker 修改數據庫 net.ipv4.ip_forward = 1vim 添加:api net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.eth0.send_redirects = 0 sysctl -p //刷新內核文件 4.安裝Keepalived的依賴關係 yum -y install kernel-devel openssl-devel popt-devel 5.從y2c裏解壓keepalived軟件,進行編譯,編譯會自動生成一個服務文件,只要將服務加入系統服務裏,並開啓便可。 cd /root tar zxf keepalived-1.2.13.tar.gz -C /usr/src cd /usr/src/keepalived-1.2.13/ ./configure --prefix=/ --with-kernel-dir=/usr/src/kernels/2.6.32-431.el6.x86_64/ && make && make install chkconfig --add keepalived chkconfig keepalived on 6.配置文件模板的備份,防止改壞。 cd /etc/keepalived/ cp keepalived.conf keepalived.conf.bak 7.編輯keepalived 工具的配置文件進行如下修改。 而且重啓服務。 vim /etc/keepalived/keepalived.conf global_defs {
router_id LVS_DEVEL_r1 } vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 51 priority 100 advert_int 1 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.6.254 } notify_master "/etc/init.d/nginx start" notify_backup "/etc/init.d/nginx stop" notify_fault "/etc/init.d/nginx stop" }
備註:備份keepalived的配置基本相同,須要修改的地方是: router_id LVS_DEVEL_r2 state BACKUP priority 50
啓動服務: service keepalived start
二.nginx服務安裝配置 yum -y install pcre-devel zlib-devel
useradd -M -s /sbin/nologin nginx
cd /root
tar zxf nginx-1.6.0.tar.gz -C /usr/src
cd /usr/src/nginx-1.6.0/
./configure --prefix=/usr/local/nginx --user=nginx --group=nginx --with-http_stub_status_module make && make install
ln -s /usr/local/nginx/sbin/* /etc/init.d/nginx 編輯配置文件 vim /usr/local/nginx/conf/nginx.conf 去掉註釋: user nobody; error_log logs/error.log; error_log logs/error.log notice; error_log logs/error.log info; pid logs/nginx.pid; 添加: 33 #gzip on; 34 upstream nginx_server { 35 server 192.168.6.110:32777 weight=1; 36 server 192.168.6.110:32773 weight=1; 37 }
46 location / { 47 root html; 48 index index.html index.htm; 49 proxy_pass http://nginx_server; 50 } 注:前邊的數字是行數
啓動nginx服務: nginx 重載nginx服務 killall -s HUP nginx 監聽nginx端口,看到監聽的nginx爲80便可。 netstat -anpt | grep nginx
【nfs】 注意:先作nfs,而後將docker host 要映射到容器的目錄/www進行掛載,而後在作docker的web容器,這樣的話就能夠從nfs映射到容器裏了,不然nfs只能映射到docker host ,映射不到容器: 建立共享目錄,設置權限,而後啓動nfs服務 mkdir /www chown -R nginx.nginx /www vim /etc/exports 添加: /www 192.168.6.0/24 (rw,no_root_squash,sync)
systemctl restart rpcbind systemctl restart nfs
而後將docker 主機上的卷容器掛載到nfs服務器上 mount -t nfs 192.168.6.113:/www /www/
|
【web集羣的配置】 Docker 主機的配置 1.清空放火牆,關閉沙盒 Iptables -F setenforce 0 2.開啓ipv4轉發 vim /etc/sysctl.conf net.ipv4.ip_forward = 1 sysctl -p
3.建立docker的bridge網絡,須要注意的是不能和本機是一個網段,回造成地址衝突。 docker network create --driver bridge --subnet 192.168.102.0/24 --gateway 192.168.102.1 my_net 查看自定義網絡: docker network ls 4.測試這個時候docker host是否能夠鏈接外網 ping www.baidu.com 5.解壓nginx和php的tar包 docker images tar load -i php.tar docker load -i php.tar docker images 6.建立物理的映射目錄,用來同步nginx的首頁數據,並建立nginx用戶,用來給物理目錄設置權限,讓nginx認爲全部的目錄都是本身的本地目錄,方便數據同步。 mkdir /www useradd nginx chown -R nginx.nginx /www 7.建立卷容器,講物理目錄映射到nginx和php容器裏,用來同步數據。 docker create --name vc_data -v /www/:/www/ busybox 8.建立php容器,並進行配置。 docker run -itd --name php-y -p 9000 -p 80 --network my_net --volumes-from vc_data 985e8dfa17da docker ps docker exec -it php-y /bin/bash 進入容器後的配置: (1)查看IP地址,是不是自定義的網段IP地址,而後測試是否能夠ping通外網驗證網絡是否暢通。 ifconfig 192.168.102.2 (2)因爲其餘的配置在作php的tar包的時候已經作了,因此如今能夠直接修該配置文件了。 vim /usr/local/php/etc/php-fpm.conf 修改: user = nginx group = nginx listen = 192.168.102.2:9000 (3)優化啓動服務的命令。 cp /usr/src/php-5.3.28/sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm chmod +x /etc/init.d/php-fpm chkconfig php-fpm on (4)建立nginx用戶,由於指定了php-fpm文件啓動使用的用戶,因此要建立。 useradd nginx (5)啓動php-fpm服務,並查看端口監聽是否爲9000 /etc/init.d/php-fpm start netstat -anpt | grep php-fpm
9.建立nginx容器,並進行配置。 docker run -itd --name web1 -p 80 -p 9000 --network my_net --volumes-from vc_data 2ae963791a66 docker run -itd --name web2 -p 80 -p 9000 --network my_net --volumes-from vc_data 2ae963791a66 86 docker run -itd --name web3 -p 80 -p 9000 --network my_net --volumes-from vc_data 2ae963791a66 docker exec -it web1 /bin/bash 注意:三臺nginx配置相同 (1)給映射進來的/www的目錄設置權限, chown -R nginx.nginx /www (2)安裝查看ip和編輯文本的工具 yum -y install vim net-tools (3)編輯nginx的配置文件 vim /usr/local/nginx/conf/nginx.conf 修改: 去掉註釋: user nobody; error_log logs/error.log; pid logs/nginx.pid; 修改: 43 location / { 44 root /www; ——nginx的物理目錄 45 index index.php index.html index.htm; ——php的首頁文件 72 location ~ \.php$ { 73 root /www; ——nginx服務的根目錄 74 fastcgi_pass 192.168.102.2:9000; ——監聽php容器的ip+端口 75 fastcgi_index index.php; 76 fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; 77 include fastcgi.conf; 78 }
(4)安裝nginx服務啓動的工具psmisc yum -y install psmisc (5)重載nginx服務,要是重啓的話則直接退出容器而且關閉了容器。 killall -s HUP nginx netstat -anpt | grep ngixn
10.驗證nginx是否能夠鏈接php-fpm 在docker host 的共享目錄/www建立php的默認頁面,而後能夠到nginx和php的容器裏查看,是否將目錄映射到了裏邊,須要注意的是在這兩個容器裏,/www目錄的權限並非nginx,而是docker主機的nginx的id號,可是不影響。 cd /www vim index.php <?php phpinfo(); ?>
11.驗證是否鏈接成功 經過docker ps 查看映射nginx容器的docker host的隨機端口,而後訪問docker host的IP地址加nginx的80映射出來的隨機端口能夠訪問nginx是否鏈接到了php容器。 firefox 192.168.6.110:32773
建立完成的鏡像和容器:
【數據庫】 setenforce 0 iptables -F systemctl stop firewall yum -y remove mariiadb-server mariadb yum -y remove mariadb-server mariadb rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm yum -y install mysql-community-server systemctl start mysqld mysqladmin -u root password 123.com mysql -u root -p123.com create database luntan; grant all on luntan.* to 'root'@'%' identified by '123.com'; flush privileges;
ifconfig 驗證:在php的容器上進行數據庫的鏈接測試,而後就能夠安裝論壇 mysql -u root -h 192.168.6.113 -p123.com
客戶端:經過訪問keepalived的VIP地址,而後就能夠安裝論壇了 Firefox 192.168.6.254 |