当前位置: 首页 > 知识库问答 >
问题:

我应该使用哪个命令来构建整个docker应用程序并将其服务推送到docker hub?docker还是docker?

葛成双
2023-03-14

在使用docker和docker compose时,我有点困惑:

有了dockerfile,我可以构建、运行docker应用程序映像,并将其推送到docker hub,以允许其他人在本地计算机上下载和运行它。

我可以构建,运行和推送服务映像(例如:redis,cassandra等)

我的关注:

我得到了一个包含以下文件的应用程序文件夹:

 - main.go  # the main app in Golang
 - Dockerfile # container definition file
 - Docker-compose.yml # contains all the services ( Redis and Cassandra)

我应该使用哪个命令在docker hub上构建和推送我的整个应用程序及其服务?docker还是docker-comush?

共有1个答案

支彭亮
2023-03-14

考虑这一点的一个有用的概念方法是,docker组合。yml文件指定了一组docker builddocker run命令。不能单独推送docker compose。yml文件到Docker Hub或其他注册表,在典型的Compose设置中,有许多标准映像引用,您不需要自己推送它们(无论在哪里运行,标准Docker Hubrediscassandra映像都可以)。

这意味着你需要做两件事:

  1. 将应用程序映像(但不是其公共映像依赖项)推送到注册表;和
  2. 发布docker-compose.yml文件或以其他方式运行组合应用程序。

您可以使用docker compose push,但在CI环境中,使用docker builddocker push可能更简单一些。从机械上来说,它们没有什么不同。

确保映像包含运行应用程序所需的所有内容,包括外部依赖项。理想的情况是,docker可以通过--net-e-p设置来运行应用程序容器,对其进行配置,但无需单独提供应用程序代码或命令。在一个docker组合中。yml文件,查看是否可以仅使用端口:环境:、和图像:(和构建:)运行它。更喜欢docker文件中的CMD,而不是docker compose中的命令:。yml。如果要将主机代码绑定到容器中(对于Go和其他编译语言不太可能),请删除那些卷:

使用Compose部署东西的典型顺序可能如下所示:

here$ docker build -t me/myapp:20200525 .
here$ docker push me/myapp:20200525
here$ scp docker-compose.yml there:
here$ ssh there
there$ MYAPP_TAG=20200525 docker-compose up -d

请注意,我们唯一直接复制到目标系统的是docker compose。指定如何运行图像的yml;我们没有复制任何应用程序代码或其他依赖项,因为它们都封装在映像中。

 类似资料:
  • 问题内容: 我已经创建了自己的docker文件(该文件运行一个显示“ helloworld”的shell脚本)。图像是“ hellodocker”,标签是“ mytag”,我现在拥有: 如何将Docker映像推送到dockerhub?我用。这给出了“无此类ID”错误。我想念什么?提前致谢。 问题答案: 您要么在构建时就将其标记为标签,例如 或创建绑定到同一图像的新标签,即

  • 是否有理由使用启动一个文件,或者您应该只使用? 我知道可以启动一个特定的容器,但我指的是在不指定容器的情况下使用它以启动所有yml容器的情况。

  • 准备工作 对于Window用户,请点击Kitematic左下方的DOCKER CLI按钮,在弹出的命令窗体内输入命令,不要在CMD中测试Docker命令。 下载镜像,以kitematic/hello-world-nginx为例: docker pull kitematic/hello-world-nginx 常用命令测试一览表 命令 解释 docker images 列表本地所有镜像 docker

  • 问题内容: 有没有使用启动文件的理由,还是应该使用? 我了解这可以启动特定的容器,但是我指的是在不指定容器的情况下使用它的情况,这样它就可以启动所有yml容器。 问题答案: 如(2015)中所述 运行传递的命令将覆盖服务配置中定义的命令 。 例如,如果Web服务配置以开头,则用覆盖它。 第二个区别是该命令 不创建服务配置中指定的任何端口 。 这样可以防止端口与已经打开的端口发生冲突。如果确实要创建

  • 问题内容: 我使用Ubuntu进行开发和部署,并且需要创建一个隔离的环境。 我正在考虑为此目的使用Vagrant或Docker。优缺点是什么,或者这些解决方案相比如何? 问题答案: 如果您的目的是隔离,那么我认为Docker是您想要的。 Vagrant是虚拟机经理。它允许您编写虚拟机配置和配置脚本。但是,它仍然是虚拟机,取决于VirtualBox(或其他),具有巨大的开销。它要求您拥有一个巨大的硬

  • 所以我创建了一个Docker中心映像,如下所示,工作正常 几周后,我需要为新的软件版本重建映像,所以我做到了 但是最后的推送命令失败了 运行docker images可以提供: