我是docker和docker-compose的新手。我正在使用带有几个服务的docker-compose文件。使用docker-compose时,我在本地计算机上有容器和镜像,我的任务是将它们交付到远程主机。
我找到了几种解决方案:
他们在生产服务器上。但是对于这个选项,我需要私有(private)的
注册表。而且我认为注册表是不必要的元素。一世
想直接经营Countainers。
Moving docker-compose containersets around between hosts
,但是在这种情况下,我需要使用shell脚本。或者我可以使用
直接 docker
(Docker image push over SSH (distributed)),
但是在这种情况下,我失去了docker-compose的优势。
一台机器,或者我需要配置证书
(How to set TLS Certificates for a machine in docker-machine)。而且,对我来说,这不是一个简单的解决方案。
在本地mashine上构建镜像并将其推送到远程主机?
但是为此,我需要在远程主机上创建注册表,并且我需要
每次添加并传递主机名作为参数到docker compose。
将Docker容器交付到远程主机的最佳实践是什么?
最佳答案
通过注册表(您的第一个选择)。所有面向容器的工具都支持它,而在Kubernetes等集群环境中,它是必不可少的。您可以使用Docker Hub,公共(public)云提供商的镜像注册表或第三方选项,也可以运行自己的。
如果您不能使用注册表,那么docker save
/ docker load
是下一个最佳选择,但是我只建议您在空白环境中使用,即构建系统和生产系统之间没有网络连接时。
无法将镜像直接从一个系统推送到另一个系统。出于安全原因,您应避免启用Docker网络API:可以访问网络暴露的Docker套接字的任何人几乎都可以轻而易举地根植其主机。
独立于镜像,您还需要传输docker-compose.yml
文件本身,以及您绑定(bind)安装到容器中的所有配置文件。普通的scp
或rsync
在这里可以正常工作。无法在纯Docker生态系统内转移这些。