如何使用Laravel docker集装箱&;MySQL数据库和Vue数据库?
我有一个应用程序,它使用Vue CLI作为前端,使用Laravel作为后端。现在我正试图使用docker在服务器上启动我的应用程序 我的docker技能只允许我做一件事:Vue docker容器。但就我必须使用Laravel作为后端而言,我也必须为此创建一个容器(+当然是MySQL) 下面是我得到的:Dockerfile如何使用Laravel docker集装箱&;MySQL数据库和Vue数据库?,laravel,docker,vue.js,docker-compose,dockerfile,Laravel,Docker,Vue.js,Docker Compose,Dockerfile,我有一个应用程序,它使用Vue CLI作为前端,使用Laravel作为后端。现在我正试图使用docker在服务器上启动我的应用程序 我的docker技能只允许我做一件事:Vue docker容器。但就我必须使用Laravel作为后端而言,我也必须为此创建一个容器(+当然是MySQL) 下面是我得到的:Dockerfile FROM node:lts-alpine WORKDIR /app COPY package*.json ./ RUN npm install EXPOSE 8080 CMD
FROM node:lts-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
EXPOSE 8080
CMD ["npm", "run", "serve"]
docker compose.yml
version: '3'
services:
web:
build: .
stdin_open: true
tty: true
ports:
- "8080:8080"
volumes:
- "/app/node_modules"
- ".:/app"
问题是我知道如何将Laravel连接到Dockerfile。这在我的脑海里根本不存在
也许我应该使用Ubuntu,而不仅仅是node?无论如何,我再次请求您的支持您需要4个容器,定义在
docker compose
文件中:
- 前端(您已有的Vue应用程序)
- 后端(Laravel应用程序)
- 网络服务器(如Nginx或Apache)
- 数据库(MySQL)
version: '3'
services:
frontend:
build: ./frontend
ports:
- 8080:8080
volumes:
- ./frontend:/app
backend:
build: ./backend
volumes:
- ./backend:/var/www/my_app
environment:
DB_HOST=db
DB_PORT=3306
webserver:
image: nginx:alpine
ports:
- 8000:8000
volumes:
- ./backend:/var/www/my_app
database:
image: mariadb:latest
container_name: db
ports:
- 3306:3306
environment:
MYSQL_DATABASE: dbname
MYSQL_ROOT_PASSWORD: dbpass
volumes:
- ./sql:/var/lib/mysql
其中,/backend
包含Laravel应用程序代码,/frontend
包含Vue应用程序,并且两者都包含Dockerfile
。有关所需每张图像的具体说明,请参阅。这将向主机系统公开3个端口:8080
(Vue应用程序)、8000
(Laravel应用程序)和3306
(MySQL)
或者,如果在Laravel容器中使用artisan cli的service
命令,则可以省略web服务器,这与您在Vue应用程序的Dockerfile
中所做的类似
图像必须包含类似于CMD php artisan-service--host=0.0.0.0--port=8000的内容,根据您需要执行以下步骤
使项目文件夹如下所示:(d:
目录,f:
文件)
d:后端
d:前端
d:等等
d:nginx
d:conf.d
f:default.conf.nginx
d:php
f:.gitignore
d:dockerize
d:后端
f:Dockerfile
f:docker-compose.yml
添加docker compose.yml
版本:“3”
服务:
www:
图片:nginx:alpine
卷数:
-./etc/nginx/conf.d/default.conf.nginx:/etc/nginx/conf.d/default.conf
端口:
- 81:80
取决于:
-后端
-前端
前端:
图:节点:当前阿尔卑斯山
用户:${UID}:${UID}
工作目录:/home/node/app
卷数:
-/前端:/home/node/app
环境:
节点环境:开发
命令:“npm运行服务”
后端:
建造:
上下文:dockerize/backend
#这种方式容器代表当前用户与主机交互。
# !!! 注意:$UID是一个shell_uu变量,而不是一个环境变量!
#要使其作为shell变量可用,请确保在~/.bashrc(./.zshrc等)中包含此变量:
#导出UID=“$UID”
用户:${UID}:${UID}
卷数:
-/后端:/app
#对php.ini的自定义调整
#一,。E“xdebug.remote_host”调试停靠的应用程序
-/etc/php:/usr/local/etc/php/local.conf.d/
环境:
#为php添加自定义配置文件以进行扫描
PHP_INI_SCAN_DIR:“/usr/local/etc/PHP/conf.d/:/usr/local/etc/PHP/local.conf.d/”
命令:“php artisan serve--host=0.0.0.0--port=8080”
mysql:
图片:mysql:5.7.22
容器名称:mysql
重新启动:除非停止
tty:是的
端口:
- "4306:3306"
卷数:
-./etc/mysql:/var/lib/mysql
环境:
MYSQL_数据库:tor
MYSQL\u用户:root
MYSQL\u密码:root
MYSQL\u ROOT\u密码:ROOT
服务标签:dev
服务名称:mysql
添加default.conf.nginx
服务器{
听81;
服务器名称前端;
error\u log/var/log/nginx/error.log调试;
地点/{
代理通行证http://frontend:8080;
}
位置/sockjs节点{
代理通行证http://frontend:8080;
代理设置头主机$Host;
#下面的行使ws://localhost/sockjs node/…URL工作,支持热重新加载
proxy_http_版本1.1;
代理设置头升级$http\U升级;
代理设置头连接“升级”;
}
地点/空气污染指数/{
#在后端,请求URI将不包含/api前缀,
#这就是我们想要的纯api项目
代理通行证http://backend:8080/;
代理设置头主机本地主机;
}
}
添加Dockerfile
来自php:fpm
运行apk add--no cache$PHPIZE_DEPS oniguruma dev libzip dev curl dev\
&&docker php ext安装pdo_mysql mbstring zip curl\
&&pecl安装xdebug redis\
&&docker php ext启用xdebug redis
运行mkdir/app
卷/应用程序
WORKDIR/app
曝光8080
CMD php artisan serve--host=0.0.0.0--port=8080
别忘了将vue.config.js添加到您的frontend文件夹中
//vue.config.js
module.exports={
//选项。。。
开发服务器:{
disableHostCheck:true,
主机:“localhost”,
标题:{
“访问控制允许来源”:“*”,
“访问控制允许标头”:“来源,X请求,内容类型,接受”
},
监视选项:{
民意调查:对
},
代理:'http://localhost/api',
}
}
运行sudo文档