簡體   English   中英

如何在 Docker 映像中安裝 Google Cloud SDK?

[英]How to install the Google Cloud SDK in a Docker Image?

如何使用Google 的 Cloud Command Line Tool/SDK構建 Docker 容器?

The script at the url https://sdk.cloud.google.com appears to require user input so doesn't work in a docker file.

將以下內容添加到我的 Docker 文件中似乎可以工作。

# Downloading gcloud package
RUN curl https://dl.google.com/dl/cloudsdk/release/google-cloud-sdk.tar.gz > /tmp/google-cloud-sdk.tar.gz

# Installing the package
RUN mkdir -p /usr/local/gcloud \
  && tar -C /usr/local/gcloud -xvf /tmp/google-cloud-sdk.tar.gz \
  && /usr/local/gcloud/google-cloud-sdk/install.sh

# Adding the package path to local
ENV PATH $PATH:/usr/local/gcloud/google-cloud-sdk/bin

在你的 Dockerfile 中使用這個單行:

RUN curl -sSL https://sdk.cloud.google.com | bash

來源: https ://docs.docker.com/v1.8/installation/google/

用高山做:

 FROM alpine:3.6

 RUN apk add --update \
 python \
 curl \
 which \
 bash

 RUN curl -sSL https://sdk.cloud.google.com | bash

 ENV PATH $PATH:/root/google-cloud-sdk/bin
RUN curl -sSL https://sdk.cloud.google.com > /tmp/gcl && bash /tmp/gcl --install-dir=~/gcloud --disable-prompts

這會將 google cloud sdk 安裝程序下載到/tmp/gcl中,並使用以下參數運行它:

  • --install-dir=~/gcloud :將二進制文件解壓縮到主文件夾中的文件夾 gcloud 中。 將其更改為您想要的任何位置,例如/usr/local/bin
  • --disable-prompts :安裝時不顯示任何提示(無頭)

要在 docker 容器中安裝 gcloud,請按照此處的說明進行操作。

基本上你需要運行

RUN apt-get update && \
    apt-get install -y curl gnupg && \
    echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg  add - && \
    apt-get update -y && \
    apt-get install google-cloud-sdk -y
      

在你的 dockerfile 里面。 運行此命令時,您是用戶ROOT很重要,因此可能需要在上一個命令之前添加USER root

作為替代方案,您可以使用 google 提供的 docker 映像,即google/cloud-sdk https://hub.docker.com/r/google/cloud-sdk/

Dockerfile:

FROM centos:7

RUN yum update -y && yum install -y \
                    curl \
                    which && \
    yum clean all

RUN curl -sSL https://sdk.cloud.google.com | bash

ENV PATH $PATH:/root/google-cloud-sdk/bin

建造:

docker build . -t google-cloud-sdk

然后運行gcloud

docker run --rm \
--volume $(pwd)/assets/root/.config:/root/.config \
google-cloud-sdk gcloud

...或運行gsutil

docker run --rm \
--volume $(pwd)/assets/root/.config:/root/.config \
google-cloud-sdk gsutil

本地assets文件夾將包含配置。

apk upgrade --update-cache --available && \
apk add openssl && \
apk add curl python3 py-crcmod bash libc6-compat && \
rm -rf /var/cache/apk/*
curl https://sdk.cloud.google.com | bash > /dev/null
export PATH=$PATH:/root/google-cloud-sdk/bin
gcloud components update kubectl

我使用以下方法在 Ubuntu 18.04 上工作:

RUN apt-get install -y curl && curl -sSL https://sdk.cloud.google.com | bash
ENV PATH="$PATH:/root/google-cloud-sdk/bin"

這對我有用。

FROM php:7.2-fpm

RUN apt-get update -y

RUN apt-get install -y python && \
    curl -sSL https://sdk.cloud.google.com | bash

ENV PATH $PATH:/root/google-cloud-sdk/bin

使用 debian 作為基礎鏡像的示例:

FROM debian:stretch

RUN apt-get update && apt-get install -y apt-transport-https gnupg curl lsb-release

RUN export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \
  echo "cloud SDK repo: $CLOUD_SDK_REPO" && \
  echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
  curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - && \
  apt-get update -y && apt-get install google-cloud-sdk -y

我使用 Python Alpine image python:3.8.6-alpine3.12作為基礎,這對我有用:

RUN apk add --no-cache bash

RUN wget https://dl.google.com/dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-327.0.0-linux-x86_64.tar.gz \
    -O /tmp/google-cloud-sdk.tar.gz | bash

RUN mkdir -p /usr/local/gcloud \
    && tar -C /usr/local/gcloud -xvzf /tmp/google-cloud-sdk.tar.gz \
    && /usr/local/gcloud/google-cloud-sdk/install.sh -q

ENV PATH $PATH:/usr/local/gcloud/google-cloud-sdk/bin
  • 構建並運行映像后,您可以通過運行docker exec -i -t <container_id> /bin/bash並運行以下命令來檢查是否安裝了google-cloud-sdk
bash-5.0# gcloud --version
Google Cloud SDK 327.0.0
bq 2.0.64
core 2021.02.05
gsutil 4.58
bash-5.0# gsutil --version
gsutil version: 4.58

如果您想要特定版本的google-cloud-sdk ,可以訪問https://storage.cloud.google.com/cloud-sdk-release

curl https://sdk.cloud.google.com | bash -s -- --disable-prompts

並且導出環境對我有用

我以某種形式使用了這些示例中的大多數(感謝@KJoe),但是我必須做其他幾件事來設置所有內容,以便gcloud可以在環境中工作。 請注意,最好限制行數(它限制了需要拉動的層數)

這是一個更完整的 Dockerfile 示例,其中包含gcloud設置並擴展了 CircleCI 映像:

FROM circleci/ruby:2.4.1-jessie-node-browsers

# user is circleci in the FROM image, switch to root for system lib installation
USER root

ENV CCI /home/circleci
ENV GTMP /tmp/gcloud-install
ENV GSDK $CCI/google-cloud-sdk
ENV PATH="${GSDK}/bin:${PATH}"

# do all system lib installation in one-line to optimize layers
RUN curl -sSL https://sdk.cloud.google.com > $GTMP && bash $GTMP --install-dir=$CCI --disable-prompts \
  && rm -rf $GTMP \
  && chmod +x $GSDK/bin/* \
  \
  && chown -Rf circleci:circleci $CCI

# change back to the user in the FROM image
USER circleci

# setup gcloud specifics to your liking
RUN gcloud config set core/disable_usage_reporting true \
  && gcloud config set component_manager/disable_update_check true \
  && gcloud components install alpha beta kubectl --quiet

我的用例是使用服務帳戶生成谷歌不記名令牌,所以我希望 docker 容器安裝gcloud這就是我的 docker 文件的樣子

FROM google/cloud-sdk
# Setting the default directory in container
WORKDIR /usr/src/app
# copies the app source code to the directory in container
COPY . /usr/src/app
CMD ["/bin/bash","/usr/src/app/token.sh"]

如果您需要在構建后檢查容器但該容器未運行,請使用docker run --rm -it <container-build-id> bash -il並輸入gcloud --version (如果安裝正確)

您可以使用多階段構建來使這比使用curl的解決方案更簡單、更高效。

FROM bitnami/google-cloud-sdk:0.392.0 as gcloud

FROM base-image-for-production:tag

# Do what you need to configure your production image

COPY --from=gcloud /opt/bitnami/google-cloud-sdk/ /google-cloud-sdk

在 Google 文檔中,您可以看到最佳實踐https://cloud.google.com/sdk/docs/install-sdk在頁面上搜索“Docker Tip”

例如 debian 使用:

RUN echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] http://packages.cloud.google.com/apt cloud-sdk main" | tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key --keyring /usr/share/keyrings/cloud.google.gpg  add - && apt-get update -y && apt-get install google-cloud-cli -y
  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM