繁体   English   中英

"使用 Laravel 项目 Dockerize 一个 Maven 项目"

[英]Dockerize a Maven Project with a Laravel project

我在开发项目时遇到问题。 这个项目包含一个 Laravel 项目,它是我的 API REST。 一些方法调用 Java 项目。 所以,基本上,我有一个与 Java(maven)项目交互的 Laravel 项目。

所有这些都是我的应用程序的后端,所以我决定将所有这些与 docker 组合在一起。 基本上,我有三个容器:

  • Nginx
  • MySQL
  • PHP

Php 容器由 Dockerfile 构建。 在这个 Dockerfile 中,运行安装 R 软件和 Composer 的命令(对于 Laravel 项目)。 但我也需要包括 Maven。

我已经阅读了很多页面,最好的方法是使用多阶段 Dockerfile,这正是我正在尝试的,但我无法让它工作......

FROM php:8.0-fpm
USER root
RUN apt-get update && \
    apt-get upgrade -y && \
    apt-get install -y wget && \
    apt-get install -y git && \
    apt-get -y install software-properties-common

RUN wget --no-verbose -O /tmp/apache-maven-3.3.9.tar.gz http://archive.apache.org/dist/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
RUN tar xzf /tmp/apache-maven-3.3.9.tar.gz -C /opt/
RUN ln -s /opt/apache-maven-3.3.9 /opt/maven
RUN ln -s /opt/maven/bin/mvn /usr/local/bin
RUN rm -f /tmp/apache-maven-3.3.9.tar.gz
ENV MAVEN_HOME /opt/maven

RUN apt install -y r-base

RUN docker-php-ext-install pdo pdo_mysql

RUN curl -sS https://getcomposer.org/installer | php
RUN mv composer.phar /usr/local/bin/composer

RUN chown -R www-data:www-data /var/www
RUN chown -R www-data:www-data /var/www
WORKDIR /var/www/html

USER www-data:www-data

FROM maven:3.8.4-openjdk-17 AS build
WORKDIR /app
COPY ./machine-learning/RecommendationSystem/pom.xml .
RUN mvn -B -f ./pom.xml -s /usr/share/maven/ref/settings-docker.xml dependency:go-offline
COPY ./machine-learning/RecommendationSystem/ .
RUN mvn -B -f ./pom.xml -s /usr/share/maven/ref/settings-docker.xml package

它实际上做了所有事情,但容器给了我一个出口 1。

万一有人认为这是必要的,这里是 docker-compose.yml 文件:

version: '3'
networks:
  laravel:

services:
  nginx:
    image: nginx:stable-alpine
    container_name: nginx
    ports:
      - "8080:80"
    volumes:
      - .:/var/www/html
      - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - php
      - mysql
    networks:
      - laravel

  mysql:
    image: mysql:5.7.22
    container_name: mysql
    restart: unless-stopped
    tty: true
    ports:
      - "3306:3306"
    volumes:
      - ./docker/mysql:/var/lib/mysql
    environment:
      MYSQL_DATABASE: 'xxx'
      MYSQL_USER: 'xxx'
      MYSQL_PASSWORD: 'xxx'
      MYSQL_ROOT_PASSWORD: 'xxx'
    networks:
      - laravel

  php:
    build:
      context: .
      dockerfile: ./docker/Dockerfile
    container_name: php
    volumes:
      - .:/var/www/html
    ports:
      - "9000:9000"
    networks:
      - laravel

希望有人可以帮助我:(如果您需要更多信息或解释不正确,请告诉我,我会尽力做到最好。

感谢大家。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM