- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个示例应用程序,我使用的是nodejs和reactjs,所以我的项目文件夹由client和server文件夹组成。使用create-react-app创建客户端文件夹。
我为每个文件夹创建了两个Dockerfile,并且在项目的根目录上使用了docker-compose.yml。
一切正常。现在我只想托管此应用程序。我正在尝试使用 Jenkins 。
由于我对开发人员方面知之甚少。我有些疑惑
1)如果我对客户端使用两个docker文件并使用react,并且由docker-compose.yml启动,它将在两个不同的容器中运行还是在单个容器中运行?从我所读过的内容来看,我认为将需要两个容器来使用docker-compose.yml文件。对此有些困惑?
2)也当我做sudo docker-compose时,它运行得很好,但它显示“基于nv创建生产版本,使用npm run build”,如何更改此版本。我是否需要为每个环境创建不同的docker-compose.yml文件。如何使用基于env的相同文件但不同的npm start或npm run构建?
3)我可以使用docker-compose.yml文件在jenkins中构建管道吗,还是在项目的根目录中需要Dockerfile?我已经看到大多数项目只有一个Dockerfile。那是我无法使用docker-compose.yml托管应用程序吗?
4)为什么我在docker-compose.yml文件的Command属性中对服务器使用NODE_COMMAND是因为当我在本地运行应用程序时我需要自动重新加载,因此在终端中如果我将NODE_COMMAND = nodemon代替运行节点index.js,但在生产中,如果我不提及任何NODE_COMMAND,它将仅使用节点index.js。
5)我是否需要每个客户端和服务器的Dockerfile中的CMD,因为当我运行docker-compose时,它将采用docker-compose.yml的命令。所以我认为优先级将来自docker-compose.yml文件。是吗 ?
6)docker-compose.yml文件中要求使用卷吗?
7)在环境文件中,我正在使用API_HOST和APP_SERVER_PORT,它在内部如何与package.json相关联?它在做代理人的事吗?当我们需要点击nodejs时,通常会给出“proxy”:“http://localhost:4000”,但是这里需要http://server:4000。这东西是怎么工作的?
8)当我们创建一个容器时,我们有3000、3001等端口...因此,通过使用docker-compose.yml文件中的导出环境和端口,容器端口和我们的应用程序端口将如何匹配。 ?
请参见下面的文件夹结构
movielisting
client
Dockerfile
package.json
package.lock.json
... other create-react-app folders like src..
server
Dockerfile
index.js
docker-compose.yml
.env
FROM node:10.15.1-alpine
#Create app directory and use it as the working directory
RUN mkdir -p /srv/app/client
WORKDIR /srv/app/client
COPY package.json /srv/app/client
COPY package-lock.json /srv/app/client
RUN npm install
COPY . /srv/app/client
CMD ["npm", "start"]
FROM node:10.15.1-alpine
#Create app directory
RUN mkdir -p /srv/app/server
WORKDIR /srv/app/server
COPY package.json /srv/app/server
COPY package-lock.json /srv/app/server
RUN npm install
COPY . /srv/app/server
CMD ["node", "index.js"]
version: "3"
services:
#########################
# Setup node container
#########################
server:
build: ./server
expose:
- ${APP_SERVER_PORT}
environment:
API_HOST: ${API_HOST}
APP_SERVER_PORT: ${APP_SERVER_PORT}
ports:
- ${APP_SERVER_PORT}:${APP_SERVER_PORT}
volumes:
- ./server:/srv/app/server
command: ${NODE_COMMAND:-node} index.js
##########################
# Setup client container
##########################
client:
build: ./client
environment:
- REACT_APP_PORT=${REACT_APP_PORT}
expose:
- ${REACT_APP_PORT}
ports:
- ${REACT_APP_PORT}:${REACT_APP_PORT}
volumes:
- ./client/src:/srv/app/client/src
- ./client/public:/srv/app/client/public
links:
- server
command: npm run start
API_HOST="http://localhost:4000"
APP_SERVER_PORT=4000
REACT_APP_PORT=3000
"proxy": "http://server:4000"
最佳答案
1)如果我使用两个docker文件作为客户端并使用react,并且由docker-compose.yml启动,它将在两个不同的容器中运行还是在单个容器中运行?从我所读过的内容来看,我认为将需要两个容器来使用docker-compose.yml文件。对此有些困惑?
每个dockerfile将构建一个docker镜像。因此,最后您将获得两个图像,一个用于react应用程序,另一个用于后端,即nodejs应用程序
2)同样,当我执行sudo docker-compose时,它运行得很好,但根据环境如何显示“使用npm run build创建生产版本”,我如何更改此版本。我是否需要为每个环境创建不同的docker-compose.yml文件。如何使用基于env的相同文件但不同的npm start或npm run构建?
您需要按照其Dockerfile中的步骤构建react应用程序,以便能够将其用作普通应用程序。另外,您可能会使用环境变量在生成期间使用build-args
自定义镜像,例如传递自定义路径或其他任何内容。
3)我可以使用docker-compose.yml文件在jenkins中构建管道,还是在项目的根目录中使用Dockerfile?我已经看到大多数项目只有一个Dockerfile。那是我无法使用docker-compose.yml托管应用程序吗?
如果将dockerfile与jenkins一起使用以构建镜像并保留docker-compose.yml文件用于部署应用程序本身而不使用build关键字,那会更好。
4)为什么我在docker-compose.yml文件的Command属性中使用NODE_COMMAND作为服务器的原因是因为当我在本地运行应用程序时我需要自动重新加载,因此在终端中如果我将NODE_COMMAND = nodemon代替运行节点index.js,但是在生产环境中,如果我不提及任何NODE_COMMAND,它将仅使用节点index.js。
在docker-compose.yml文件中使用command
将覆盖在构建步骤中设置的dockerfile的CMD
5)我是否需要在每个客户端和服务器的Dockerfile中使用CMD,因为当我运行docker-compose时,它将使用docker-compose.yml命令。所以我认为优先级将来自docker-compose.yml文件。是吗 ?
一般来说,是的,您需要它,但是,只要您要使用它从docker-compose文件中覆盖它,就可以将其添加为CMD ["node", "--help"]
或其他名称
6)docker-compose.yml文件中要求使用卷吗?
如果您在容器之间共享文件,或者需要保持数据在主机上的持久性,则需要卷
7)在环境文件中,我正在使用API_HOST和APP_SERVER_PORT,它在内部如何与package.json相关联?它在做代理人的事吗?当我们需要点击nodejs时,通常会给出“proxy”:“http://localhost:4000”,但是这里需要http://server:4000。这东西是怎么工作的?
一旦启动应用程序,server
是docker网络中的nodejs容器的别名。以及为什么命名为server
?因为您在此部分的docker-compose.yml文件中拥有此文件:
services:
server:
network
关键字内向其添加别名来对其进行更改
Note: React itself is a client side which means it works through the browser itself so it wont be able to contact the nodejs application through docker network you may use the ip itself or use
localhost
and make the nodejs accessible throughlocalhost
关于docker - 节点并使用docker-compose.yml文件运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54841515/
我正在使用以下dockerfile: FROM ubuntu:14.04 MAINTAINER xxx xxx # SSH RUN apt-get update && apt-get install
我运行了docker-compose build celery,(经过数小时的尝试,我的连接不良)成功了。 app Dockerfile的前80%是相同的,但不会重复使用缓存。从我可以浏览的内容来看,
我可以使用以下命令成功创建 Docker 注册表 v2 服务:docker service create 然后我使用 docker Push 将一些图像推送到该服务。 当我通过 curl localh
我正在尝试使用 gitlab 构建 CI,我从 docker 的 docker 镜像开始,我的前端存储库没有任何问题,但现在使用相同的 gitlab-ci 配置文件,我有此守护程序错误。 这是构建的输
用例: 我们在 Jenkins 中有几个“发布作业”build 和 push 应用程序的 Docker 镜像到 docker registry,更新各种文件中的项目版本,最后将发布标签推送到相应的 G
当我尝试构建我的 docker 文件时,docker 返回以下错误: [+] Building 0.0s (1/2)
docker-in-docker 的作者在此博客中建议不要将此图像用于 CI 目的: jpetazzo/Using Docker-in-Docker for your CI or testing en
我创建了一个 Dockerfile 来在 Docker 中运行 Docker: FROM ubuntu:16.04 RUN apt-get update && \ apt-get in
我尝试为 Docker 镜像定位一个特定标签。我怎样才能在命令行上做到这一点?我想避免下载所有图像,然后删除不需要的图像。 在 Ubuntu 官方版本中,https://registry.hub.do
我正在尝试在docker中运行docker。唯一的目的是实验性的,我绝不尝试实现任何功能,我只想检查docker从另一个docker运行时的性能。 我通过Mac上的boot2docker启动docke
docker-compose.yml version: "3" services: daggr: image: "docker.pvt.com/test/daggr:stable"
我有一个非常具体的开发环境用例。在一些代码中,我启动了一个容器来抓取页面并检索在容器中运行的服务(Gitlab)的 token 。 现在,我希望 Dockerize 运行它的代码。具体来说,类似: o
之前已经问过这个问题,但我不确定当时是否可以使用docker-compose文件完成docker堆栈部署。 由于最新版本支持使用compose将服务部署到堆栈,因此,我无法理解dab文件的值。 我检查
我在一次采访中被问到这个问题,但无法回答。也没有找到任何相关信息。 最佳答案 正如 Docker 文档中所述,Docker 注册表是: [...] a hosted service containin
有没有一种方法可以将具有给定扩展名的所有文件复制到Docker中的主机?就像是 docker cp container_name:path/to/file/in/docker/*.png path/o
我的日志驱动程序设置为journald。使用日志记录驱动程序时,daemon.json文件中的日志级别配置会影响日志吗?使用docker logs 时仅会影响容器日志? 例如,docker和journ
我最近开始使用Docker + Celery。我还共享了full sample codes for this example on github,以下是其中的一些代码段,以帮助解释我的观点。 就上下文
运行docker build .命令后,尝试提交构建的镜像,但收到以下错误 Step 12 : CMD activator run ---> Using cache ---> efc82ff1ca
我们有docker-compose.yml,其中包含Kafka,zookeeper和schema registry的配置 当我们启动docker compose时,出现以下错误 docker-comp
我是Docker的新手。是否可以在Docker Hub外部建立Docker基本镜像存储库?假设将它们存储在您的云中,而不是拥有DH帐户?谢谢。 最佳答案 您可以根据需要托管自己的注册表。可以在Depl
我是一名优秀的程序员,十分优秀!