docker-compose建立和建立

时间:2019-05-10 13:41:12

标签: docker deployment docker-compose

我不是高级用户,所以请多包涵。

我正在计算机上使用docker-compose -f mydocker-compose-file.yml ...构建docker映像。

然后将映像推送到远程Docker注册表。

然后从远程服务器上拉下该图像。

运行该图像;我必须将mydocker-compose-file.yml从我的计算机复制到远程服务器,然后运行docker-compose -f mydocker-compose-file.yml up -d

我发现这效率很低,因为为什么我需要相同的YAML文件来运行docker映像(我应该吗?)。

有没有一种方法可以在没有远程计算机上的文件的情况下直接启动容器?

2 个答案:

答案 0 :(得分:1)

使用Docker Compose可以做的所有事情,可以使用普通的docker命令来做。

取决于您与远程服务器的交互程度,您的工具可能具有执行此操作的本机方法。我熟悉的一个具体示例是Ansible docker_container module。如果您已经在使用Ansible,Chef或Salt等工具,则可以使用类似的工具来完成docker-compose.yml文件的工作。

但是否则,docker-compose.yml文件之间或多或少会有直接翻译

version: '3'
services:
  foo:
    image: me/foo:20190510.01
    ports: ['8080:8080']

和命令行

docker run -d --name foo -p 8080:8080 me/foo:20190510.01

我的经验是docker run命令很快变得笨拙,您想将它们记录在文件中;一旦将它们保存在文件中,您就开始希望它们采用结构化的格式,即使您需要使用辅助工具来运行它们也是如此;这将带您回到围绕docker-compose.yml文件进行复制。我认为这很常规。 (某事需要告诉服务器要运行什么。)

答案 1 :(得分:1)

compose 1.24起,随着docker的18.09版本(您至少需要远程主机上的该客户端版本),您可以通过SSH对远程主机运行docker命令。

# all docker commands in this shell will not talk to the remote host
export DOCKER_HOST=ssh://user@host
# you can verify that with docker info to see which engine you're talking to
docker info
# and now run your docker-compose up command locally to start/stop containers
docker-compose up -d

在以前的版本中,您可以配置TLS证书,以允许特定客户端通过网络连接连接到Docker API。参见these docs for more details

请注意,如果您有主机卷,则变量和路径将扩展到您的笔记本电脑目录,但是主机安装将在那些目录可能不存在的远程服务器上进行。这是切换到命名卷的好情况。