mariadb官方docker图像 – 如何添加SSH服务

我是新来的docker工人,一直在使用hub.docker.com中的hub.docker.com

我想添加SSH服务的容器。 我可以apt-get install软件包( apt-get update ),但我不知道如何启动它。 通常(不是在这个容器中),我们可以通过service ssh start的常规命令service ssh start 。 但是我不知道如何在不干扰ENTRYPOINTCMD机制的情况下在容器中做这个。

dockerfile附带了一个docker-entrypoint.sh (见这里的源代码),几乎期望有一个CMD

 CMD ["mysqld"] 

我已经阅读了一些相关的SO文章,例如:

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

但是由于ENTRYPOINT文件中的ENTRYPOINTCMD的相互作用,这里并不直接适用。

你想要做的不是最佳实践,你应该做的是使用用户定义的dockernetworking( 这里是文档 )。

在你的情况下,你会例如:

1.创build一个networking

 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作为主机名连接到数据库,所以我们不用说localhost:3306 ,而是在ssh隧道中使用mariadb:3306

如果你的服务器可以处理多个容器的负载,这甚至可以允许你在不同的端口上设置多个不同ssh密钥的容器。

回答以下问题:A)运行一个包含mysqld和sshd的容器; 和B)为mysqld运行两个容器,为sshd运行一个容器

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