Comment créer un conteneur Docker avec l'outil de ligne de commande dans le cloud de Google ?
Le script situé à l’URL https://sdk.cloud.google.com semble nécessiter la saisie de l’utilisateur, il ne fonctionne donc pas dans un fichier de menu fixe.
Ajouter ce qui suit à mon fichier Docker semble fonctionner.
# 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
Utilisez ce one-liner dans votre fichier Dockerfile:
RUN curl -sSL https://sdk.cloud.google.com | bash
Le faire avec Alpine:
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`
En guise d'alternative, vous pouvez utiliser l'image du menu fixe fournie par Google, à savoir 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
Construire:
docker build . -t google-cloud-sdk
Puis lancez gcloud
:
docker run --rm \
--volume $(pwd)/assets/root/.config:/root/.config \
google-cloud-sdk gcloud
... ou exécutez gsutil
:
docker run --rm \
--volume $(pwd)/assets/root/.config:/root/.config \
google-cloud-sdk gsutil
Le dossier assets
local contiendra la configuration.
Ce travail pour moi.
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
J'ai utilisé la plupart de ces exemples sous une forme quelconque (merci @KJoe), mais je devais faire plusieurs autres choses pour tout configurer afin que gcloud
puisse fonctionner dans l'environnement. Notez qu'il est préférable de limiter le nombre de lignes (cela limite les couches nécessaires pour tirer)
Voici un exemple plus complet de fichier Docker avec la configuration gcloud
et l’extension d’une image 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
Mon cas d'utilisation consistait à générer un jeton Google Bearer à l'aide du compte de service. Je souhaitais donc que le conteneur Docker installe gcloud
. Voici à quoi ressemble mon fichier 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"]
Si vous devez examiner un conteneur après sa construction mais que cela ne fonctionne pas, utilisez docker run --rm -it <container-build-id> bash -il
et saisissez gcloud --version
s'il est installé correctement ou non.
Un exemple utilisant debian comme image de base:
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