Java 如何从整体部署中拆分docker文件
在单个docker文件中,我用于运行Node和Java以实现以下功能: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
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