是時候Docker: 7 部署PHP+Vue項目

本文將介紹如何使用docker鏡像 快速部署 php+vue 項目.文末提供源碼地址php

本地建立Docker映射目錄

—— vue_demo         # Demo項目
—— php_vue
—— docker-compose.yaml
—— nginx
———— apps           # 項目代碼
———— conf           # nginx配置文件
—————— nginx.conf
———— log            # nginx
———— vhost          # 虛擬機配置目錄
—————— default.conf
複製代碼

建立docker-compose.yaml

version : "3" #docker-compose的版本
services: #容器的集合
 mysql: #項目名稱
 image: mysql:5.7 #鏡像名稱,若是是經過dockerfile建立的可使用build屬性
 container_name: mysql  #容器名稱,若是沒有這個屬性的話,docker-compose會隨機分配一個名字給容器
 privileged: true    #容許操做的表示,若是不加的話會出現相似,permission deny的錯誤
 ports:
 - 3307:3306  #開放宿主機和容器的映射端口
 environment:
 MYSQL_ROOT_PASSWORD: root  #mysql鏡像中的環境變量
 php:
 image: php:7.2-fpm
 container_name: php
 privileged: true
 ports:
 - 9001:9000
 links:
 - mysql  #容器之間進行關聯
 volumes:
 - ./nginx/apps:/usr/share/nginx/html  #掛載卷,須要注意的是,php在以模塊的形式加載到nginx的時候,須要他們兩個的目錄結構一致,不然nginx沒法加載php,可是 html等靜態問價能夠正常訪問。
 nginx:
 image:  nginx
 container_name: nginx
 privileged: true
 links:
 - php
 ports:
 - 8088:80
 volumes:
 - ./nginx/vhost:/www/nginx/vhost
 - ./nginx/conf/nginx.conf:/etc/nginx/nginx.conf
 - ./nginx/log:/www/nginx/log
 - ./nginx/apps:/usr/share/nginx/html

 phpmyadmin:
 image: phpmyadmin/phpmyadmin
 container_name: phpmyadmin
 privileged: true
 links:
 - mysql
 ports:
 - 7001:80
 environment:
 MYSQL_ROOT_PASSWORD: root
 PMA_HOST: mysql

 redis:
 image: redis:4.0.14
 container_name: redis
 privileged: true
 ports:
 - 6379:6379
 mongo:
 image: mongo
 restart: always
 ports:
 - 27017:27017
複製代碼

創建容器,執行命令 docker-compose up -dhtml

建立前端項目

使用vue create vue_demovue ui建立項目vue_demo 前端

打包項目cd vue_demo && npm run build,複製 dist文件夾到 php_vue/nginx/appsvue

測試 curl localhost:9099 返回html代碼mysql

建立php文件

<?php
echo 'hello Docker';
複製代碼

測試 curl localhost:8088 返回 hello Dockernginx

過程當中的疑難雜症

image拉取速度過慢

解決方法 - 修改倉庫源 建立、修改 /etc/docker/daemon.json 文件,修改成以下形式git

vi /etc/docker/daemon.json          # 編輯daemon.json 

{
    "registry-mirrors": ["http://hub-mirror.c.163.com"]
}

systemctl restart docker            # 重啓docker服務
複製代碼

國內加速地址有:github

docker-compose 拉取鏡像,成功以後就不會重複拉取。
因此導出現某個鏡像速度慢、卡死。 Ctrl + c終止換源,重啓docker再執行命令 docker-compose up -dredis

docker 建立 iptables鏈 報錯

... iptables --wait -t nat -I DOCKER -i br-d38d92300109 -j RETURN:iptables: No chain/target/match by that name.sql

docker 服務啓動的時候,docker服務會向iptables註冊一個鏈,以便讓docker服務管理的containner所暴露的端口之間進行通訊 經過命令 iptables -L 能夠查看iptables鏈

在開發環境中,若是你刪除了iptables中的docker鏈,或者iptables的規則被丟失了(例如重啓firewalld),docker就會報iptables error例如:failed programming external connectivity … iptables: No chain/target/match by that name 要解決這個問題,只要 重啓docker服務,以後,正確的iptables規則就會被建立出來

項目源碼

github.com/ruidao/demo…

不足 & 後續跟進

  • 上述部署仍是不夠快,正確打開方式應該是建立本身centos項目鏡像
  • 項目代碼迭代還能夠更自動一點
相關文章
相關標籤/搜索