mirror of
https://github.com/yeasy/docker_practice.git
synced 2024-11-28 01:08:53 +00:00
Update laravel, close #465
This commit is contained in:
parent
83929dd096
commit
68d85ac31e
@ -1,9 +1,14 @@
|
|||||||
.idea/
|
.idea/
|
||||||
.git/
|
.git/
|
||||||
|
|
||||||
vendor/
|
vendor/
|
||||||
|
|
||||||
node_modules/
|
node_modules/
|
||||||
|
|
||||||
public/js/
|
public/js/
|
||||||
public/css/
|
public/css/
|
||||||
|
public/mix-manifest.json
|
||||||
|
|
||||||
yarn-error.log
|
yarn-error.log
|
||||||
|
|
||||||
bootstrap/cache/*
|
bootstrap/cache/*
|
||||||
|
@ -2,13 +2,15 @@ FROM node:alpine as frontend
|
|||||||
|
|
||||||
COPY package.json /app/
|
COPY package.json /app/
|
||||||
|
|
||||||
RUN cd /app \
|
RUN set -x ; cd /app \
|
||||||
&& npm install --registry=https://registry.npm.taobao.org
|
&& npm install --registry=https://registry.npm.taobao.org
|
||||||
|
|
||||||
COPY webpack.mix.js /app/
|
COPY webpack.mix.js /app/
|
||||||
COPY resources/assets/ /app/resources/assets/
|
COPY resources/ /app/resources/
|
||||||
|
|
||||||
RUN cd /app \
|
RUN set -x ; cd /app \
|
||||||
|
&& touch artisan \
|
||||||
|
&& mkdir -p public \
|
||||||
&& npm run production
|
&& npm run production
|
||||||
|
|
||||||
FROM composer as composer
|
FROM composer as composer
|
||||||
@ -16,7 +18,7 @@ FROM composer as composer
|
|||||||
COPY database/ /app/database/
|
COPY database/ /app/database/
|
||||||
COPY composer.json /app/
|
COPY composer.json /app/
|
||||||
|
|
||||||
RUN cd /app \
|
RUN set -x ; cd /app \
|
||||||
&& composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \
|
&& composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \
|
||||||
&& composer install \
|
&& composer install \
|
||||||
--ignore-platform-reqs \
|
--ignore-platform-reqs \
|
||||||
@ -25,7 +27,7 @@ RUN cd /app \
|
|||||||
--no-scripts \
|
--no-scripts \
|
||||||
--prefer-dist
|
--prefer-dist
|
||||||
|
|
||||||
FROM php:7.2-fpm-alpine as laravel
|
FROM php:7.4-fpm-alpine as laravel
|
||||||
|
|
||||||
ARG LARAVEL_PATH=/app/laravel
|
ARG LARAVEL_PATH=/app/laravel
|
||||||
|
|
||||||
@ -33,17 +35,17 @@ COPY --from=composer /app/vendor/ ${LARAVEL_PATH}/vendor/
|
|||||||
COPY . ${LARAVEL_PATH}
|
COPY . ${LARAVEL_PATH}
|
||||||
COPY --from=frontend /app/public/js/ ${LARAVEL_PATH}/public/js/
|
COPY --from=frontend /app/public/js/ ${LARAVEL_PATH}/public/js/
|
||||||
COPY --from=frontend /app/public/css/ ${LARAVEL_PATH}/public/css/
|
COPY --from=frontend /app/public/css/ ${LARAVEL_PATH}/public/css/
|
||||||
COPY --from=frontend /app/mix-manifest.json ${LARAVEL_PATH}/mix-manifest.json
|
COPY --from=frontend /app/public/mix-manifest.json ${LARAVEL_PATH}/public/mix-manifest.json
|
||||||
|
|
||||||
RUN cd ${LARAVEL_PATH} \
|
RUN set -x ; cd ${LARAVEL_PATH} \
|
||||||
&& php artisan package:discover \
|
|
||||||
&& mkdir -p storage \
|
&& mkdir -p storage \
|
||||||
&& mkdir -p storage/framework/cache \
|
&& mkdir -p storage/framework/cache \
|
||||||
&& mkdir -p storage/framework/sessions \
|
&& mkdir -p storage/framework/sessions \
|
||||||
&& mkdir -p storage/framework/testing \
|
&& mkdir -p storage/framework/testing \
|
||||||
&& mkdir -p storage/framework/views \
|
&& mkdir -p storage/framework/views \
|
||||||
&& mkdir -p storage/logs \
|
&& mkdir -p storage/logs \
|
||||||
&& chmod -R 777 storage
|
&& chmod -R 777 storage \
|
||||||
|
&& php artisan package:discover
|
||||||
|
|
||||||
FROM nginx:alpine as nginx
|
FROM nginx:alpine as nginx
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# 实战多阶段构建 Laravel 镜像
|
# 实战多阶段构建 Laravel 镜像
|
||||||
|
|
||||||
> 本节适用于 PHP 开发者阅读。
|
> 本节适用于 PHP 开发者阅读。`Laravel` 基于 8.x 版本,各个版本的文件结构可能会有差异,请根据实际自行修改。
|
||||||
|
|
||||||
## 准备
|
## 准备
|
||||||
|
|
||||||
@ -11,10 +11,15 @@
|
|||||||
```bash
|
```bash
|
||||||
.idea/
|
.idea/
|
||||||
.git/
|
.git/
|
||||||
|
|
||||||
vendor/
|
vendor/
|
||||||
|
|
||||||
node_modules/
|
node_modules/
|
||||||
|
|
||||||
public/js/
|
public/js/
|
||||||
public/css/
|
public/css/
|
||||||
|
public/mix-manifest.json
|
||||||
|
|
||||||
yarn-error.log
|
yarn-error.log
|
||||||
|
|
||||||
bootstrap/cache/*
|
bootstrap/cache/*
|
||||||
@ -55,13 +60,15 @@ FROM node:alpine as frontend
|
|||||||
|
|
||||||
COPY package.json /app/
|
COPY package.json /app/
|
||||||
|
|
||||||
RUN cd /app \
|
RUN set -x ; cd /app \
|
||||||
&& npm install --registry=https://registry.npm.taobao.org
|
&& npm install --registry=https://registry.npm.taobao.org
|
||||||
|
|
||||||
COPY webpack.mix.js /app/
|
COPY webpack.mix.js /app/
|
||||||
COPY resources/assets/ /app/resources/assets/
|
COPY resources/ /app/resources/
|
||||||
|
|
||||||
RUN cd /app \
|
RUN set -x ; cd /app \
|
||||||
|
&& touch artisan \
|
||||||
|
&& mkdir -p public \
|
||||||
&& npm run production
|
&& npm run production
|
||||||
```
|
```
|
||||||
|
|
||||||
@ -75,7 +82,7 @@ FROM composer as composer
|
|||||||
COPY database/ /app/database/
|
COPY database/ /app/database/
|
||||||
COPY composer.json composer.lock /app/
|
COPY composer.json composer.lock /app/
|
||||||
|
|
||||||
RUN cd /app \
|
RUN set -x ; cd /app \
|
||||||
&& composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \
|
&& composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \
|
||||||
&& composer install \
|
&& composer install \
|
||||||
--ignore-platform-reqs \
|
--ignore-platform-reqs \
|
||||||
@ -90,7 +97,7 @@ RUN cd /app \
|
|||||||
第三阶段对以上阶段生成的文件进行整合。
|
第三阶段对以上阶段生成的文件进行整合。
|
||||||
|
|
||||||
```docker
|
```docker
|
||||||
FROM php:7.2-fpm-alpine as laravel
|
FROM php:7.4-fpm-alpine as laravel
|
||||||
|
|
||||||
ARG LARAVEL_PATH=/app/laravel
|
ARG LARAVEL_PATH=/app/laravel
|
||||||
|
|
||||||
@ -98,17 +105,17 @@ COPY --from=composer /app/vendor/ ${LARAVEL_PATH}/vendor/
|
|||||||
COPY . ${LARAVEL_PATH}
|
COPY . ${LARAVEL_PATH}
|
||||||
COPY --from=frontend /app/public/js/ ${LARAVEL_PATH}/public/js/
|
COPY --from=frontend /app/public/js/ ${LARAVEL_PATH}/public/js/
|
||||||
COPY --from=frontend /app/public/css/ ${LARAVEL_PATH}/public/css/
|
COPY --from=frontend /app/public/css/ ${LARAVEL_PATH}/public/css/
|
||||||
COPY --from=frontend /app/mix-manifest.json ${LARAVEL_PATH}/mix-manifest.json
|
COPY --from=frontend /app/public/mix-manifest.json ${LARAVEL_PATH}/public/mix-manifest.json
|
||||||
|
|
||||||
RUN cd ${LARAVEL_PATH} \
|
RUN set -x ; cd ${LARAVEL_PATH} \
|
||||||
&& php artisan package:discover \
|
|
||||||
&& mkdir -p storage \
|
&& mkdir -p storage \
|
||||||
&& mkdir -p storage/framework/cache \
|
&& mkdir -p storage/framework/cache \
|
||||||
&& mkdir -p storage/framework/sessions \
|
&& mkdir -p storage/framework/sessions \
|
||||||
&& mkdir -p storage/framework/testing \
|
&& mkdir -p storage/framework/testing \
|
||||||
&& mkdir -p storage/framework/views \
|
&& mkdir -p storage/framework/views \
|
||||||
&& mkdir -p storage/logs \
|
&& mkdir -p storage/logs \
|
||||||
&& chmod -R 777 storage
|
&& chmod -R 777 storage \
|
||||||
|
&& php artisan package:discover
|
||||||
```
|
```
|
||||||
|
|
||||||
## 最后一个阶段构建 NGINX 镜像
|
## 最后一个阶段构建 NGINX 镜像
|
||||||
@ -143,13 +150,13 @@ $ docker network create laravel
|
|||||||
启动 laravel 容器, `--name=laravel` 参数设定的名字必须与 `nginx` 配置文件中的 `fastcgi_pass laravel:9000;` 一致
|
启动 laravel 容器, `--name=laravel` 参数设定的名字必须与 `nginx` 配置文件中的 `fastcgi_pass laravel:9000;` 一致
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ docker run -it --rm --name=laravel --network=laravel my/laravel
|
$ docker run -dit --rm --name=laravel --network=laravel my/laravel
|
||||||
```
|
```
|
||||||
|
|
||||||
启动 nginx 容器
|
启动 nginx 容器
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
$ docker run -it --rm --network=laravel -p 8080:80 my/nginx
|
$ docker run -dit --rm --network=laravel -p 8080:80 my/nginx
|
||||||
```
|
```
|
||||||
|
|
||||||
浏览器访问 `127.0.0.1:8080` 可以看到 Laravel 项目首页。
|
浏览器访问 `127.0.0.1:8080` 可以看到 Laravel 项目首页。
|
||||||
@ -160,6 +167,8 @@ $ docker run -it --rm --network=laravel -p 8080:80 my/nginx
|
|||||||
|
|
||||||
本小节内容为了方便测试,将配置文件直接放到了镜像中,实际在使用时 **建议** 将配置文件作为 `config` 或 `secret` 挂载到容器中,请读者自行学习 `Swarm mode` 或 `Kubernetes` 的相关内容。
|
本小节内容为了方便测试,将配置文件直接放到了镜像中,实际在使用时 **建议** 将配置文件作为 `config` 或 `secret` 挂载到容器中,请读者自行学习 `Swarm mode` 或 `Kubernetes` 的相关内容。
|
||||||
|
|
||||||
|
由于篇幅所限本小节只是简单列出,更多内容可以参考 https://github.com/khs1994-docker/laravel-demo 项目。
|
||||||
|
|
||||||
## 附录
|
## 附录
|
||||||
|
|
||||||
完整的 `Dockerfile` 文件如下。
|
完整的 `Dockerfile` 文件如下。
|
||||||
@ -169,13 +178,15 @@ FROM node:alpine as frontend
|
|||||||
|
|
||||||
COPY package.json /app/
|
COPY package.json /app/
|
||||||
|
|
||||||
RUN cd /app \
|
RUN set -x ; cd /app \
|
||||||
&& npm install --registry=https://registry.npm.taobao.org
|
&& npm install --registry=https://registry.npm.taobao.org
|
||||||
|
|
||||||
COPY webpack.mix.js /app/
|
COPY webpack.mix.js /app/
|
||||||
COPY resources/assets/ /app/resources/assets/
|
COPY resources/ /app/resources/
|
||||||
|
|
||||||
RUN cd /app \
|
RUN set -x ; cd /app \
|
||||||
|
&& touch artisan \
|
||||||
|
&& mkdir -p public \
|
||||||
&& npm run production
|
&& npm run production
|
||||||
|
|
||||||
FROM composer as composer
|
FROM composer as composer
|
||||||
@ -183,7 +194,7 @@ FROM composer as composer
|
|||||||
COPY database/ /app/database/
|
COPY database/ /app/database/
|
||||||
COPY composer.json /app/
|
COPY composer.json /app/
|
||||||
|
|
||||||
RUN cd /app \
|
RUN set -x ; cd /app \
|
||||||
&& composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \
|
&& composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \
|
||||||
&& composer install \
|
&& composer install \
|
||||||
--ignore-platform-reqs \
|
--ignore-platform-reqs \
|
||||||
@ -192,7 +203,7 @@ RUN cd /app \
|
|||||||
--no-scripts \
|
--no-scripts \
|
||||||
--prefer-dist
|
--prefer-dist
|
||||||
|
|
||||||
FROM php:7.2-fpm-alpine as laravel
|
FROM php:7.4-fpm-alpine as laravel
|
||||||
|
|
||||||
ARG LARAVEL_PATH=/app/laravel
|
ARG LARAVEL_PATH=/app/laravel
|
||||||
|
|
||||||
@ -200,17 +211,17 @@ COPY --from=composer /app/vendor/ ${LARAVEL_PATH}/vendor/
|
|||||||
COPY . ${LARAVEL_PATH}
|
COPY . ${LARAVEL_PATH}
|
||||||
COPY --from=frontend /app/public/js/ ${LARAVEL_PATH}/public/js/
|
COPY --from=frontend /app/public/js/ ${LARAVEL_PATH}/public/js/
|
||||||
COPY --from=frontend /app/public/css/ ${LARAVEL_PATH}/public/css/
|
COPY --from=frontend /app/public/css/ ${LARAVEL_PATH}/public/css/
|
||||||
COPY --from=frontend /app/mix-manifest.json ${LARAVEL_PATH}/mix-manifest.json
|
COPY --from=frontend /app/public/mix-manifest.json ${LARAVEL_PATH}/public/mix-manifest.json
|
||||||
|
|
||||||
RUN cd ${LARAVEL_PATH} \
|
RUN set -x ; cd ${LARAVEL_PATH} \
|
||||||
&& php artisan package:discover \
|
|
||||||
&& mkdir -p storage \
|
&& mkdir -p storage \
|
||||||
&& mkdir -p storage/framework/cache \
|
&& mkdir -p storage/framework/cache \
|
||||||
&& mkdir -p storage/framework/sessions \
|
&& mkdir -p storage/framework/sessions \
|
||||||
&& mkdir -p storage/framework/testing \
|
&& mkdir -p storage/framework/testing \
|
||||||
&& mkdir -p storage/framework/views \
|
&& mkdir -p storage/framework/views \
|
||||||
&& mkdir -p storage/logs \
|
&& mkdir -p storage/logs \
|
||||||
&& chmod -R 777 storage
|
&& chmod -R 777 storage \
|
||||||
|
&& php artisan package:discover
|
||||||
|
|
||||||
FROM nginx:alpine as nginx
|
FROM nginx:alpine as nginx
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user