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.
中列出了此方法的详细信息
我有一个用 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.
中列出了此方法的详细信息