This is an automated email from the ASF dual-hosted git repository.

dongjoon pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/spark-connect-swift.git


The following commit(s) were added to refs/heads/main by this push:
     new aee213f  [SPARK-52074] Add `Dockerfile`s to all examples
aee213f is described below

commit aee213f20f18ebc1850e4d63dd10c4d2c81a90fd
Author: Dongjoon Hyun <[email protected]>
AuthorDate: Sun May 11 20:37:20 2025 -0700

    [SPARK-52074] Add `Dockerfile`s to all examples
    
    ### What changes were proposed in this pull request?
    
    This PR aims to add `Dockerfile`s to all examples. Also, all example 
`README.md` files are updated.
    
    ### Why are the changes needed?
    
    To provide an easy way to build and use with Docker and K8s environment.
    
    ### Does this PR introduce _any_ user-facing change?
    
    No.
    
    ### How was this patch tested?
    
    Manual review.
    
    ### Was this patch authored or co-authored using generative AI tooling?
    
    No.
    
    Closes #132 from dongjoon-hyun/SPARK-52074.
    
    Authored-by: Dongjoon Hyun <[email protected]>
    Signed-off-by: Dongjoon Hyun <[email protected]>
---
 Examples/app/Dockerfile                            | 46 +++++++++++++++++++++
 Examples/app/README.md                             | 47 ++++++++++++++++++++-
 Examples/pi/Dockerfile                             | 46 +++++++++++++++++++++
 Examples/pi/README.md                              | 26 ++++++++++--
 Examples/stream/Dockerfile                         | 46 +++++++++++++++++++++
 Examples/stream/README.md                          | 31 ++++++++++----
 Examples/stream/Sources/main.swift                 |  7 +++-
 Examples/web/Dockerfile                            | 48 ++++++++++++++++++++++
 Examples/web/Package.swift                         |  4 +-
 Examples/web/README.md                             | 32 +++++++++++++--
 .../Sources/SparkConnectSwiftWeb/configure.swift   |  1 +
 11 files changed, 314 insertions(+), 20 deletions(-)

diff --git a/Examples/app/Dockerfile b/Examples/app/Dockerfile
new file mode 100644
index 0000000..1bbacd2
--- /dev/null
+++ b/Examples/app/Dockerfile
@@ -0,0 +1,46 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+FROM swift:6.1 AS builder
+
+WORKDIR /app
+
+COPY . .
+
+RUN swift build -c release
+
+FROM swift:6.1-slim
+
+ARG SPARK_UID=185
+
+LABEL org.opencontainers.image.authors="Apache Spark project 
<[email protected]>"
+LABEL org.opencontainers.image.licenses="Apache-2.0"
+LABEL org.opencontainers.image.ref.name="Apache Spark Connect for Swift"
+
+ENV SPARK_SWIFT_HOME=/opt/spark-swift
+ENV SPARK_SWIFT_APP=SparkConnectSwiftApp
+
+WORKDIR $SPARK_SWIFT_HOME
+
+RUN groupadd --system --gid=$SPARK_UID spark && \
+    useradd --system --home-dir $SPARK_SWIFT_HOME --uid=$SPARK_UID --gid=spark 
spark && \
+    chown -R spark:spark $SPARK_SWIFT_HOME
+
+COPY --from=builder --chown=spark:spark 
/app/.build/*-unknown-linux-gnu/release/$SPARK_SWIFT_APP .
+
+USER spark
+
+ENTRYPOINT ["/bin/sh", "-c", "$SPARK_SWIFT_HOME/$SPARK_SWIFT_APP"]
diff --git a/Examples/app/README.md b/Examples/app/README.md
index 285a0d3..bede7c2 100644
--- a/Examples/app/README.md
+++ b/Examples/app/README.md
@@ -4,12 +4,55 @@ This is an example Swift application to show how to use 
Apache Spark Connect Swi
 
 ## How to run
 
-Run this Swift application.
+Prepare `Spark Connect Server` via running Docker image.
+
+```
+docker run --rm -p 15002:15002 apache/spark:4.0.0-preview2 bash -c 
"/opt/spark/sbin/start-connect-server.sh --wait"
+```
+
+Build an application Docker image.
+
+```
+$ docker build -t apache/spark-connect-swift:app .
+$ docker images apache/spark-connect-swift:app
+REPOSITORY                   TAG       IMAGE ID       CREATED         SIZE
+apache/spark-connect-swift   app       e132e1b38348   5 seconds ago   368MB
+```
+
+Run `app` docker image.
+
+```
+$ docker run --rm -e SPARK_REMOTE=sc://host.docker.internal:15002 
apache/spark-connect-swift:app
+Connected to Apache Spark 4.0.0-preview2 Server
+EXECUTE: DROP TABLE IF EXISTS t
+EXECUTE: CREATE TABLE IF NOT EXISTS t(a INT) USING ORC
+EXECUTE: INSERT INTO t VALUES (1), (2), (3)
+SELECT * FROM t
++---+
+|  a|
++---+
+|  2|
+|  1|
+|  3|
++---+
+
++---+
+| id|
++---+
+|  0|
+|  8|
+|  6|
+|  2|
+|  4|
++---+
+```
+
+Run from source code.
 
 ```
 $ swift run
 ...
-Connected to Apache Spark 4.0.0 Server
+Connected to Apache Spark 4.0.0-preview2 Server
 EXECUTE: DROP TABLE IF EXISTS t
 EXECUTE: CREATE TABLE IF NOT EXISTS t(a INT) USING ORC
 EXECUTE: INSERT INTO t VALUES (1), (2), (3)
diff --git a/Examples/pi/Dockerfile b/Examples/pi/Dockerfile
new file mode 100644
index 0000000..49ee0de
--- /dev/null
+++ b/Examples/pi/Dockerfile
@@ -0,0 +1,46 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+FROM swift:6.1 AS builder
+
+WORKDIR /app
+
+COPY . .
+
+RUN swift build -c release
+
+FROM swift:6.1-slim
+
+ARG SPARK_UID=185
+
+LABEL org.opencontainers.image.authors="Apache Spark project 
<[email protected]>"
+LABEL org.opencontainers.image.licenses="Apache-2.0"
+LABEL org.opencontainers.image.ref.name="Apache Spark Connect for Swift"
+
+ENV SPARK_SWIFT_HOME=/opt/spark-swift
+ENV SPARK_SWIFT_APP=SparkConnectSwiftPi
+
+WORKDIR $SPARK_SWIFT_HOME
+
+RUN groupadd --system --gid=$SPARK_UID spark && \
+    useradd --system --home-dir $SPARK_SWIFT_HOME --uid=$SPARK_UID --gid=spark 
spark && \
+    chown -R spark:spark $SPARK_SWIFT_HOME
+
+COPY --from=builder --chown=spark:spark 
/app/.build/*-unknown-linux-gnu/release/$SPARK_SWIFT_APP .
+
+USER spark
+
+ENTRYPOINT ["/bin/sh", "-c", "$SPARK_SWIFT_HOME/$SPARK_SWIFT_APP"]
diff --git a/Examples/pi/README.md b/Examples/pi/README.md
index 3ae9d6b..715c381 100644
--- a/Examples/pi/README.md
+++ b/Examples/pi/README.md
@@ -4,11 +4,31 @@ This is an example Swift application to show how to use 
Apache Spark Connect Swi
 
 ## How to run
 
-Run this Swift application.
+Prepare `Spark Connect Server` via running Docker image.
+```
+docker run --rm -p 15002:15002 apache/spark:4.0.0-preview2 bash -c 
"/opt/spark/sbin/start-connect-server.sh --wait"
+```
+
+Build an application Docker image.
+
+```
+$ docker build -t apache/spark-connect-swift:pi .
+$ docker images apache/spark-connect-swift:pi
+REPOSITORY                   TAG       IMAGE ID       CREATED         SIZE
+apache/spark-connect-swift   pi        d03952577564   4 seconds ago   369MB
+```
+
+Run `pi` docker image.
+
+```
+$ docker run --rm -e SPARK_REMOTE=sc://host.docker.internal:15002 
apache/spark-connect-swift:pi
+Pi is roughly 3.1412831412831412
+```
+
+Run from source code.
 
 ```
-$ swift run SparkConnectSwiftPi 1000000
+$ swift run
 ...
-Connected to Apache Spark 4.0.0 Server
 Pi is roughly 3.1423711423711422
 ```
diff --git a/Examples/stream/Dockerfile b/Examples/stream/Dockerfile
new file mode 100644
index 0000000..16583cd
--- /dev/null
+++ b/Examples/stream/Dockerfile
@@ -0,0 +1,46 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+FROM swift:6.1 AS builder
+
+WORKDIR /app
+
+COPY . .
+
+RUN swift build -c release
+
+FROM swift:6.1-slim
+
+ARG SPARK_UID=185
+
+LABEL org.opencontainers.image.authors="Apache Spark project 
<[email protected]>"
+LABEL org.opencontainers.image.licenses="Apache-2.0"
+LABEL org.opencontainers.image.ref.name="Apache Spark Connect for Swift"
+
+ENV SPARK_SWIFT_HOME=/opt/spark-swift
+ENV SPARK_SWIFT_APP=SparkConnectSwiftNetworkWordCount
+
+WORKDIR $SPARK_SWIFT_HOME
+
+RUN groupadd --system --gid=$SPARK_UID spark && \
+    useradd --system --home-dir $SPARK_SWIFT_HOME --uid=$SPARK_UID --gid=spark 
spark && \
+    chown -R spark:spark $SPARK_SWIFT_HOME
+
+COPY --from=builder --chown=spark:spark 
/app/.build/*-unknown-linux-gnu/release/$SPARK_SWIFT_APP .
+
+USER spark
+
+ENTRYPOINT ["/bin/sh", "-c", "$SPARK_SWIFT_HOME/$SPARK_SWIFT_APP"]
diff --git a/Examples/stream/README.md b/Examples/stream/README.md
index ee8553e..3d0221a 100644
--- a/Examples/stream/README.md
+++ b/Examples/stream/README.md
@@ -5,7 +5,7 @@ This is an example Swift stream processing application to show 
how to count word
 ## Run `Spark Connect Server`
 
 ```bash
-./sbin/start-connect-server.sh --wait -c spark.log.level=ERROR
+docker run --rm -p 15002:15002 apache/spark:4.0.0-preview2 bash -c 
"/opt/spark/sbin/start-connect-server.sh --wait -c spark.log.level=ERROR"
 ```
 
 ## Run `Netcat` as a streaming input server
@@ -16,12 +16,21 @@ You will first need to run Netcat (a small utility found in 
most Unix-like syste
 nc -lk 9999
 ```
 
-## Start streaming processing application
+## Build and run from docker image
+
+Build an application Docker image.
 
-```bash
-$ swift run
-...
-Connected to Apache Spark 4.0.0 Server
+```
+$ docker build -t apache/spark-connect-swift:stream .
+$ docker images apache/spark-connect-swift:stream
+REPOSITORY                   TAG       IMAGE ID       CREATED         SIZE
+apache/spark-connect-swift   stream    a4daa10ad9c5   7 seconds ago   369MB
+```
+
+Run `stream` docker image.
+
+```
+$ docker run --rm -e SPARK_REMOTE=sc://host.docker.internal:15002 -e 
TARGET_HOST=host.docker.internal apache/spark-connect-swift:stream
 ```
 
 ## Send input and check output
@@ -34,7 +43,7 @@ apache spark
 apache hadoop
 ```
 
- `Spark Connect Server` output will look something like the following.
+`Spark Connect Server` output will look something like the following.
 
 ```bash
 -------------------------------------------
@@ -66,3 +75,11 @@ Batch: 2
 |hadoop|       1|
 +------+--------+
 ```
+
+## Run from source code
+
+```bash
+$ swift run
+...
+Connected to Apache Spark 4.0.0 Server
+```
diff --git a/Examples/stream/Sources/main.swift 
b/Examples/stream/Sources/main.swift
index 2ce9a40..5c73356 100644
--- a/Examples/stream/Sources/main.swift
+++ b/Examples/stream/Sources/main.swift
@@ -17,17 +17,20 @@
 // under the License.
 //
 
+import Foundation
 import SparkConnect
 
 let spark = try await SparkSession.builder.getOrCreate()
 print("Connected to Apache Spark \(await spark.version) Server")
 
+let host = ProcessInfo.processInfo.environment["TARGET_HOST"] ?? "localhost"
+
 let lines =
   await spark
   .readStream
   .format("socket")
-  .option("host", "localhost")
-  .option("port", "9999")
+  .option("host", host)
+  .option("port", 9999)
   .load()
 
 let word =
diff --git a/Examples/web/Dockerfile b/Examples/web/Dockerfile
new file mode 100644
index 0000000..681f81f
--- /dev/null
+++ b/Examples/web/Dockerfile
@@ -0,0 +1,48 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements.  See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License.  You may obtain a copy of the License at
+#
+#    http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+FROM swift:6.1 AS builder
+
+WORKDIR /app
+
+COPY . .
+
+RUN swift build -c release
+
+FROM swift:6.1-slim
+
+ARG SPARK_UID=185
+
+LABEL org.opencontainers.image.authors="Apache Spark project 
<[email protected]>"
+LABEL org.opencontainers.image.licenses="Apache-2.0"
+LABEL org.opencontainers.image.ref.name="Apache Spark Connect for Swift"
+
+ENV SPARK_SWIFT_HOME=/opt/spark-swift
+ENV SPARK_SWIFT_APP=SparkConnectSwiftWeb
+
+WORKDIR $SPARK_SWIFT_HOME
+
+RUN groupadd --system --gid=$SPARK_UID spark && \
+    useradd --system --home-dir $SPARK_SWIFT_HOME --uid=$SPARK_UID --gid=spark 
spark && \
+    chown -R spark:spark $SPARK_SWIFT_HOME
+
+COPY --from=builder --chown=spark:spark 
/app/.build/*-unknown-linux-gnu/release/$SPARK_SWIFT_APP .
+
+USER spark
+
+EXPOSE 8080
+
+ENTRYPOINT ["/bin/sh", "-c", "$SPARK_SWIFT_HOME/$SPARK_SWIFT_APP"]
diff --git a/Examples/web/Package.swift b/Examples/web/Package.swift
index 7d793ab..f17d697 100644
--- a/Examples/web/Package.swift
+++ b/Examples/web/Package.swift
@@ -20,7 +20,7 @@
 import PackageDescription
 
 let package = Package(
-  name: "SparkConnectSwiftWebapp",
+  name: "SparkConnectSwiftWeb",
   platforms: [
     .macOS(.v15)
   ],
@@ -33,7 +33,7 @@ let package = Package(
   ],
   targets: [
     .executableTarget(
-      name: "SparkConnectSwiftWebapp",
+      name: "SparkConnectSwiftWeb",
       dependencies: [
         .product(name: "Vapor", package: "vapor"),
         .product(name: "NIOCore", package: "swift-nio"),
diff --git a/Examples/web/README.md b/Examples/web/README.md
index 3ae473e..c744ef2 100644
--- a/Examples/web/README.md
+++ b/Examples/web/README.md
@@ -2,7 +2,6 @@
 
 This project is designed to illustrate a Swift-based HTTP WebServer with 
Apache Spark Connect.
 
-- https://swiftpackageindex.com/apache/spark-connect-swift
 - https://swiftpackageindex.com/vapor/vapor
 
 ## Create a Swift project
@@ -73,17 +72,42 @@ index 2edcc8f..22313c8 100644
  }
 ```
 
-## Run this Swift application.
+## How to run
+
+Prepare `Spark Connect Server` via running Docker image.
 
 ```
-$ swift run
+docker run --rm -p 15002:15002 apache/spark:4.0.0-preview2 bash -c 
"/opt/spark/sbin/start-connect-server.sh --wait"
+```
+
+Build an application Docker image.
+
+```
+$ docker build -t apache/spark-connect-swift:web .
+$ docker images apache/spark-connect-swift:web
+REPOSITORY                   TAG       IMAGE ID       CREATED          SIZE
+apache/spark-connect-swift   web       3fd2422fdbee   27 seconds ago   417MB
+```
+
+Run `web` docker image
+
+```
+$ docker run -it --rm -p 8080:8080 -e 
SPARK_REMOTE=sc://host.docker.internal:15002 apache/spark-connect-swift:web
+[ NOTICE ] Server started on http://127.0.0.1:8080
 ```
 
-## Connect to the Swift Web Server to talk with `Apache Spark`.
+Connect to the Swift Web Server to talk with `Apache Spark`.
 
 ```
 $ curl http://127.0.0.1:8080/
 Welcome to the Swift world. Say hello!%
+
 $ curl http://127.0.0.1:8080/hello
 Hi, this is powered by the Apache Spark 4.0.0.%
 ```
+
+Run from source code.
+
+```
+$ swift run
+```
diff --git a/Examples/web/Sources/SparkConnectSwiftWeb/configure.swift 
b/Examples/web/Sources/SparkConnectSwiftWeb/configure.swift
index cbc3edb..f70192a 100644
--- a/Examples/web/Sources/SparkConnectSwiftWeb/configure.swift
+++ b/Examples/web/Sources/SparkConnectSwiftWeb/configure.swift
@@ -21,6 +21,7 @@ import Vapor
 
 // configures your application
 public func configure(_ app: Application) async throws {
+  app.http.server.configuration.hostname = "0.0.0.0"
   // register routes
   try routes(app)
 }


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to