我现在有几个Dockerfile。
一种是Cassandra 3.5,它是 FROM cassandra:3.5
我也有一个用于Kafka的Dockerfile,但是要复杂得多。它是,FROM java:openjdk-8-fre
并且它运行长命令来安装Kafka和Zookeeper。
最后,我有一个用Scala编写的使用SBT的应用程序。
对于该Dockerfile,它是FROM broadinstitute/scala-baseimage
,这使我得到了Java 8,Scala
2.11.7和STB 0.13.9。
也许,我不了解Docker的工作原理,但是我的Scala程序将Cassandra和Kafka作为依赖项,出于开发目的,我希望其他人能够简单地使用克隆我的存储库,Dockerfile
然后再使用Cassandra,Kafka来构建它。
,Scala,Java和SBT都加入进来,因此它们只能编译源代码。我对此有很多问题。
如何合并这些Dockerfile?我如何简单地将这些东西放进一个环境中?
您可以使用Docker 1.17中引入的 多阶段构建 功能
看看这个:
FROM golang:1.7.3
WORKDIR /go/src/github.com/alexellis/href-counter/
RUN go get -d -v golang.org/x/net/html
COPY app.go .
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM alpine:latest
RUN apk --no-cache add ca-certificates
WORKDIR /root/
COPY --from=0 /go/src/github.com/alexellis/href-counter/app .
CMD ["./app"]
然后正常构建映像:
docker build -t alexellis2/href-counter:latest
来自:https :
//docs.docker.com/develop/develop-images/multistage-
build/
最终结果是与以前相同的微小生产图像,并大大降低了复杂性。您无需创建任何中间映像,也不需要将任何工件提取到本地系统。
它是如何工作的?第二条FROM指令以alpine:latest图像为基础开始新的构建阶段。COPY –from =
0行仅将之前阶段的构建工件复制到此新阶段。Go SDK和任何中间工件都被保留了下来,没有保存在最终图像中。
问题内容: 我有一些容器通过网络docker通过其IP进行通信。 我可以使用该选项,也可以在运行新容器时使用,但是我想为现有容器设置主机名。 可能吗? 问题答案: 一种方法是创建网络并在该网络中添加其他容器。在网络中添加容器时,可以使用的选项。像这样: 创建一个网络: 在网络中添加容器: 因此,每个容器都可以通过别名看到其他容器(该别名用作主机名)。
我试图在docker上使用MySQL映像,附加一个卷,此外,如果还没有表,我想添加一个sql脚本来创建一个表。因此,如果容器在另一台机器中使用,表将始终存在。 我的命令: 我的情况:我能够在运行期间使用-v选项(/myvolume/:/var/lib/mysql)附加卷,并且实际上我还能够将脚本插入到init目录(/docker-entrypoint-initdb.d/)中,但是如果我做了这两件事
问题内容: 我正在尝试建立一个简单的Java程序,该程序可以从其他多个图像(jpg)创建一个动画gif。谁能给我一个有关如何在Java中实现此目标的信息?我已经搜索过Google,但找不到任何真正有用的信息。 感谢你们! 问题答案: 这里有一个类的示例,该类从不同的图像创建动画的gif: 链接 编辑:链接似乎已死。 无论如何,为了清楚起见,这段代码是由Elliot Kroo完成的。 编辑2:感谢您
Mysqldb的Dockerfile: 另一个springboot AppSB的Dockerfile:
我已经在我的服务器上安装了docker,这是linux机器,我是从另一个系统(windows)编码,是否有任何直接从服务器创建dockerized图像?这是我正在使用的文件。 是否可以用服务器的路径或任何其他方式替换,以便直接从服务器创建映像,而不需要将文件复制并粘贴到服务器,然后创建映像??