使用 Jetty 和 Cassandra 创建 docker 个容器

Creating docker container with Jetty and Cassandra

使用提到的步骤 here

在 Cent OS 上安装 docker

到目前为止,我可以按照上述步骤 运行 docker jetty 和 cassandra 的独立图像 Jetty & Cassandra


我想创建一个 docker 容器,它将有 Cassandra database 和一个 Web 应用程序 运行ning 在 Jetty server 中与该数据库交互。

我能够使用 Jetty 创建 docker 容器,并且能够 运行 使用以下 Dockerfile 内容

在 Jetty 中使用一些示例 Web 应用程序
FROM jetty
RUN mkdir /var/lib/jetty/webapps/test-app
COPY index.html /var/lib/jetty/webapps/test-app/

一旦我将此文件保存为 Dockerfile,我将发出以下命令来创建 docker 图像和 运行 相同的

docker build -t test-docker .

docker run -d -p 8443:8080 test-docker

现在我可以使用

在我的浏览器中看到此应用程序的相同结果

<ip_address>:8443/test-app/index.html

问题:

我应该如何将 Cassandra 数据库与此 docker 图像和 运行 完整的 Jetty + Cassandra + Web Application 打包成一个组集成?

您可以使用Cassandra Official Docker Image来启动cassandra数据库。像现在一样在单独的容器中启动您的 Web 应用程序。

您可以 link cassandra 容器与您的 Web 应用程序容器

docker run --name webapp --link cassandra:cassandra -d test-docker

您需要在 web 应用程序中使用 cassandra hostname/container IP。您可以将 cassandra DB_URL 作为环境变量传递。

docker run --name webapp --link cassandra:cassandra  -e DB_URL='cassandra:7000' -d test-docker

阅读更多关于 Docker container Linking

Docker Cassandra Documentation中所述,用

代替运行cassandra
docker run --name some-cassandra -d cassandra:tag

提及 cassandra 使用的所有端口,以便它们可以从外部资源进行通信或交互,如下所示

docker run --name some-cassandra -d -p 7000:7000 -p 7001:7001 -p 7199:7199 -p 9042:9042 -p 9160:9160 cassandra:tag

现在 Jetty 容器中的 Web 应用程序 运行 可以使用 Java 驱动程序访问 Cassandra 数据库。

注意: 如果您使用的 Cassandra 版本 > 3.0,那么您应该使用 cassandra-driver-core 的版本 >= 3.0

cassandra-driver-core

的 Maven 依赖项
<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-core</artifactId>
    <version>3.0.0</version>
</dependency>

cassandra-driver-mapping

<dependency>
    <groupId>com.datastax.cassandra</groupId>
    <artifactId>cassandra-driver-mapping</artifactId>
    <version>3.0.0</version>
</dependency>