:stable イメージへの移行

:latest:alpine:emulators:latest:slim:debian_component_based の Docker イメージを使用している場合は、イメージサイズを小さくし、セキュリティ修正を改善するために、Debian ベースの :stable イメージに移行することをおすすめします。:stable イメージの使用に移行するには、使用している Debian ベースのイメージに :stable Docker イメージを拡張します。

場合によっては(python2 や古い JDK など、互換性のない古い依存関係をインストールする場合など)、:stable イメージの拡張が常に可能であるとは限りません。その場合は、独自の Dockerfile をビルドする必要があります。

:stable Docker イメージの拡張

:stable Docker イメージをベースイメージとして使用し、追加のコンポーネントと apt パッケージをインストールして、他の Debian ベースの Docker イメージ(:latest:emulators:slim など)に拡張できます。:stable Docker イメージを拡張するには、次のいずれかを行います。

ランタイムでカスタマイズして :stable ベースイメージを拡張する

:stable Docker イメージを拡張して、:latest:emulators、または :slim イメージとして使用するには、ランタイムでカスタマイズします。

次の docker run コマンドを実行して、:stable Docker イメージを実行時に :latest Docker イメージに拡張します。

# Running as latest
$ docker run -e APT_PACKAGES='curl python3-crcmod apt-transport-https lsb-release openssh-client git make gnupg' \
-e COMPONENTS='google-cloud-cli-datastore-emulator google-cloud-cli-pubsub-emulator google-cloud-cli-bigtable-emulator google-cloud-cli-firestore-emulator google-cloud-cli-spanner-emulator google-cloud-cli-cbt google-cloud-cli-kpt google-cloud-cli-local-extract google-cloud-cli-gke-gcloud-auth-plugin kubectl' \
gcr.io/google.com/cloudsdktool/google-cloud-cli:stable gcloud version
# For iterative run
$ docker run -e APT_PACKAGES='curl python3-crcmod apt-transport-https lsb-release openssh-client git make gnupg' \
-e COMPONENTS='google-cloud-cli-datastore-emulator google-cloud-cli-pubsub-emulator google-cloud-cli-bigtable-emulator google-cloud-cli-firestore-emulator google-cloud-cli-spanner-emulator google-cloud-cli-cbt google-cloud-cli-kpt google-cloud-cli-local-extract google-cloud-cli-gke-gcloud-auth-plugin kubectl' \
-it gcr.io/google.com/cloudsdktool/google-cloud-cli:stable bash

次のコマンドを実行して、:stable Docker イメージをランタイムで :emulators Docker イメージに拡張できます。

# Running as emulators
$ docker run -e APT_PACKAGES='curl python3-crcmod lsb-release gnupg bash' \
-e COMPONENTS='google-cloud-cli-datastore-emulator google-cloud-cli-pubsub-emulator google-cloud-cli-bigtable-emulator google-cloud-cli-firestore-emulator google-cloud-cli-spanner-emulator' \
gcr.io/google.com/cloudsdktool/google-cloud-cli:stable gcloud version
# For iterative run
$ docker run -e APT_PACKAGES='curl python3-crcmod lsb-release gnupg bash' \
-e COMPONENTS='google-cloud-cli-datastore-emulator google-cloud-cli-pubsub-emulator google-cloud-cli-bigtable-emulator google-cloud-cli-firestore-emulator google-cloud-cli-spanner-emulator' \
-it gcr.io/google.com/cloudsdktool/google-cloud-cli:stable bash

次の docker run コマンドを実行すると、:stable Docker イメージを :slim Docker イメージとして拡張できます。

# Running as slim
$ docker run -e APT_PACKAGES='curl gcc python3-crcmod python3-pip apt-transport-https lsb-release openssh-client git gnupg' \
gcr.io/google.com/cloudsdktool/google-cloud-cli:stable gcloud version
# For iterative run
$ docker run -e APT_PACKAGES='curl gcc python3-crcmod python3-pip apt-transport-https lsb-release openssh-client git gnupg' \
-it gcr.io/google.com/cloudsdktool/google-cloud-cli:stable bash

独自の Dockerfile をビルドして :stable ベースイメージを拡張する

:stable Docker イメージを拡張するには、:stable イメージをベースイメージとして独自の Dockerfile を作成し、docker build コマンドで Docker イメージをビルドします。

:stable イメージを :latest イメージに変換する手順は次のとおりです。

  1. 必要なコンポーネントとパッケージをインストールして、:stable から独自の Dockerfile を作成します。

    FROM docker:27.1.1 as static-docker-source
    
    FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:stable
    COPY --from=static-docker-source /usr/local/bin/docker /usr/local/bin/docker
    COPY --from=static-docker-source /usr/local/libexec/docker/cli-plugins/docker-buildx /usr/local/libexec/docker/cli-plugins/docker-buildx
    
    RUN apt-get update -qqy && apt-get -qqy upgrade && apt-get install -qqy \
          curl \
          python3-crcmod \
          apt-transport-https \
          lsb-release \
          openssh-client \
          git \
          make \
          gnupg && \
       export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \
       export CLOUD_SDK_VERSION=$(gcloud version | grep "Google Cloud SDK" | grep -oE '[^ ]+$') && \
       echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" > /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 && \
       apt-get install -y google-cloud-cli-datastore-emulator=${CLOUD_SDK_VERSION}-0 \
          google-cloud-cli-pubsub-emulator=${CLOUD_SDK_VERSION}-0 \
          google-cloud-cli-bigtable-emulator=${CLOUD_SDK_VERSION}-0 \
          google-cloud-cli-firestore-emulator=${CLOUD_SDK_VERSION}-0 \
          google-cloud-cli-spanner-emulator=${CLOUD_SDK_VERSION}-0 \
          google-cloud-cli-cbt=${CLOUD_SDK_VERSION}-0 \
          google-cloud-cli-kpt=${CLOUD_SDK_VERSION}-0 \
          google-cloud-cli-local-extract=${CLOUD_SDK_VERSION}-0 \
          google-cloud-cli-gke-gcloud-auth-plugin=${CLOUD_SDK_VERSION}-0 \
          kubectl
    
  2. Dockerfile をビルドして、独自の :latest Docker イメージを取得します。

    $ docker build -t my-cloud-sdk-docker:latest .
    

:stable イメージを :emulators イメージに変換する手順は次のとおりです。

  1. 次のように、必要なコンポーネントとパッケージを含む Dockerfile を作成します。

    FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:stable
    
    RUN apt-get update -qqy && apt-get -qqy upgrade && apt-get install -qqy \
          curl \
          python3-crcmod \
          lsb-release \
          gnupg \
          bash && \
       export CLOUD_SDK_REPO="cloud-sdk-$(lsb_release -c -s)" && \
       export CLOUD_SDK_VERSION=$(gcloud version | grep "Google Cloud SDK" | grep -oE '[^ ]+$') && \
       echo "deb https://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" > /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 && \
       apt-get install -y google-cloud-cli-datastore-emulator=${CLOUD_SDK_VERSION}-0 \
          google-cloud-cli-pubsub-emulator=${CLOUD_SDK_VERSION}-0 \
          google-cloud-cli-bigtable-emulator=${CLOUD_SDK_VERSION}-0 \
          google-cloud-cli-firestore-emulator=${CLOUD_SDK_VERSION}-0 \
          google-cloud-cli-spanner-emulator=${CLOUD_SDK_VERSION}-0
    
  2. 次のコマンドを実行して Dockerfile をビルドします。

    $ docker build -t my-cloud-sdk-docker:emulators .
    

:stable イメージを :slim イメージに変換する手順は次のとおりです。

  1. :stable をベースイメージとして使用して Dockerfile を作成します。

    FROM docker:27.1.1 as static-docker-source
    
    FROM gcr.io/google.com/cloudsdktool/google-cloud-cli:stable
    COPY --from=static-docker-source /usr/local/bin/docker /usr/local/bin/docker
    COPY --from=static-docker-source /usr/local/libexec/docker/cli-plugins/docker-buildx /usr/local/libexec/docker/cli-plugins/docker-buildx
    
    RUN apt-get update -qqy && apt-get -qqy upgrade && apt-get install -qqy \
          curl \
          python3-crcmod \
          apt-transport-https \
          lsb-release \
          openssh-client \
          git \
          make \
          gnupg
    
  2. 次のコマンドを実行して Dockerfile をビルドします。

    $ docker build -t my-cloud-sdk-docker:slim .