Dockerize Wildfly 和 ssh

Posted

技术标签:

【中文标题】Dockerize Wildfly 和 ssh【英文标题】:Dockerize wildfly and ssh 【发布时间】:2021-01-16 05:32:19 【问题描述】:

我有一个用 perl 编写的工具,它可以将特定版本的 Java 应用程序部署到远程服务器,如 tomcat 或 wildfly/JBoss。

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

我想将整个过程码头化。所以我的部署工具应该在容器中运行,远程服务器也应该被 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 服务器正在运行,我可以访问它。这是完美的工作。但是 ssh 不工作。

【问题讨论】:

【参考方案1】:

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

可以(但不建议)通过添加启动、停止和监视其他服务的监督服务来解决此限制。此方法的详细信息在official documentation 中列出。

【讨论】:

谢谢!那么有没有推荐的方法来使用 docker 或者我应该考虑另一种方法? 做什么?在容器内运行多个服务?我已经给了你官方文档的链接。至于管理 WildFly,我倾向于使用它的 CLI:octopus.com/blog/using-the-wildfly-cli。它始终与 WildFly 一起安装,因此可以在其官方图像中使用。

以上是关于Dockerize Wildfly 和 ssh的主要内容,如果未能解决你的问题,请参考以下文章

运行 docker 映像时无法访问 localhost:8080

[转] 利用dockerize模板为容器内应用生成配置文件和环境变量

Dockerize adonis.js + mysql

使用 MySQL 容器对 Django 应用程序进行 Dockerize

Dockerize 框架测试“执行失败”

Dockerize vue js前端和spring boot后端并部署在kubernetes集群上