当前位置: 首页 > 面试题库 >

当我的开发环境将我的代码库安装到容器中时,如何构建docker映像?

冉俊德
2023-03-14
问题内容

我对应用程序进行了docker化处理,但是要查看我的更改,我必须重建图像,并且不能为我提供应用程序的实时预览。

因此,我创建了一个docker-
compose环境,该环境将redis链接到我的节点容器,然后将源代码从主机挂载到节点应用程序并监视其更改。但是,由于代码不是UnionFS的一部分,因此无法进行容器化。

如何设置一个开发环境,该环境可以生成dockerized映像,但是每次更改代码库时都不必重新启动?


问题答案:

您用来开发和安装目录的容器映像应该与您在其他地方运行应用程序时生成的映像相同,或者如果无法实现,则至少基于生产映像。

以一个简单的节点应用程序为例,以下是基本图像:

FROM node:6
ENV NODE_ENV=production
RUN npm install forever -g
COPY docker-entrypoint.sh /entrypoint.sh
WORKDIR /app
COPY package.json /app/
RUN npm install
COPY . /app
EXPOSE 3000
ENTRYPOINT ["/entrypoint.sh"]
CMD ["node", "/app/index.js"]

生产

docker run \
  --detach \
  --restart always \
  --publish 3000:3000 \
  myapp

发展历程

docker run \
  --publish 3000:3000 \
  --volume .:/app \
  --env NODE_ENV=development \
  myapp \
  forever -w /app/index.js

所以我修改了挂载,但是基本映像是相同的。挂载的文件替换了容器中的“内置”文件。

对于node.js应用程序,还有一些额外的开发更改。环境变量和用于监视/重启更改的命令。更改中的依赖项时,还需要npm install在容器中手动执行。docker exec $container npm install``package.json

开发Dockerfile

如果您需要对开发环境进行大量修改,并且不想手动指定它们,则可以FROM在包含开发细节的基础映像中创建一个开发映像。Dockerfile.dev

from myapp:latest
env NODE_ENV=development
volume ["/app"]
command ["forever", "-w", "--watchDirectory", "/app" "/app/index.js"]

然后,开发细节将存储在新映像中,但仍链接到您的真实映像。

docker build -f Dockerfile.dev -t myapp-dev .
docker run -p 3000:3000 -v .:/app myapp-dev


 类似资料:
  • 我有一个开发数据库,我想在docker映像中提交该数据库,将其推送到一个私有存储库,并在本地开发和CI构建中使用。 数据库保存为SQL备份,通过将备份文件映射到官方映像的目录,它将在第一次运行容器时执行此备份文件。发生这种情况时,MariaDB会将数据库还原到容器内中的数据文件中。 理论上,我可以停止容器,将其提交给一个新图像,推动它,然后我就完成了。然而,MariaDB的Dockerfile声明

  • 问题内容: 我的容器中包含所有网站代码。 我的Dockerfile使用git下载代码,并将其作为映像的一部分,以便更轻松地部署到生产环境。 但是,如何在开发中编辑代码?我认为使用卷是解决方案,例如:。但是它将覆盖容器中的目录。如果是我第一次运行它,它将清空它,因为主机中没有任何东西。因此,我在Dockerfile中所做的一切都丢失了。 我还希望在应用程序的不同版本之间共享目录和文件,例如:。这是专

  • But Jesus said to them,"Because of your hardness of heart he wrote this commandment for you. But from the beginning of creation, 'God made them male and female.' 'For this reason a man shall leave his

  • 按照以下说明获取所需的Hyperledger Composer开发工具并建立Hyperledger Fabric。 在你开始之前 要运行Hyperledger Composer和Hyperledger Fabric,我们建议你至少拥有4Gb的内存。 以下是安装所需开发工具的先决条件: 操作系统:Ubuntu Linux 14.04 / 16.04 LTS(均为64位)或Mac OS 10.12 D

  • 您如何为开发和生产(集群)构建图像: 我正试图为两者都提供一个Dockerfile,以保持“Dockerfile实现在一个地方”,如继承: 然后使用docker compose。开发yml 就像docker compose一样。开发yml: 所以首先,命名不起作用。 额外的问题:如何为生产构建一个映像-您是否只需在一个容器中编译(docker运行),然后将二进制文件复制到一个新容器中?

  • 问题内容: 我有这个容器基于(但是与我有相同的问题,这并不是很相关)。我到达需要的地方 我得到 我在任何内核日志中都找不到任何东西,而且没有任何有趣的结果。我显然可以在主机上执行此操作(使用任何其他对子树/节点)。在我上面的示例中,/ htdocs / www是Docker卷的安装点,但它似乎没有任何意义,因为容器内没有任何一对子树/节点。 问题答案: 要使用系统调用,您需要具备此功能。默认情况下