mariadb的官方docker镜像——如何添加ssh服务



我是docker的新手,一直在hub.docker.com中玩docker图像

我想将ssh服务添加到容器中。我可以apt-get install这个包(在apt-get update之后),但我不知道如何启动它。通常(不在此容器中),我们可以通过service ssh start的常规命令启动服务。但我不知道如何在不干扰ENTRYPOINTCMD机制的情况下在容器中执行此操作。

dockerfile附带了一个docker-entrypoint.sh(请参阅此处的源代码),它几乎期望有一行用于CMD

CMD ["mysqld"]

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

  • 如何在运行docker容器时自动启动服务
  • 使用docker容器自动启动sshd

但由于docker文件中ENTRYPOINTCMD的相互作用,它们在此处不直接适用。

您想要做的不是最佳实践,您应该使用用户定义的docker网络(这是文档)。

在您的情况下,例如:

1.创建网络

docker network create --driver bridge database_network

2.启动mariadb容器

docker run --network=database_network -itd --name=mariadb mariadb

3.启动ssh容器

这里我们使用krlmlr/debian-ssh作为示例,可以随意使用任何其他图像

docker run --network=database_network -itd --name=ssh -p 22:22 -e SSH_KEY="$(cat ~/.ssh/id_rsa.pub)" krlmlr/debian-ssh:wheezy

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

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

为了回答以下哪个更有效的问题:A)运行一个同时包含mysqld和sshd的容器;和B)运行两个容器,一个用于mysqld,另一个用于sshd

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

最新更新