- 準(zhǔn)備Dockerfile
FROM composer:1.6.5 as build
WORKDIR /app
COPY . /app
RUN composer install
FROM php:7.1.8-apache
EXPOSE 80
COPY --from=build /app /app
COPY vhost.conf /etc/apache2/sites-available/000-default.conf
RUN chown -R www-data:www-data /app \
&& a2enmod rewrite
- 切換到項目目錄
cd /path/to/your/project
- 在項目目錄中添加vhost.conf
<VirtualHost *:80>
DocumentRoot /app/public
<Directory "/app/public">
AllowOverride all
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
- 打包鏡像
docker build -t yourname/laravel-kubernetes-demo .
- 運行示例程序
docker run -ti -p 8080:80 -e APP_KEY=base64:cUPmwHx4LXa4Z25HhzFiWCf7TlQmSqnt98pnuiHmzgY= laravel-kubernetes-demo
示例程序可以通過 http://localhost:8080 訪問。
在這個安裝中泡态,容器是通用的,同時 APP_KEY
并不是寫死或共享的。
頁面可以正常訪問卢厂,但數(shù)據(jù)庫連接不上爱葵,報錯數(shù)據(jù)庫驅(qū)動找不到。
- 解決數(shù)據(jù)庫驅(qū)動問題
進(jìn)入容器:
docker exec -ti 容器Id bash
查看php擴展
php -m (發(fā)現(xiàn)php擴展中缺少pdo_mysql擴展)
安裝pdo_mysql擴展
docker-php-ext-install pdo pdo_mysql
安裝成功后退出容器并停止容器
- 啟動本地鏡像倉庫打tag并上傳
docker run -d -p 5000:5000 --restart=always registry:2
docker commit -m "提交內(nèi)容" 容器id imageName:Version
docker tag yourname/laravel-k8s 127.0.0.1:5000/laravel-k8s
docker push 127.0.0.1:5000/laravle-k8s
docker rmi 舊鏡像
- 重建Dockerfile
FROM composer:1.6.5 as build
WORKDIR /app
COPY . /app
RUN composer install
FROM 127.0.0.1:5000/laravle-k8s
# 暴露 80 端口
EXPOSE 80
- 重新build鏡像
docker build -t yourname/laravel-k8s .
- 重新運行
docker run -ti -p 8080:80 -e APP_KEY=base64:cUPmwHx4LXa4Z25HhzFiWCf7TlQmSqnt98pnuiHmzgY= yourname/laravel-k8s
- k8s(基于docker for mac纸俭,亦可使用Minikube)
kubectl run laravel-k8s --image=yourname/laravel-k8s --port=80 --image-pull-policy=IfNotPresent --env=APP_KEY=base64:cUPmwHx4LXa4Z25HhzFiWCf7TlQmSqnt98pnuiHmzgY=
開放服務(wù)端口
kubectl expose deployment laravel-yxd --type=NodePort --port=80
-
查看服務(wù)
image.png 訪問本機IP:30081端口即可(pdo_mysql擴展已裝上皇耗,可正常訪問數(shù)據(jù)庫)
開啟k8s Web UI
kubectl proxy
-
訪問
http://localhost:8001/api/v1/namespaces/kube-system/services/https:kubernetes-dashboard:/proxy/#!/login
即可直觀查看部署的應(yīng)用
image.png