Dockerize wildfly 和 ssh

Dockerize wildfly and ssh

我有一个用 perl 编写的工具,它部署 Java 应用程序,对远程服务器进行特定修订,例如 tomcat 或 wildfly/JBoss。

因此该工具需要连接到 wildfly,然后连接到 wildfly 所在的机器 运行 ssh。

我想把这整个过程码头化。所以我的 deploymenttool 应该 运行 在容器中,远程服务器也应该被 dockerized。

有没有办法在一个容器中 运行 wildfly 和 ssh 以便它可以描述一个服务器?

我尝试使用以下 Dockerfile 对服务器进行 docker 化,但没有成功

## SELECT IMAGE
FROM ubuntu:18.04

RUN apt-get update && \
    apt-get upgrade -y && \
    apt install -y openjdk-11-jdk && \
    apt install -y subversion && \
    apt install -y openssh-server && \
    apt install -y wget

RUN mkdir /var/run/sshd
RUN sed -i 's/#*PermitRootLogin prohibit-password/PermitRootLogin yes/g' /etc/ssh/sshd_config
RUN sed -i 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' /etc/pam.d/sshd

ENV NOTVISIBLE="in users profile"
RUN echo "export VISIBLE=now" >> /etc/profile

RUN useradd -ms /bin/bash user
RUN usermod -aG sudo user

## SET JAVA ENV
ENV JAVA_HOME /usr/lib/jvm/java-11-openjdk-amd64

## COPY CONF FILES TO ROOT
COPY conf/root/ssh/ /root/.ssh/
COPY conf/root/subversion/auth /root/.subversion/auth

## INSTALL JBOSS
RUN wget -O /tmp/wildfly-16.0.0.Final.tar.gz \
    https://download.jboss.org/wildfly/16.0.0.Final/wildfly-16.0.0.Final.tar.gz && \
    tar zxvf /tmp/wildfly-16.0.0.Final.tar.gz -C /opt

## JBOSS CONFIG
RUN sed -i -r 's/jboss.bind.address.management:127.0.0.1/jboss.bind.address.management:0.0.0.0/' \
    /opt/wildfly-16.0.0.Final/standalone/configuration/standalone.xml

## CLEAN JBOSS
RUN apt-get clean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

USER root

EXPOSE 8080 9990
EXPOSE 22

CMD /usr/sbin/sshd
RUN /opt/wildfly-16.0.0.Final/bin/add-user.sh --silent=true admin admin
CMD /opt/wildfly-16.0.0.Final/bin/standalone.sh -b=0.0.0.0

wildfly 服务器正在 运行ning,我可以访问它。这是完美的工作。但是 ssh 不工作。

Docker 旨在用于创建应用程序容器 - 即内部具有单个服务的容器。因此,在构建图像时只考虑最后一个 CMD。如果你这样做 docker inspect image_name,你会看到你的图像的命令设置为 /opt/wildfly-16.0.0.Final/bin/standalone.sh -b=0.0.0.0

可以(但不建议)通过添加启动、停止和监视其他服务的监督服务来解决此限制。 official documentation.

中列出了此方法的详细信息