本文將介紹如何使用docker鏡像 快速部署 php+vue 項目.文末提供源碼地址php
—— 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 -d
html
使用vue create vue_demo
或vue ui
建立項目vue_demo
前端
打包項目cd vue_demo && npm run build
,複製 dist
文件夾到 php_vue/nginx/apps
下 vue
測試
curl localhost:9099
返回html代碼mysql
<?php
echo 'hello Docker';
複製代碼
測試
curl localhost:8088
返回 hello Dockernginx
解決方法 - 修改倉庫源 建立、修改 /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 -d
redis
... 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規則就會被建立出來