KARAF / karaf star
01-06
Open
#50 x86_64 Karaf 4.4.6 + Kafka Client(servicemix) 도커 이미지 생성하기 star
01-06 Open
Tasks

Dockerfile#

FROM kkozzi-amd64-ubuntu2410-jdk17:2025.0106

# 4.4.6
ARG KARAF_VERSION
# https://dlcdn.apache.org/karaf/4.4.6/apache-karaf-4.4.6.tar.gz
ARG KARAF_DOWNLOAD_URL
# apache-karaf-4.4.6.tar.gz
ARG KARAF_DOWNLOAD_FILENAME
#apache-karaf-4.4.6
ARG KARAF_EXTRACT_DIR

# os user: kkozzi
ARG KKOZZI_PASSWORD

# karaf user: karaf
ARG KARAF_PASSWORD

# nexus
ARG NEXUS_HOST_USERID
ARG NEXUS_HOST_PASSWORD
ARG NEXUS_HOST_IPADDRESS
# 8083
ARG NEXUS_HOST_PORT
ARG NEXUS_USERID
ARG NEXUS_PASSWORD

########################
### root 사용자 환경 ###
########################
USER root
# kkozzi 사용자 비밀번호 변경
RUN echo "kkozzi:$KKOZZI_PASSWORD" | chpasswd

##################
### ffmpeg 설치 ###
##################
RUN apt-get update && \
    apt-get install -y ffmpeg && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

########################
### kkozzi 사용자 환경 ###
########################
USER kkozzi
ENV KARAF_VERSION="Ubuntu 24.10, OpenJDK 17, Karaf $KARAF_VERSION"

# make directory /App/karaf
RUN mkdir -p /App/karaf
RUN chmod 755 /App/karaf

# Install KARAF $KARAF_VERSION
RUN wget $KARAF_DOWNLOAD_URL -O /App/down/$KARAF_DOWNLOAD_FILENAME

# RUN cd /App/down
WORKDIR /App/down
RUN tar zxvf $KARAF_DOWNLOAD_FILENAME
RUN cp -Rv /App/down/$KARAF_EXTRACT_DIR/* /App/karaf
RUN chmod +x /App/karaf/bin/start
RUN rm -rf /App/down/*

RUN echo "karaf = $KARAF_PASSWORD,_g_:admingroup" >> /App/karaf/etc/users.properties
RUN echo "_g_\:admingroup = group,admin,manager,viewer,systembundles,ssh" >> /App/karaf/etc/users.properties

RUN ssh-keygen -A

RUN mkdir -p /home/kkozzi/.m2

RUN printf "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\
\n<settings xmlns=\"http://maven.apache.org/SETTINGS/1.0.0\"\
\n          xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\
\n          xsi:schemaLocation=\"http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd\">\
\n    <pluginGroups>\
\n    </pluginGroups>\
\n    <proxies>\
\n    </proxies>\
\n    <servers>\
\n        <server>\
\n          <id>nexus</id>\
\n          <username>$NEXUS_USERID</username>\
\n          <password>$NEXUS_PASSWORD</password>\
\n        </server>\
\n        <server>\
\n          <id>central</id>\
\n          <username>$NEXUS_USERID</username>\
\n          <password>$NEXUS_PASSWORD</password>\
\n        </server>\
\n    </servers>\
\n    <mirrors>\
\n        <mirror>\
\n          <id>central</id>\
\n          <mirrorOf>*</mirrorOf>\
\n          <name>central</name>\
\n          <url>http://localhost:8080/repository/maven-public/</url>\
\n        </mirror>\
\n    </mirrors>\
\n    <profiles>\
\n        <profile>\
\n          <id>nexus</id>\
\n          <activation>\
\n            <jdk>1.8</jdk>\
\n          </activation>\
\n          <repositories>\
\n            <repository>\
\n              <id>nexuss</id>\
\n              <name>Local repository</name>\
\n              <url>http://localhost:8080/repository/maven-public/</url>\
\n              <layout>default</layout>\
\n               <releases>\
\n                    <enabled>true</enabled>\
\n                    <updatePolicy>always</updatePolicy>\
\n                </releases>\
\n                <snapshots>\
\n                    <enabled>true</enabled>\
\n                    <updatePolicy>daily</updatePolicy>\
\n                </snapshots>\
\n            </repository>\
\n          </repositories>\
\n        </profile>\
\n    </profiles>\
\n</settings>\
\n" > /home/kkozzi/.m2/settings.xml


USER kkozzi

RUN mkdir -p /home/kkozzi/.ssh
RUN echo "Host * \n\
Protocol 2\n\
ServerAliveInterval 60\n\
" >> /home/kkozzi/.ssh/conf

RUN echo $NEXUS_HOST_PASSWORD >> /home/kkozzi/.ssh/pass_nexus.txt

RUN echo "#!/bin/bash \n\
ps -eaf | grep L:8080 | grep localhost:$NEXUS_HOST_PORT \n\
# if not found - equals to 1, start it \n\
if [ \$? -eq 1 ] \n\
then \n\
sshpass -f /home/kkozzi/.ssh/pass_nexus.txt ssh -o StrictHostKeyChecking=no -f -N -T -M $NEXUS_HOST_USERID@$NEXUS_HOST_IPADDRESS -L:8080:localhost:$NEXUS_HOST_PORT \n\
echo \"Reconnect to Nexus.\" \n\
else \n\
echo \"Already connect to Nexus.\" \n\
fi \n\
" >> /home/kkozzi/conn_nexus.sh

RUN chmod 755 /home/kkozzi/conn_nexus.sh

RUN mv /App/karaf/etc/org.ops4j.pax.url.mvn.cfg /App/karaf/etc/org.ops4j.pax.url.mvn.cfg.old

RUN printf "\
\norg.ops4j.pax.url.mvn.certificateCheck=true\
\norg.ops4j.pax.url.mvn.settings=/home/kkozzi/.m2/settings.xml\
\norg.ops4j.pax.url.mvn.useFallbackRepositories=false\
\n\
\norg.ops4j.pax.url.mvn.defaultRepositories=\${karaf.home.uri}\${karaf.default.repository}@id=system.repository@snapshots,\${karaf.data.uri}kar@id=kar.repository@multi@snapshots,\${karaf.base.uri}\${karaf.default.repository}@id=child.system.repository@snapshots\
\\norg.ops4j.pax.url.mvn.repositories=https://repo1.maven.org/maven2@id=central,https://repository.apache.org/content/groups/snapshots-group@id=apache@snapshots@noreleases,https://oss.sonatype.org/content/repositories/ops4j-snapshots@id=ops4j.sonatype.snapshots.deploy@snapshots@noreleases,http://$NEXUS_USERID:$NEXUS_PASSWORD@localhost:8080/repository/maven-public@id=nexus\
\n\
\norg.ops4j.pax.url.mvn.globalUpdatePolicy = always\
\n\
\norg.ops4j.pax.url.mvn.timeout = 5000\
\norg.ops4j.pax.url.mvn.socket.connectionTimeout = 5000\
\norg.ops4j.pax.url.mvn.socket.readTimeout = 30000\
\norg.ops4j.pax.url.mvn.socket.keepAlive = false\
\norg.ops4j.pax.url.mvn.socket.linger = -1\
\norg.ops4j.pax.url.mvn.socket.reuseAddress = false\
\norg.ops4j.pax.url.mvn.socket.tcpNoDelay = true\
\norg.ops4j.pax.url.mvn.connection.bufferSize = 8192\
\norg.ops4j.pax.url.mvn.connection.retryCount = 3\
\n" > /App/karaf/etc/org.ops4j.pax.url.mvn.cfg


 # Install features
RUN sshpass -f /home/kkozzi/.ssh/pass_nexus.txt ssh -o StrictHostKeyChecking=no -f -N -T -M $NEXUS_HOST_USERID@$NEXUS_HOST_IPADDRESS -L:8080:localhost:$NEXUS_HOST_PORT;printf "\
\nfeature:repo-add camel 4.7.0\
\nfeature:install aries-blueprint\
\nfeature:install jdbc\
\nfeature:install jndi\
\nfeature:install scr\
\nfeature:install http\
\nfeature:install pax-web-jetty-http2\
\nfeature:install http-whiteboard\
\nfeature:install jackson-jaxrs\
\nfeature:install transaction-api\
\nfeature:install transaction\
\nfeature:install jpa\
\nfeature:install subsystems\
\nfeature:install war\
\nfeature:install pax-jdbc-pool-dbcp2\
\nfeature:install pax-jdbc-pool-aries\
\nfeature:install pax-jdbc-oracle\
\nfeature:install pax-cdi\
\nfeature:install hibernate\
\nfeature:install hibernate-envers\
\nfeature:install jasypt-encryption\
\nfeature:install webconsole\
\nfeature:install jolokia\
\nfeature:install blueprint-web\
\nfeature:install camel\
\nfeature:install camel-http\
\nfeature:install camel-netty\
\nfeature:install camel-servlet\
\nfeature:install camel-jackson\
\nfeature:install camel-jacksonxml\
\nfeature:install camel-gson\
\nfeature:install camel-stream\
\nfeature:install camel-sql\
\nfeature:install camel-bindy\
\nfeature:install camel-kafka\
\nfeature:install guava\
\n" | /App/karaf/bin/karaf

RUN printf "\
\ninstall -s mvn:javax.ws.rs/javax.ws.rs-api/2.1\
\ninstall -s mvn:org.yaml/snakeyaml/1.33\
\ninstall -s mvn:com.fasterxml.jackson.core/jackson-core/2.14.0\
\ninstall -s mvn:com.fasterxml.jackson.core/jackson-annotations/2.14.0\
\ninstall -s mvn:com.fasterxml.jackson.core/jackson-databind/2.14.0\
\ninstall -s mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-base/2.14.0\
\ninstall -s mvn:com.fasterxml.jackson.datatype/jackson-datatype-jsr310/2.14.0\
\ninstall -s mvn:com.fasterxml.jackson.jaxrs/jackson-jaxrs-json-provider/2.14.0\
\ninstall -s mvn:com.fasterxml.jackson.dataformat/jackson-dataformat-yaml/2.14.0\
\ninstall -s mvn:com.googlecode.json-simple/json-simple/1.1.1\
\ninstall -s mvn:org.apache.commons/commons-collections4/4.4\
\ninstall -s mvn:commons-lang/commons-lang/2.6\
\ninstall -s mvn:commons-io/commons-io/2.11.0\
\ninstall -s mvn:commons-codec/commons-codec/1.15\
\ninstall -s wrap:mvn:com.github.stephenc.jcip/jcip-annotations/1.0-1\
\ninstall -s wrap:mvn:org.eclipse.ecf/org.objectweb.asm/5.0.1.v201404251740\
\ninstall -s wrap:mvn:xalan/xalan/2.7.2\
\ninstall -s wrap:mvn:io.jsonwebtoken/jjwt-api/0.10.5\
\ninstall -s wrap:mvn:io.jsonwebtoken/jjwt-impl/0.10.5\
\ninstall -s wrap:mvn:io.jsonwebtoken/jjwt-jackson/0.10.5\
\ninstall -s wrap:mvn:com.auth0/java-jwt/3.18.2\
\ninstall -s wrap:mvn:com.google.code.gson/gson/2.8.0\
\ninstall -s mvn:com.google.guava/guava/33.3.0-jre\
\ninstall -s mvn:org.javassist/javassist/3.22.0-CR2\
\ninstall -s mvn:org.postgresql/postgresql/42.3.7\
\ninstall -s mvn:org.ow2.asm/asm-all/5.2\
\ninstall -s wrap:mvn:net.minidev/accessors-smart/1.2\
\ninstall -s wrap:mvn:net.minidev/json-smart/2.3\
\ninstall -s wrap:mvn:com.nimbusds/nimbus-jose-jwt/9.40\
\ninstall -s mvn:javax.xml.soap/javax.xml.soap-api/1.4.0\
\nstart-level javax.xml.soap-api 75\
\ninstall -s mvn:javax.validation/validation-api/2.0.0.Final\
\ninstall -s mvn:org.apache.commons/commons-lang3/3.12.0\
\ninstall -s mvn:io.swagger.core.v3/swagger-annotations/2.2.8\
\ninstall -s mvn:io.swagger.core.v3/swagger-models/2.2.8\
\ninstall -s mvn:io.swagger.core.v3/swagger-core/2.2.8\
\ninstall -s mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.kafka-clients/3.8.0_1\
\ninstall -s mvn:com.github.luben/zstd-jni/1.5.6-7\
\ninstall -s mvn:org.lz4/lz4-java/1.8.0\
\ninstall -s mvn:org.xerial.snappy/snappy-java/1.1.10.7\
\n" | /App/karaf/bin/karaf


RUN printf "\
\ninstall -s wrap:mvn:com.github.vertical-blank/sql-formatter/2.0.5\
\n" | /App/karaf/bin/karaf

USER kkozzi
WORKDIR /home/kkozzi

RUN printf "#!/bin/bash\
\nsudo service ssh start\
\nsshpass -f /home/kkozzi/.ssh/pass_nexus.txt ssh -o StrictHostKeyChecking=no -f -N -T -M $NEXUS_HOST_USERID@$NEXUS_HOST_IPADDRESS -L:8080:localhost:$NEXUS_HOST_PORT\
\nkaraf run\
\n" > /home/kkozzi/startup_server.sh

RUN chmod 755 /home/kkozzi/startup_server.sh

ENV KARAF_HOME /App/karaf
ENV KARAF_EXEC exec
ENV PATH $PATH:$KARAF_HOME/bin
####################
### 서비스 포트 노출 ###
####################
EXPOSE 22 8101 1099 44444 8181 9999
#CMD ["sudo", "/usr/sbin/sshd", "-D"]
ENTRYPOINT ["/home/kkozzi/startup_server.sh"]

빌드#


docker build --no-cache \
--build-arg KKOZZI_PASSWORD=tiger \
--build-arg KARAF_VERSION=4.4.6 \
--build-arg KARAF_DOWNLOAD_URL=https://dlcdn.apache.org/karaf/4.4.6/apache-karaf-4.4.6.tar.gz \
--build-arg KARAF_DOWNLOAD_FILENAME=apache-karaf-4.4.6.tar.gz \
--build-arg KARAF_EXTRACT_DIR=apache-karaf-4.4.6 \
--build-arg KARAF_PASSWORD=tiger \
--build-arg NEXUS_USERID=scott \
--build-arg NEXUS_PASSWORD=Tiger7 \
--build-arg NEXUS_HOST_USERID=scott \
--build-arg NEXUS_HOST_IPADDRESS=nexus.newstong.com \
--build-arg NEXUS_HOST_PORT=8083 \
--build-arg NEXUS_HOST_PASSWORD=Tiger\!T \
-t kkozzi-amd64-ubuntu2410-jdk17-karaf4-kafka:2025.0106 .
Issue Sharer
Comment 0

Add a comment
New subtask
Assignee
No assignee
Due date
No due date
Label
docker ubuntu java karaf kafka
Comment 0