- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个简单的服务器-客户端 Java 应用程序,其中客户端可以连接到服务器并发送/接收消息。该应用程序是一个使用 IntelliJ 构建的项目,包含多个存储库和 Java 文件。我需要在 Docker 上运行应用程序,但不知道如何构建镜像。
目前,我只需使用 IntelliJ IDEA 上的“编译”和“构建”选项即可在我的计算机上本地运行该应用程序,但不知道如何将其打包到 Docker 镜像中。
我最近才开始使用 IntelliJ 和 Docker,所以我对这两者都没有太多经验。到目前为止,我只成功 Dockerize 了一个简单的 HelloWorld 应用程序。不确定这是否重要,但我在 Java 方面的经验也可以忽略不计。本次任务的目的是学习Docker,而不是Java。
我为我的 HelloWorld 应用程序使用了以下 Dockerfile,该文件非常简单,因为它在一个文件夹中只有一个文件。
FROM java:8
COPY . /var/www/java
WORKDIR /var/www/java
RUN javac HelloWorld.java
CMD ["java", "HelloWorld"]
我想知道如何为我的整个项目做同样的事情。对于上下文,我的服务器应用程序的 src 文件夹中有 3 个文件:“Main.java”、“Server.java”和“ServerThread”。我需要在一个容器中运行服务器应用程序,在另一个容器中运行客户端应用程序。 Dockerfile 应该构建在 src 文件夹内还是根文件夹中。它与简单的 HelloWorld 应用程序的 Dockerfile 应该有什么不同?我应该使用 run
命令运行哪些文件?
我对此感到不知所措,因为这是我第一次使用 Docker 和需要存储库的大型应用程序。
最佳答案
首先,WORKDIR
通常应出现在 COPY
操作之前。这设置了 Docker 镜像中文件的默认位置。
但是,在您的示例中,它不会影响 COPY
,因为您在其中指定了显式容器目标目录。也就是说,它确实会影响您后续的 javac 命令,因为这里没有完全限定的目录名称。
在您的新示例中,您可以执行以下操作:
WORKDIR /var/www/java
COPY src src
这会将主机目录中 src
的所有内容复制到镜像中的 /var/www/java/src
。
这应该是最低限度的工作。 Dockerfile 往往是增量构建的,因此一旦你完成一件事,你就可以处理另一件事。不要试图一次完成所有事情。
您已表示希望在单独的容器中启动服务器和客户端。为此,您可以使用 Docker Compose。这使用一个简单的 YAML 配置文件。在此示例中,一个有 Dockerfile,一个使用现有镜像:
version: "2"
services:
client:
build:
context: .
dockerfile: Dockerfile
args:
- BITBUCKET_PRIVATE_KEY
listener:
image: listener
DC 的伟大之处在于,每个容器都会自动放置在虚拟网络上 - client
将看到一台名为 listener
的机器(反之亦然)。因此客户端可以连接到http://listener:port
。
在某些时候,您可能希望从版本控制系统获取 Java 文件,以便您可以在持续集成下构建容器。为此,您需要注入(inject)私钥,然后从 Git 等中提取;这可以使用 Docker 卷或环境变量来完成(如果您对此感兴趣,那么可能值得将其作为一个单独的问题提出,假设尚未提出)。
关于java - 如何为具有多个存储库的 IntelliJ 项目编写 Dockerfile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57339175/
我正在尝试使用谷歌云构建触发器来构建我的 docker 容器。不幸的是,构建没有找到我的 docker 文件。它不在我的存储库的根目录中,但我认为我可以指定一个相对路径。显然我配置错误了。下面是我的
我可以像这样构建一个 Dockerfile docker build -t deepak/ruby . 但是对于一个不名为Dockerfile的Dockerfile # DOCKER-VERSION
是否可以命名构建阶段?我正在搜索类似以下示例的内容: ARG NAME FROM python:3.7-alpine as modul-${NAME} # ... 如果我尝试这个例子,就会发生这个错误
在我的 Dockerfile 中,我需要使用命令替换来添加一些环境变量。我想设置 ENV PYTHONPATH /usr/local/$(python3 -c 'from distutils impo
以下Dockerfile包含四个COPY层: COPY README.md ./ COPY package.json ./ COPY gulpfile.js ./ COPY __BUILD_NUMBE
我正在尝试从我创建的 Dockerfile 中拉取 tomcat,并使用以下命令拉取 centos: FROM centos RUN docker run -it tomcat 然后现在我正在创建一个
我不确定是否应该为我的 Node.js 应用程序创建不同的 Dockerfile 文件。一种用于没有开发依赖项的生产,另一种用于包含开发依赖项的测试。 或者一个基本上是开发Dockerfile.dev
我拥有的是多个相似且简单的dockerfile 但我想要的是有一个单一的基础 dockerfile 和我的 dockerfile将他们的变量传递给它。 在我的例子中,dockerfile 之间的唯一区
我有一个应用程序有两个 Dockerfile ,说 Dockerfile.foo和 Dockerfile.bar ,预计将为 docker-compose.yml 的两个不同服务生成两个不同的图像.
我是一个 docker maven 插件新手。 如果我理解得很好,根据Spotify's Dockerfile Maven documentation ,应该将 Dockerfile 放在我的项目的根
我正在设置一个docker容器,将在this article之后在nginx服务器上为我的Angular 5应用程序提供服务。 本文提出了这个Dockerfile: # Stage 0, based
大家好, 我是 docker 的新手,我想容器化我的 ASP.NET Core 应用程序,但出现错误,我无法继续构建我的图像 这是我的示例 Dockerfile FROM microsoft/dotn
我想在不使用注册表的情况下链接 Dockerfiles,这可以通过 FROM 实现吗?陈述? 以两个 Dockerfile 为例: Dockerfile /some/other/dir/Dockerf
我尝试在公共(public) dockerhub 上通过我自己的镜像安装 Airflow,但它在本地运行完美,但当我尝试在 Openshift 上使用它时。我在下面收到此错误。 `ERROR: Cou
此 dockerfile 工作正常。但是如何在 dockerfile 中执行命令? FROM alpine RUN apk add --update sqlite && rm -rf /var/cac
当我尝试设置自动构建时,我的 Docker Hub 存储库中的 Dockerfile 为空。如果我触发构建:- Build failed: Dockerfile not found at ./Dock
关闭。这个问题需要details or clarity .它目前不接受答案。 想改进这个问题?通过 editing this post 添加详细信息并澄清问题. 1年前关闭。 Improve this
我目前正在将一个巨大的 DockerFile 拆分为单独的 DockerFile,但是在巨大的 DockerFile 中定义的一些变量需要在单独的 DockerFile 中使用。 Docker 是否有
我有一个 Dockerfile 可以创建我想在这里使用的构建镜像:~/build/Dockerfile 然后我使用一个标准镜像来部署 从 ~/build/Dockerfile 构建的图像没有在任何地方
我运行这个: ➜ frontend git:(master) ✗ docker-compose up Building web ERROR: Cannot locate specified Dock
我是一名优秀的程序员,十分优秀!