Como executar contêineres em instâncias

É possível executar um contêiner do Docker em uma máquina que executa o Container-Optimized OS da mesma forma que faria na maioria das outras distribuições de imagem de nó: usando o comando docker run. Exemplo:

docker run --rm busybox echo "hello world"

A seguinte resposta é exibida:

Unable to find image 'busybox:latest' locally
latest: Pulling from library/busybox
. . .
Status: Downloaded newer image for busybox:latest
hello world

Todas as contas de usuário gerenciadas pelo Compute Engine na imagem cos são adicionadas ao docker por padrão. Isso permite que qualquer usuário conectado execute comandos do docker sem precisar de privilégios de raiz.

O Container-Optimized OS usa o serviço systemd-journald para coletar registros do sistema. Portanto, os registros do Docker estão em /var/log/journal. Também é possível executar journalctl para ver os registros.

Como acessar o Container Registry público

O suporte do Container Registry está integrado à imagem do nó cos. Para iniciar um contêiner a partir do Container Registry, execute:

docker run --rm gcr.io/google-containers/busybox echo "hello world"

A seguinte resposta é exibida:

Unable to find image 'gcr.io/google-containers/busybox:latest' locally
Pulling repository gcr.io/google-containers/busybox
. . .
Status: Downloaded newer image for gcr.io/google-containers/busybox:latest
hello world

Como acessar o Container Registry privado

Com 60 versões iniciais, o docker-credential-gcr é pré-instalado em imagens do Container-Optimized OS. É a maneira recomendada de acessar o Container Registry privado.

Para usar docker-credential-gcr, execute o seguinte comando:

docker-credential-gcr configure-docker

A seguinte resposta é exibida:

/home/username/.docker/config.json configured to use this credential helper

Para registros do Container Registry, use o seguinte comando:

docker run --rm gcr.io/your-project/your-image

Como alternativa, você pode buscar os tokens de acesso OAuth apropriados dos metadados do Compute Engine e usá-los com o comando docker login manualmente, conforme mostrado no exemplo a seguir:

METADATA=http://metadata.google.internal/computeMetadata/v1
SVC_ACCT=$METADATA/instance/service-accounts/default
ACCESS_TOKEN=$(curl -H 'Metadata-Flavor: Google' $SVC_ACCT/token | cut -d'"' -f 4)
docker login -u oauth2accesstoken -p $ACCESS_TOKEN https://gcr.io
docker run … gcr.io/your-project/your-image

Os nomes de host do Container Registry suportados são:

  • us.gcr.io
  • eu.gcr.io
  • asia.gcr.io

Como usar cloud-init com o Container Registry

O exemplo cloud-init usa o formato de configuração do Cloud para iniciar um contêiner do Docker a partir de uma imagem armazenada no registro de contêiner do Docker chamada DockerHub. Este exemplo usa o formato Cloud Config para iniciar um contêiner do Docker a partir de uma imagem armazenada no Container Registry:

#cloud-config

users:
- name: cloudservice
  uid: 2000

write_files:
- path: /etc/systemd/system/cloudservice.service
  permissions: 0644
  owner: root
  content: |
    [Unit]
    Description=Start a simple docker container
    Wants=gcr-online.target
    After=gcr-online.target

    [Service]
    Environment="HOME=/home/cloudservice"
    ExecStartPre=/usr/bin/docker-credential-gcr configure-docker
    ExecStart=/usr/bin/docker run --rm -u 2000 --name=mycloudservice gcr.io/google-containers/busybox:latest /bin/sleep 3600
    ExecStop=/usr/bin/docker stop mycloudservice
    ExecStopPost=/usr/bin/docker rm mycloudservice

runcmd:
- systemctl daemon-reload
- systemctl start cloudservice.service

Executar um cluster Kubernetes

A abordagem recomendada para executar um cluster do Kubernetes no Google Cloud é usar o Google Kubernetes Engine (GKE). Entretanto, se você quiser executar uma versão autogerenciada do Kubernetes de código aberto, siga estas instruções.

  1. Abra a porta 443 no seu firewall para garantir que seu Kubernetes mestre possa ser acessado.
  2. Faça o download dos binários da versão do Kubernetes, descompacte e abra o cluster da seguinte maneira:

    # Download and extract the latest kubernetes release.
    cd <empty-dir>
    KUBERNETES_VERSION="v1.4.6"
    curl -sSL -o kubernetes.tar.gz https://github.com/kubernetes/kubernetes/releases/download/${KUBERNETES_VERSION}/kubernetes.tar.gz
    tar xzf kubernetes.tar.gz
    cd kubernetes
    
    # Configure environment to use Container-Optimized OS.
    export KUBE_OS_DISTRIBUTION=cos
    
    # Start up a cluster and verify that it is running:
    cluster/kube-up.sh
    cluster/kubectl.sh get nodes
    cluster/kubectl.sh get pods --namespace=kube-system
    
  3. Agora você pode executar seu aplicativo no cluster. Por exemplo, você pode iniciar um cluster Redis usando o seguinte exemplo:

    cluster/kubectl.sh create -f \
      examples/guestbook/all-in-one/guestbook-all-in-one.yaml
    cluster/kubectl.sh get pods
    cluster/kubectl.sh describe pods redis-master-pod-name
    

O Container-Optimized OS usa o serviço systemd-journald para coletar registros do sistema. Portanto, os registros do Docker e do Kubelet estão em /var/log/journal. Você também pode executar journalctl para visualizar os registros.

Para instâncias em execução como parte de um cluster GKE, os logs do Docker e do Kubelet também são exportados automaticamente para o log do conjunto de operações do Google Cloud. Os logs do Docker, Kubelet e kube-proxy estão disponíveis no conjunto de operações do Google Cloud em Instância de VM do Compute Engine ao usar o Console do Google Cloud.

Quando você não precisar mais do cluster, exclua-o:

cluster/kube-down.sh