我是docker和docker-compose的新手。我正在使用带有几个服务的docker-compose文件。使用docker-compose时,我在本地计算机上有容器和镜像,我的任务是将它们交付到远程主机。
我找到了几种解决方案:

  • 我可以构建我的图像并将其推送到某个注册表并拉
    他们在生产服务器上。但是对于这个选项,我需要私有(private)的
    注册表。而且我认为注册表是不必要的元素。一世
    想直接经营Countainers。
  • 将docker镜像保存到tar并将其加载到远程主机。我看到了这个帖子
    Moving docker-compose containersets around between hosts
    ,但是在这种情况下,我需要使用shell脚本。或者我可以使用
    直接 docker
    (Docker image push over SSH (distributed)),
    但是在这种情况下,我失去了docker-compose的优势。
  • 将docker-machine(https://github.com/docker/machine)与常规驱动程序一起使用。但是在这种情况下,我只能将其用于从
    一台机器,或者我需要配置证书
    (How to set TLS Certificates for a machine in docker-machine)。而且,对我来说,这不是一个简单的解决方案。
  • 使用docker-compose和参数主机(-H)-但在最后一个选项中,我需要在远程主机上构建镜像。是否有可能
    在本地mashine上构建镜像并将其推送到远程主机?
  • 我可以使用docker-compose push(https://docs.docker.com/compose/reference/push/)到远程主机,
    但是为此,我需要在远程主机上创建注册表,并且我需要
    每次添加并传递主机名作为参数到docker compose。

  • 将Docker容器交付到远程主机的最佳实践是什么?

    最佳答案

    通过注册表(您的第一个选择)。所有面向容器的工具都支持它,而在Kubernetes等集群环境中,它是必不可少的。您可以使用Docker Hub,公共(public)云提供商的镜像注册表或第三方选项,也可以运行自己的。
    如果您不能使用注册表,那么docker save / docker load是下一个最佳选择,但是我只建议您在空白环境中使用,即构建系统和生产系统之间没有网络连接时。
    无法将镜像直接从一个系统推送到另一个系统。出于安全原因,您应避免启用Docker网络API:可以访问网络暴露的Docker套接字的任何人几乎都可以轻而易举地根植其主机。

    独立于镜像,您还需要传输docker-compose.yml文件本身,以及您绑定(bind)安装到容器中的所有配置文件。普通的scprsync在这里可以正常工作。无法在纯Docker生态系统内转移这些。

    09-04 01:24
    查看更多