Hi, that's the way I did w/ Camel on Karaf 1. Start karaf
cd /opt unzip /home/karaf/apache-karaf-4.2.7.zip ln -s /opt/apache-karaf* /opt/apache-karaf cd apache-karaf/bin ./karaf 2. Install the needed features (in a 2nd SSH session) cd /opt/apache-karaf/bin ./client < karaf.sh karaf.sh looks like feature:repo-add hawtio 2.9.1 feature:repo-add activemq 5.15.11 feature:repo-add camel 3.1.0 feature:install webconsole hawtio activemq-broker-noweb camel camel-jms jms camel-http camel-jetty camel-swagger-java camel-ftp camel-jackson camel-jsonpath camel-zipfile camel-velocity camel-groovy 3. Package the archive file of the ready-to-run karaf ^D tar -czvf apache-karaf-4.2.7-camel-3.0.1.tgz apache-karaf-4.2.7 cp apache-karaf apache-karaf-4.2.7-apache-camel-3.0.1.tgz /home/karaf 4. Build the docker container based on the created archive, the Dockerfile and docker-compose docker-compose up --build -d Dockerfile looks like FROM openjdk:8-jre # Set karaf environment variables ENV KARAF_INSTALL_PATH /opt ENV KARAF_HOME $KARAF_INSTALL_PATH/apache-karaf ENV PATH $PATH:$KARAF_HOME/bin # The karaf_dist can point to a directory or a tarball on the local system ARG karaf_dist=apache-karaf-4.2.7-camel-3.0.1.tgz # Install build dependencies and karaf ADD $karaf_dist $KARAF_INSTALL_PATH RUN set -x && \ ln -s $KARAF_INSTALL_PATH/apache-karaf* $KARAF_HOME # Create karaf user RUN groupadd --gid 2000 karaf && \ useradd --uid 2000 --create-home --home-dir /var/karaf --gid karaf karaf # Set user permissions RUN mkdir -p /var/karaf/files && \ mkdir /opt/apache-karaf/templates && \ chown -R karaf:karaf /var/karaf && \ chown -R karaf:karaf /opt/apache-karaf* EXPOSE 8101 1099 44444 8181 8443 USER karaf CMD ["karaf", "run"] docker-compose looks like services: karaf: container_name: karaf user: "2000" build: . restart: unless-stopped network_mode: bridge ports: - "8101:8101" - "1099:1099" - "44444:44444" - "8181:8181" - "8443:8443" - "8182:8182" - "8444:8444" volumes: - /var/karaf/etc:/opt/apache-karaf/etc - /var/karaf/deploy:/opt/apache-karaf/deploy - /var/karaf/templates:/opt/apache-karaf/templates - /var/karaf/files:/var/casisp/files command: karaf stdin_open: true tty: true So far I'm exposing the 4 directories karaf/etc karaf/deploy karaf/templates (for Velocity templates we're using) karaf/files (for file component consumer and producer) For me it works well. I've to do a little bit of improvement 1. The .m2 Maven directory isn't included yet within the container, so far ist shows some warnings while starting offline 2. Active MQ shows in offline start mode an error because one file is missing Both I'm going to solve within the next couple of days. Best - Gerald > Steinar Bang <s...@dod.no> hat am 7. April 2020 14:23 geschrieben: > > > >>>>> Steinar Bang <s...@dod.no>: > > > Is there a way to flush what docker:provision has made? > > Yes. Use the "docker" command on the host (docker installed with > "apt install docker.io" on a debian stable system): > docker rm -vf $(docker ps -a -q) > docker rmi -f $(docker images -a -q) > > Source: https://stackoverflow.com/a/44785784 > > > And is there a way to extract the image docker:provision has made and > > make it into something that can be pushed to dockerhub? > > Yes. I did the following: > 1. Created the repo ukelonn-demo on docker hub: > https://hub.docker.com/repository/docker/steinarb/ukelonn-demo/tags?page=1 > > 2. Ran the commands above to clear out the local docker instance of all > images > > 3. Logged the docker instance on my local machine (the one running both > karaf and dockerd): > docker login --username=yourhubusername --email=yourem...@company.com > > 4. In karaf, deleted the data directory to start fresh, started karaf > and populated karaf with features, and provisioned the running karaf > (note: this requires my own maven repo, and karaf already had that): > feature:repo-add mvn:no.priv.bang.ukelonn/karaf/LATEST/xml/features > feature:install ukelonn-with-derby > feature:install docker > docker:provision ukelonn-demo > > 5. Ran "docker images" to find the id of the provisioned karaf instance > (at this point it was the only image in the local docker) > sb@lorenzo:~$ docker images > REPOSITORY TAG IMAGE ID CREATED > SIZE > java 8-jre-alpine fdc893b19a14 3 years > ago 108MB > sb@lorenzo:~$ > > 6. Created a tag using my dockerhub username, the name of the repo I'd > created and the date and time of day: > sb@lorenzo:~$ docker tag fdc893b19a14 steinarb/ukelonn-demo:202004071205 > sb@lorenzo:~$ > > 7. Pushed the tag to docker hub: > sb@lorenzo:~$ docker push steinarb/ukelonn-demo:202004071205 > The push refers to repository [docker.io/steinarb/ukelonn-demo] > 20dd87a4c2ab: Mounted from library/java > 78075328e0da: Mounted from library/java > 9f8566ee5135: Mounted from library/java > 202004071205: digest: > sha256:6a8cbe4335d1a5711a52912b684e30d6dbfab681a6733440ff7241b05a5deefd > size: 947 > sb@lorenzo:~$ > > 8. Opened https://labs.play-with-docker.com in a web browser and > clicked on "Start" > > 9. In the command shell, pulled the image from docker hub: > docker pull steinarb/ukelonn-demo:202004071205 > > 10. Tried running the image, but that failed with "no command specified": > [node1] (local) root@192.168.0.18 ~ > $ docker run -p 8101:8101 -p 8181:8181 > steinarb/ukelonn-demo:202004071205 > docker: Error response from daemon: No command specified. > See 'docker run --help'. > [node1] (local) root@192.168.0.18 ~ > $ > > So I'm not all the way yet, but I'm getting closer. > > Source for the docker hub related docker commands: > https://ropenscilabs.github.io/r-docker-tutorial/04-Dockerhub.html > > > Or do I need to look at more traditional docker image building, using a > > Dockerfile? > > Possibly...? At least if I want to automate the build of docker images. > > But for now it's interesting to see how far I can get just by playing > with some commands.