Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从整体部署中拆分docker文件_Java_Node.js_Docker_Containers - Fatal编程技术网

Java 如何从整体部署中拆分docker文件

Java 如何从整体部署中拆分docker文件,java,node.js,docker,containers,Java,Node.js,Docker,Containers,在单个docker文件中,我用于运行Node和Java以实现以下功能: 运行测试脚本 运行java可执行文件(捆绑屏幕截图) 运行我的应用程序 我从文档中了解到,这是一种糟糕的做法,因为这是一种“整体式”部署。我应该根据单独的任务将其拆分为单独的图像。所以,大概我会有3个docker文件 Dockerfile 1:测试脚本 FROM node:8 RUN node --version RUN apt-get update && apt-get install -yq libgc

在单个docker文件中,我用于运行Node和Java以实现以下功能:

  • 运行测试脚本
  • 运行java可执行文件(捆绑屏幕截图)
  • 运行我的应用程序
  • 我从文档中了解到,这是一种糟糕的做法,因为这是一种“整体式”部署。我应该根据单独的任务将其拆分为单独的图像。所以,大概我会有3个docker文件

    Dockerfile 1:测试脚本

    FROM node:8
    RUN node --version
    
    RUN apt-get update && apt-get install -yq libgconf-2-4
    
    # Note: this installs the necessary libs to make the bundled version of Chromium work
    RUN apt-get update && apt-get install -y wget --no-install-recommends \
        && wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
        && sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' \
        && apt-get update \
        && apt-get install -y google-chrome-unstable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst ttf-freefont \
          --no-install-recommends \
        && rm -rf /var/lib/apt/lists/* \
        && apt-get purge --auto-remove -y curl \
        && rm -rf /src/*.deb
    
    # project repo
    
    RUN git clone ...
    WORKDIR /myApp/  
    RUN npm install
    
    RUN npm i puppeteer
    
    CMD ["node", "test.ts"]
    
    Dockerfile 2:Java可执行文件(捆绑映像)

    Dockerfile 3:运行应用程序

    FROM node:8
    RUN node --version
    
    RUN git clone -b ...
    
    WORKDIR /myApp/  
    RUN npm install
    
    EXPOSE 9999
    CMD ["npm", "start"]
    

    问题是,人们到底是如何做到这一点的?在我的案例中,如何实现非单片部署?如何在一个项目中运行3个docker映像?

    使用docker compose。在docker-compose.yml文件中,您将有3个服务指向3个不同的DockerFile

    例:


    使用docker编写。在docker-compose.yml文件中,您将有3个服务指向3个不同的DockerFile

    例:


    啊哈,我明白了。但是,这是否意味着它们中的每一个都是一个单独的容器?是的,这是肯定的,所以要让它们共享同一个工作目录,您必须将其作为卷装载。在compose中这样做非常简单。好的,所有图像都在同一个工作目录中。但是,“将其装载为卷”,这到底意味着什么?Docker中的卷是从容器向主机公开的目录(类似于Docker中使用-p开关的端口的工作方式)。您可以选择公开的目录是由Docker管理(它将位于主机上Docker子目录中看似随机的位置),还是由主机操作系统管理(只是您机器上的一个普通旧文件夹)。请阅读Docker卷,但您要查找的语法是:。你可以做更复杂的坐骑,使用复制到图像中的dir,但这会让你开始思考,我脑子里的齿轮开始转动。现在我有3个docker映像和3个容器,但它们都需要共享同一个工作目录,因为这是一个部署。这是通过将我的compose文件配置为作为卷装载完成的,我理解这意味着将我的本地项目目录映射到容器中的目录:。这是在撰写文件中以某种方式指定的。我说的对吗?啊哈,我明白了。但是,这是否意味着它们中的每一个都是一个单独的容器?是的,这是肯定的,所以要让它们共享同一个工作目录,您必须将其作为卷装载。在compose中这样做非常简单。好的,所有图像都在同一个工作目录中。但是,“将其装载为卷”,这到底意味着什么?Docker中的卷是从容器向主机公开的目录(类似于Docker中使用-p开关的端口的工作方式)。您可以选择公开的目录是由Docker管理(它将位于主机上Docker子目录中看似随机的位置),还是由主机操作系统管理(只是您机器上的一个普通旧文件夹)。请阅读Docker卷,但您要查找的语法是:。你可以做更复杂的坐骑,使用复制到图像中的dir,但这会让你开始思考,我脑子里的齿轮开始转动。现在我有3个docker映像和3个容器,但它们都需要共享同一个工作目录,因为这是一个部署。这是通过将我的compose文件配置为作为卷装载完成的,我理解这意味着将我的本地项目目录映射到容器中的目录:。这是在撰写文件中以某种方式指定的。我说得对吗?
    FROM node:8
    RUN node --version
    
    RUN git clone -b ...
    
    WORKDIR /myApp/  
    RUN npm install
    
    EXPOSE 9999
    CMD ["npm", "start"]
    
    version: '3'
    services:
      test:
        build:
          context: .
          dockerfile: Dockerfile.test
      images:
        build:
          context: .
          dockerfile: Dockerfile.images
      app:
        build:
          context: .
          dockerfile: Dockerfile.app