mariadb的正式docker映像--如何添加ssh服务

mariadb的正式docker映像--如何添加ssh服务,docker,mariadb,Docker,Mariadb,我是docker的新手,一直在hub.docker.com上玩docker的形象 我想将ssh服务添加到容器中。我可以在apt获得更新后安装软件包,但我不知道如何启动它。 通常不在这个容器中,我们可以通过一个常规的命令ssh start来启动服务。但我不知道如何在不干扰ENTRYPOINT和CMD机制的情况下在容器中执行此操作 dockerfile附带一个docker-entrypoint.sh。请参阅源代码,该源代码非常希望有一行CMD 我读过一些相关的SO文章,例如: 但由于docker文件

我是docker的新手,一直在hub.docker.com上玩docker的形象

我想将ssh服务添加到容器中。我可以在apt获得更新后安装软件包,但我不知道如何启动它。 通常不在这个容器中,我们可以通过一个常规的命令ssh start来启动服务。但我不知道如何在不干扰ENTRYPOINT和CMD机制的情况下在容器中执行此操作

dockerfile附带一个docker-entrypoint.sh。请参阅源代码,该源代码非常希望有一行CMD

我读过一些相关的SO文章,例如:


但由于docker文件中ENTRYPOINT和CMD的相互作用,它们在这里不直接适用。

您想要做的不是最佳实践,您应该使用用户定义的docker网络

在您的情况下,例如:

一,。创建网络

二,。启动mariadb容器

三,。启动ssh容器

在这里我们使用的例子,请随意使用任何其他图像

然后,当您通过端口22连接时,您可以使用mariadb作为主机名连接到数据库,因此您将在ssh隧道中使用mariadb:3306而不是localhost:3306

如果您的服务器能够处理这么多容器的负载,那么这甚至允许您在不同的端口上设置具有不同ssh密钥的多个容器

回答以下问题:运行一个包含mysqld和sshd的容器;B运行两个容器,一个用于mysqld,另一个用于sshd


资源使用的差异将是最小的,因为在正式的mariadb映像中运行ssh需要使用supervisor或s6,这将比单独运行两个容器多出一个进程。这意味着根据ssh映像的大小,内存使用量也可能相同。就CPU使用率而言,我认为情况是一样的,实际上可能更倾向于方案B。

为什么需要这样做?用于打开连接到服务器的sql客户端?是的,我希望sql客户端通过端口22进入。然后数据包将被转发到端口3306。如果您使用docker run-p选项发布服务器端口,您可以从主机连接到mysql。osI希望只向远程机器打开端口22 ssh,而不是端口3306 mysql。有可能做到这一点吗?换句话说,我希望能够在容器内启动sshd。这是一个非常有趣的想法。我要试试看。不过,我有一个问题。资源的含义是什么?比较两种方法:运行一个容器,其中包含mysqld和sshd;B运行两个容器,一个用于mysqld,一个用于sshd,也就是说,您的建议是,B会更占用资源吗?关于这方面的实证研究有什么好的建议吗?谢谢我已经更新了我的答案,试图回答这个问题。虽然这纯粹是猜测,所以也许对这方面进行更多的研究会很好,但我想我基本上被你的答案所启发,现在我有另一个相关的问题。它是关于如何使用MariaDB构建多个子系统的。他们每个人都应该有自己的容器运行MariaDB,还是应该为MariaDB共享一个公共容器?你能看一下并给我你的意见吗?同样,理想情况下,对于架构决策或如何在两个选项之间进行权衡,有经验证据。谢谢!是的,我刚试过你的建议,效果不错。谢谢!当然,我现在会调查的,很高兴我的回答能帮助你
CMD ["mysqld"]
docker network create --driver bridge database_network
 docker run --network=database_network -itd --name=mariadb mariadb
 docker run --network=database_network -itd --name=ssh -p 22:22 -e SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" krlmlr/debian-ssh:wheezy