如何在 Google Compute Engine 上运行 Docker?

Posted

技术标签:

【中文标题】如何在 Google Compute Engine 上运行 Docker?【英文标题】:How do I run Docker on Google Compute Engine? 【发布时间】:2013-12-24 02:55:56 【问题描述】:

在Google Compute Engine上安装和运行Docker的过程是什么?

【问题讨论】:

遗憾的是,谷歌还没有为 Docker developers.google.com/search/results?q=docker创建任何文档 【参考方案1】:

在 Compute Engine 的最近 GA 版本之前,GCE 不支持运行 Docker(由于内核限制),但随着新宣布的部署和使用自定义内核的能力,该限制不再完整,Docker 现在可以很好地在GCE。

感谢proppy,现在在此处为您记录了在 Google Compute Engine 上运行 Docker 的说明:http://docs.docker.io/en/master/installation/google/。享受吧!

【讨论】:

你能指出一个 docker 容器提供一些内容的工作示例吗?到目前为止,即使是谷歌自己的例子:https://github.com/GoogleCloudPlatform/container-vm-guestbook-redis-python 也不起作用,因为端口 80 被 GCE 主机实例上的 Docker 进程占用,并且在更改应用程序的端口后,仍然无法弄清楚为什么端口没有被转发.如果您可以通过正确的端口映射共享在 GCE 上成功运行的 todo 或 hello-world 应用程序,那将有很大帮助。 链接现在失效了【参考方案2】:

Google 的 GitHub 站点现在提供包含 docker 的 gce 映像。 https://github.com/GoogleCloudPlatform/cloud-sdk-docker-image

【讨论】:

【参考方案3】:

很简单:

创建 Compute Engine 实例 curl https://get.docker.io | bash

【讨论】:

curl https://get.docker.io 更安全。您永远不想从不安全的数据包中获取代码并执行它。 该死,google 建议使用这种“pipe to bash”方法安装 gcloud sdk。我希望您的评论能引发蚂蚁大军来解决这个安全问题。【参考方案4】:

现在改进了对 containers on GCE 的支持:

Google Compute Engine 正在扩展对 Docker 容器的支持。此版本是容器优化操作系统映像的开放预览版,其中包括 Docker 和用于管理容器的 open source agent。下面,您将找到与对 Google 上的 Docker、开源存储库和示例感兴趣的社区进行交互的链接。我们期待听到您的反馈并看到您构建的内容。

请注意,目前(截至 2014 年 5 月 27 日)打开预览

这是虚拟机上容器的 Open Preview 版本。因此,我们可能会进行向后不兼容的更改,并且它不包含在任何 SLA 或弃用政策中。客户在使用此 Open Preview 版本时应考虑到这一点。

【讨论】:

【参考方案5】:

他们现在有一个预先安装了 docker 的虚拟机。

$ gcloud compute instances create instance-name
--image projects/google-containers/global/images/container-vm-v20140522
--zone us-central1-a
--machine-type f1-micro

https://developers.google.com/compute/docs/containers/container_vms

【讨论】:

为了后代:这个项目不再提供图像。 $ gcloud compute images list --no-standard-images --project=google-containers 返回“列出 0 项”【参考方案6】:

使用docker-machine 是另一种使用 docker 托管您的谷歌计算实例的方式。

docker-machine create \
  --driver google \
  --google-project $PROJECT \
  --google-zone asia-east1-c \
  --google-machine-type f1-micro $YOUR_INSTANCE

如果你想在谷歌云计算实例上登录本机,只需使用docker-machine ssh $YOUR_INSTANCE

参考docker machine driver gce

【讨论】:

【参考方案7】:

最好在创建计算实例时获取

    转到虚拟机实例页面。 点击创建实例按钮创建一个新实例。 在 Container 部分下,选中 Deploy container image。 在容器映像下指定容器映像名称,并根据需要配置选项以运行容器。例如,您可以为容器映像指定 gcr.io/cloud-marketplace/google/nginx1:1.12。 点击创建。

【讨论】:

欢迎提供解决方案的链接,但请确保您的答案在没有它的情况下有用:add context around the link 这样您的其他用户就会知道它是什么以及为什么会出现,然后引用最相关的您链接到的页面的一部分,以防目标页面不可用。 Answers that are little more than a link may be deleted. 提供了有关步骤的更多详细信息。感谢费利克斯的输入。【参考方案8】:

不支持在 GCE 实例上运行 Docker。实例出现故障,无法再次登录。 我们可以使用 GCE 提​​供的 Docker 镜像来创建实例。

【讨论】:

虽然没有安装 gcloud 并且安装说明 sudo curl https://sdk.cloud.google.com | bash 在 ChromiumOS 上不起作用:'permission denied'。 @geoidesic,该指令是(或曾经是)不正确的,很明显你为什么会得到权限错误:你提升 curl,而不是 bash。相反,curl .... | sudo bash 是正确的管道。 Shell 解析管道并运行两个命令:第一个是sudo(带有参数curl etc.),第二个是bashsudo 不必要地提升 curl,但需要提升权限的 bash 以您的用户 ID 运行。【参考方案9】:

有点晚了,但我想添加一个更详细的工作流程和链接的答案,因为答案仍然相当分散:

    创建 Docker 映像

    一个。本地

    b.使用 Google Container Builder

    将本地 Docker 映像推送到 Google Container Repository

    docker tag <current name>:<current tag> gcr.io/<project name>/<new name>

    gcloud docker -- push gcr.io/<project name>/<new name>

    更新

    如果您已升级到 18.03 以上的 Docker 客户端版本,则不再支持 gcloud docker 命令。而不是上面的推送,使用:

    docker push gcr.io/<project name>/<new name>

    如果升级后遇到问题,请查看更多here。

    创建一个计算实例。 这个过程实际上混淆了许多步骤。它使用谷歌计算引擎创建一个虚拟机 (VM) 实例,该引擎使用谷歌提供的容器优化操作系统映像。该映像包括 Docker 和负责启动我们的 docker 容器的其他软件。然后从容器存储库中提取我们的容器映像,并在虚拟机启动时使用 docker run 运行。注意:即使容器正在运行,您仍然需要使用 docker attach。值得指出的是,每个 VM 实例只能运行一个容器。使用 Kubernetes 为每个 VM 部署多个容器(步骤类似)。在本文底部的链接中查找有关所有选项的更多详细信息。

    gcloud beta compute instances create-with-container <desired instance name> \ --zone <google zone> \ --container-stdin \ --container-tty \ --container-image <google repository path>:<tag> \ --container-command <command (in quotes)> \ --service-account <e-mail>

    提示您可以使用gcloud projects list查看可用的 gcloud 项目

    SSH 进入计算实例。

    gcloud beta compute ssh <instance name> \ --zone <zone>

    停止或删除实例。如果实例停止,您仍需要为静态 IP 和永久性磁盘等资源付费。为避免被计费,请使用删除实例。

    一个。 停止

    gcloud compute instances stop &lt;instance name&gt;

    b. 删除

    gcloud compute instances delete &lt;instance name&gt;

相关链接:

更多关于deploying containers on VMs 更多关于zones 更多create-with-container options

【讨论】:

我认为可以使用gcloud container builds submit --tag gcr.io/&lt;project name&gt;/&lt;new name&gt; . 代替docker taggcloud docker --push,这将构建映像并将其直接发送到google 存储库,跳过docker 存储库步骤。 第 2 步也给了我一个错误:“Docker login failed”,即使在“docker login”之后。我认为这是由于弃用了此命令:cloud.google.com/sdk/gcloud/reference/docker 是的,在更新 gcloud/docker 之后,我今天早上一直在处理 gcloud docker 的弃用问题。切换到 docker-credential-gcr 似乎有效。更多信息:***.com/questions/49780218/… @geoidesic - 我为 18.03 以上的 Docker 客户端版本更新了上述说明。希望有帮助!【参考方案10】:

如果你的谷歌云虚拟机是基于ubuntu的,使用以下命令安装docker sudo apt install docker.io

【讨论】:

【参考方案11】:

您可以使用此链接:https://cloud.google.com/cloud-build/docs/quickstart-docker#top_of_page。

上述链接解释了如何使用 Cloud Build 构建 Docker 镜像并将镜像推送到 Container Registry。您将首先使用 Dockerfile 构建镜像,然后使用 Cloud Build 的构建配置文件构建相同的镜像。

【讨论】:

【参考方案12】:

到目前为止,只是 Docker,容器优化的操作系统肯定是要走的路:

gcloud compute images list --project=cos-cloud --no-standard-images

它预装了 Docker 和 Kubernetes。它唯一缺少的是 Cloud SDK 命令行工具。 (尽管谷歌在 2020 年 1 月 1 日宣布 Python 2 日落,但它也缺少 python3。好吧,还有 27 天......)


作为我想分享的另一条信息,我正在搜索一个标准图像,该图像将提供 docker 和 gcloud/gsutil 预安装(但没有找到,哎呀)。我不认为我一个人在这条船上,因为gcloud 是您在没有 GCE 的情况下几乎无法通过的东西¹。

到目前为止,我最好的发现是 Ubuntu 18.04 映像,它带有他们自己的(非 Debian)包管理器 snap。该映像预装了 Cloud SDK,Docker 安装非常迅速,在 F1 实例初始测试中只需 11 秒,在 n1-standard-1 上大约需要 6 秒。我遇到的唯一问题是 docker 授权助手不可用的错误消息;尝试使用 gcloud components install 添加它失败了,因为 SDK 也是作为 snap 安装的。但是,the helper is actually there,只是不在 PATH 中。从受支持的 Ubuntu 18.04 LTS 映像开始,以下是我在单个临时构建器 VM 中以最少的设置脚本运行时提供的两种工具的原因:

snap install docker
ln -s /snap/google-cloud-sdk/current/bin/docker-credential-gcloud /usr/bin
gcloud -q auth configure-docker

¹ 对于 Daisy 工作流程,我需要使用来自 GS 存储桶的工件和来自本地 gcr.io 注册表的两个巨大的 2GB+ 库映像对磁盘进行映像,这些映像在构建(作为云构建器层)和运行时之间共享(我必须在其中创建容器并将其提取到新建的图像中)。但这不是重点;出于多种可能的原因,人们可能需要这两种工具。 ² 使用gcloud compute images list --uri | grep ubuntu-1804 获取最新的。

【讨论】:

【参考方案13】:

在 GCP Compute Engine 虚拟机上安装 Docker: 这是有关该主题的 GCP 文档的链接:https://cloud.google.com/compute/docs/containers#installing

它链接到Docker install guide,你应该根据你在vm中运行的Linux类型来遵循说明。

【讨论】:

以上是关于如何在 Google Compute Engine 上运行 Docker?的主要内容,如果未能解决你的问题,请参考以下文章

Google Compute Engine 如何决定在自动扩缩时关闭哪些实例?

如何更改 Google Compute Engine 服务帐户的范围以将数据写入 Google Cloud Storage 存储桶?

如何在 Google Cloud Compute Engine VM Instance (Bitnami) 中查找 mongodb 连接字符串

如何使用 Google Cloud Compute Engine 为 Node.JS 应用程序配置端口转发

Google Compute Engine:使用另一个项目的快照?

在 Google Compute Engine 上使用抢占式虚拟机