docker compose构建和构建

docker compose构建和构建,docker,deployment,docker-compose,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 compose-f mydocker-compose-file.yml…
构建一个docker映像

然后图像被推送到远程docker注册表

然后我从远程服务器上取下这个图像

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

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


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

使用Docker Compose可以执行的所有操作,都可以使用普通的
Docker
命令

根据您与远程服务器交互的确切方式,您的工具可能有本机方式来实现这一点。我熟悉的一个具体例子是。如果您已经在使用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
文件进行复制的过程。我认为这是很平常的事。(需要告诉服务器要运行什么。)

使用Docker Compose可以执行的所有操作,都可以使用普通的
Docker
命令

根据您与远程服务器交互的确切方式,您的工具可能有本机方式来实现这一点。我熟悉的一个具体例子是。如果您已经在使用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
文件进行复制的过程。我认为这是很平常的事。(需要告诉服务器要运行什么。)

随着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。看

注意,如果您有主机卷,变量和路径将扩展到笔记本电脑目录,但主机装载将发生在远程服务器上,而这些目录可能不存在。切换到命名卷是一种很好的情况。

随着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。看


注意,如果您有主机卷,变量和路径将扩展到笔记本电脑目录,但主机装载将发生在远程服务器上,而这些目录可能不存在。切换到命名卷是一个很好的情况。

我理解这一部分,但当我使用该文件构建映像时,是否/不应该拥有运行容器所需的所有内容?我认为在我的理解中有一个流程,但我认为,您使用一组指令(您在.yml中声明)构建映像,从那时起,您应该只需要执行docker run-d。但似乎情况并非如此?端口映射、主机卷装载等设置无法在映像中设置;他们必须在
docker run
命令行上运行,或者由启动容器的任何其他工具设置。我理解这一部分,但当我使用该文件构建图像时,是否/不应该拥有运行容器所需的所有内容?我认为在我的理解中有一个流程,但我认为,您使用一组指令(您在.yml中声明)构建映像,从那时起,您应该只需要执行docker run-d。但似乎情况并非如此?端口映射、主机卷装载等设置无法在映像中设置;它们必须在
docker run
命令行上运行,或者由启动容器的任何其他工具设置。