Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.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
Docker 运行多个命令以配置应用程序的替代方法_Docker_Build_Devops_Build Tools - Fatal编程技术网

Docker 运行多个命令以配置应用程序的替代方法

Docker 运行多个命令以配置应用程序的替代方法,docker,build,devops,build-tools,Docker,Build,Devops,Build Tools,当我开发我的应用程序时,我有很多事情要做。它们通常是微型服务,每个都有自己的构建工具。例如,我必须为hugo运行一个构建脚本,为webpack运行一个构建脚本,以及一些gulp任务。我还需要生成一些文件、密钥等 手动运行这些程序是一件非常痛苦的事情。当我在dev和staging中测试时,我不断地重建运行相同命令的docker容器。它变得很痛 有没有什么工具可以帮你?我可以在哪里运行一个命令并让它重建应用程序中的所有内容?bash脚本可以工作,但这不是一个选项 我见过有人像在C中一样使用构建脚本,

当我开发我的应用程序时,我有很多事情要做。它们通常是微型服务,每个都有自己的构建工具。例如,我必须为
hugo
运行一个构建脚本,为
webpack
运行一个构建脚本,以及一些
gulp
任务。我还需要生成一些文件、密钥等

手动运行这些程序是一件非常痛苦的事情。当我在dev和staging中测试时,我不断地重建运行相同命令的docker容器。它变得很痛

有没有什么工具可以帮你?我可以在哪里运行一个命令并让它重建应用程序中的所有内容?bash脚本可以工作,但这不是一个选项


我见过有人像在C中一样使用构建脚本,但我找不到类似于devops的东西。也许docker有这样一个工具?

您可能希望构建容器,而不是使用图像

我假设您正在使用
docker compose
docker stack deploy
启动容器。在这两种情况下,您都有一个描述服务的
.yaml
文件。让我们假设下面是您当前配置的一部分,要部署一个服务,您需要在其中运行webpack的构建脚本,并且您使用Node.js映像作为基础(您可以轻松地根据实际场景进行调整):

您可以指定生成上下文,而不是直接使用图像:

# ...
services:
  webpack:
    build:
      context: ./docker/webpack
    # ...
      # ...
  # ...
相应地创建一个目录结构,以便有一个
docker/webpack
文件夹。在该文件夹中,使用要运行的命令创建一个
build script.sh
shell脚本,并创建一个文件。此文件应如下所示:

FROM node:8.12.0

COPY build-script.sh /tmp/build-script.sh 

RUN npm install --save-dev webpack \
 && /bin/sh /tmp/build-script.sh
然后,当您运行
docker compose up
docker stack deploy…
时,它将使用
build script.sh
脚本的内容构建一个已初始化的容器。显然,您可以用这个
Dockerfile
做更多的事情,但是对于您的用例,您可以从非常简单的事情开始。您甚至可以避免完全创建脚本,在一个巨大的
run
语句中运行所有命令(在每行末尾使用
\
,最后一行除外,并用
&&
分隔不同的命令)



稍后,您甚至可以通过将此
Dockerfile
上传到github,并在其上创建帐户并将其链接到github,自己构建一个映像。您可以将其称为
BugHunterUK-dev-environment
之类的名称,并在Yaml文件中使用
image:BugHunterUK-dev-environment:latest

出于好奇,为什么bash脚本不起作用?检查docker
命令
参数。您可以告诉docker在创建服务时运行命令,这将允许您在每次重新部署时自动运行bash脚本,而不是手动执行。我见过的大多数使用该工具集的应用程序使用并运行类似于
npm build
的程序来运行所有这些任务。Make或shell脚本也可以正常工作。
FROM node:8.12.0

COPY build-script.sh /tmp/build-script.sh 

RUN npm install --save-dev webpack \
 && /bin/sh /tmp/build-script.sh