Observação:
- Este tutorial está disponível em um ambiente de laboratório gratuito fornecido pela Oracle.
- Ele usa valores de exemplo para credenciais, tenancy e compartimentos do Oracle Cloud Infrastructure. Ao concluir seu laboratório, substitua esses valores por valores específicos do seu ambiente de nuvem.
Configurar Contêineres Podman com o Oracle Linux Automation Engine
Introdução
O Oracle Linux Automation Engine permite que os usuários criem um playbook para instalar o Podman e, em seguida, executar e gerenciar contêineres usando a coleção containers.podman.
Ao executar playbooks, o Oracle Linux Automation Engine executa as tarefas em máquinas que correspondem à diretiva hosts:
no playbook. Esses hosts são geralmente definidos em um arquivo de inventário e podem ser remotos ou locais. Neste tutorial, vamos demonstrar como executar um playbook localmente.
Objetivos
Neste tutorial, você aprenderá a:
- Executar playbooks localmente
- Adicionar uma coleção a um playbook
- Instalar Podman
- Obtenha e execute um contêiner oraclelinux:9
Pré-requisitos
-
Um sistema Oracle Linux com a seguinte configuração:
- um usuário não raiz com permissões sudo
- instalar o Oracle Linux Automation Engine
Implantar o Oracle Linux Automation Engine
Observação: Se estiver em execução na sua própria tenancy, leia o projeto linux-virt-labs
GitHub README.md e conclua os pré-requisitos antes de implantar o ambiente de laboratório.
-
Abra um terminal no Luna Desktop.
-
Clone o projeto
linux-virt-labs
GitHub.git clone https://github.com/oracle-devrel/linux-virt-labs.git
-
Altere para o diretório de trabalho.
cd linux-virt-labs/olam
-
Instale as coleções necessárias.
ansible-galaxy collection install -r requirements.yml
-
Atualize a configuração da instância do Oracle Linux.
cat << EOF | tee instances.yml > /dev/null compute_instances: 1: instance_name: "ol-control-node" type: "control" olam_type: olae EOF
-
Crie um arquivo de inventário.
cat << EOF | tee hosts > /dev/null localhost ansible_connection=local ansible_connection=local ansible_python_interpreter=/usr/bin/python3.6 EOF
-
Implante o ambiente de laboratório.
ansible-playbook create_instance.yml -i hosts -e "@instances.yml"
O ambiente de laboratório gratuito requer a variável extra
ansible_python_interpreter
para localhost porque instala o pacote RPM para o Oracle Cloud Infrastructure SDK para Python. O local para instalar este pacote está nos módulos Python padrão do sistema com base na sua versão do Oracle Linux. Usar uma variável de inventário evita impactar as reproduções em execução em hosts diferentes de localhost.A forma de implantação padrão usa a CPU AMD. Você pode alterar a forma das instâncias especificando uma nova definição de variável de forma na linha de comando.
Por exemplo:
-e instance_shape="VM.Standard3.Flex"
Da mesma forma, a versão padrão da imagem do Oracle Linux usa a variável
os_version
definida no arquivo `default_vars.yml. Você pode modificar esse valor especificando a versão principal do Oracle Linux na linha de comando.Por exemplo:
-e os_version="9"
Importante: Aguarde a execução bem-sucedida do playbook e atinja a tarefa de pausa. Neste estágio do playbook, a instalação do Oracle Linux está concluída e as instâncias estão prontas. Observe o jogo anterior, que imprime os endereços IP públicos e privados dos nós que ele implanta.
Coleções
As coleções são um formato de distribuição para o conteúdo do Oracle Linux Automation Engine que pode incluir playbooks, atribuições, módulos e plug-ins. Este tutorial instalará a coleção containers.podman
usando um arquivo requirements.yml
. Um arquivo requirements.yml
permite a instalação de coleções, funções ou ambas com base nas chaves definidas no arquivo.
Criar um Arquivo de Requisitos
-
Abra um novo terminal e conecte-se ao sistema ol-control-node via SSH.
ssh oracle@<ip_address_of_instance>
-
Crie um diretório de trabalho.
mkdir -p ~/podman-project
-
Crie um arquivo de requisitos.
cat << 'EOF' | tee ~/podman-project/requirements.yml > /dev/null --- collections: - name: containers.podman EOF
-
Instale a coleção.
ansible-galaxy collection install -r ~/podman-project/requirements.yml
A saída mostra o processo de recuperação do arquivo compactado do site Galaxy e, em seguida, instalá-lo em seu diretório principal em
.ansible/collections.
Observação: se a saída mostrar
ERROR: Ansible requires the locale encoding to be UTF-8; Detected None.
, isso indicará uma definição de configuração regional incorreta paraansible
. Corrija o problema definindo estas duas variáveis de ambiente:export LC_ALL="en_US.UTF-8" export LC_CTYPE="en_US.UTF-8"
Instalar Podman
Os playbooks do Oracle Linux Automation Engine consistem em reproduções, que são compostas de tarefas mapeadas para hosts específicos. Essas tarefas executam principalmente módulos idempotentes. A idempotência garante que você obtenha o mesmo resultado se o playbook for executado uma ou várias vezes. Este tutorial demonstrará idempotência construindo o playbook em etapas e executando-o entre cada alteração.
Antes de executar um contêiner do Podman, precisamos instalar os pacotes do Podman no repositório AppStream do Oracle Linux.
-
Criar o arquivo de playbook.
cat << 'EOF' | tee ~/podman-project/podman-playbook.yml > /dev/null --- - hosts: localhost connection: local tasks: - name: Install podman ansible.builtin.dnf: name: '@container-tools:ol8' state: present become: yes when: - ansible_distribution == 'OracleLinux' - ansible_facts['distribution_major_version'] == '8' - name: Install podman ansible.builtin.dnf: name: 'container-tools' state: present become: yes when: - ansible_distribution == 'OracleLinux' - ansible_facts['distribution_major_version'] == '9' EOF
Um playbook e os nomes das tarefas visam tornar o playbook autodocumentado. As informações abaixo fornecem uma explicação mais detalhada de alguns itens-chave.
hosts: localhost
: Instrui as tarefas a serem executadas no localhost.connection: local
: Garante que o link permaneça local e não seja executado por SSH.become: yes
: Eleva a tarefa dentro desta seção de playbook a ser executada com o privilégiosudo
por padrão.
-
Execute o playbook.
Como executamos esse playbook no host local, não há motivo para criar ou fazer referência a um arquivo de inventário explicitamente. No entanto, se quisermos executar isso em um host remoto, precisaremos atualizar a entrada
hosts:
, remover a linhaconnection:
no playbook e, em seguida, criar e fazer referência a um arquivo de inventário. Se você não estiver familiarizado com esse processo, poderá consultar alguns de nossos outros tutoriais, vinculados na Estação de Treinamento do Oracle Linux no final deste tutorial.ansible-playbook ~/podman-project/podman-playbook.yml
A saída do comando deve mostrar que ele é executado com sucesso em localhost, reportando uma alteração na tarefa Install podman. Este status indica que concluímos adequadamente a instalação do módulo container-tools.
-
Verifique o pacote Podman instalado exibindo sua versão.
podman --version
Extrair uma Imagem
Depois de instalar o Podman, podemos extrair imagens do nosso registro de escolha e prepará-las localmente. Nesta etapa, extrairemos a imagem do Oracle Linux do GitHub Container Registry.
Informações adicionais sobre imagens do Oracle Linux Developer estão disponíveis aqui.
-
Adicione a tarefa para extrair uma imagem de contêiner para o playbook.
cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null - name: Pull oraclelinux:9 from GitHub containers.podman.podman_image: name: ghcr.io/oracle/oraclelinux:9 EOF
-
Execute o playbook.
ansible-playbook ~/podman-project/podman-playbook.yml
-
Verifique se Podman extraiu a imagem.
podman images
Exemplo de saída:
REPOSITORY TAG IMAGE ID CREATED SIZE ghcr.io/oracle/oraclelinux 9 97e22ab49eea 20 hours ago 254 MB
Executar uma Imagem de Contêiner
Em vez de apenas extrair uma imagem, também podemos extrair e executar um contêiner com base em uma imagem em uma única etapa. Vamos extrair e executar a imagem do desenvolvedor do Oracle Linux NGINX.
-
Atualize o arquivo do playbook.
cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null - name: Run image containers.podman.podman_container: name: nginx image: ghcr.io/oracle/oraclelinux9-nginx:1.20 state: started detach: yes expose: - '80' - '443' publish: - '8080:80' EOF
Onde:
name
: Nome do contêiner.image
: Caminho do repositório (ou nome da imagem) e tag usados para criar o contêiner.state
: Verifica se há um contêiner em execução correspondente ao nome e à configuração. O Podman cria e inicia um novo contêiner quando não consegue encontrar uma correspondência.detach
: Executa o contêiner no modo desanexado.expose
: Exponha uma porta ou uma faixa de portas.publish
: Publique a porta de um contêiner ou uma faixa de portas no host.
-
Execute o playbook.
ansible-playbook ~/podman-project/podman-playbook.yml
-
Verifique se o contêiner está em execução.
podman ps
Exemplo de saída:
[oracle@ol-server podman-project]$ podman ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 5f7a28cc4c6b ghcr.io/oracle/oraclelinux9-nginx:1.20 nginx -g daemon o... 2 minutes ago Up 2 minutes ago 0.0.0.0:8080->80/tcp nginx
A saída mostra que o contêiner está ativo e em execução há 2 minutos.
-
Pare o recipiente.
Usando o ID DO CONTÊINER da saída acima, execute:
podman stop $(podman ps -q -f name=nginx)
Este comando usa o ID DO CONTÊINER como referência para interromper o contêiner nginx.
Executar uma Imagem de Contêiner com um Volume
O Podman cria volumes adicionando uma montagem de bind, que mapeia um diretório local para um diretório dentro do contêiner. Demonstraremos esse recurso executando o mesmo contêiner NGINX e substituindo a página index.html padrão por uma personalizada.
-
Atualize o arquivo do playbook.
Crie o diretório local. Embora possamos executar essa etapa de forma eficiente e manual uma vez na linha de comando, vamos automatizá-la. Automatizar esta etapa garante que o diretório exista sempre que o playbook for executado. Antes de executar a imagem, adicione essas tarefas, que criam um diretório e o arquivo index.html.
Certifique-se de deixar uma linha em branco entre as tarefas para facilitar a leitura e seguir as regras de sintaxe YAML e as diretrizes de alinhamento. Usaremos o
sed
para concluir essa tarefa, pois ele permite a fácil inserção de blocos de texto em um arquivo em uma linha específica.sed -i -e '24 r '<(cat -<< EOF - name: Ensure the destination directory exists ansible.builtin.file: path: "/home/oracle/nginx/" state: directory - name: Create an empty file ansible.builtin.file: path: "/home/oracle/nginx/index.html" state: touch mode: '0755' - name: Create index.html ansible.builtin.copy: dest: "/home/oracle/nginx/index.html" content: | Hello! Welcome to Oracle Linux Containers. EOF ) ~/podman-project/podman-playbook.yml
-
Em seguida, adicione a opção a seguir no final da tarefa
Run image
.cat << EOF | tee -a ~/podman-project/podman-playbook.yml > /dev/null volume: "/home/oracle/nginx:/usr/share/nginx/html:Z" EOF
A opção
volume
cria uma montagem de bind entre o diretóriosource:destination
. A opção:Z
trata de quaisquer problemas de permissões SELinux relacionados à montagem de bind. O Podman faz isso rotulando novamente o conteúdo do volume para corresponder ao rótulo dentro do contêiner.Aqui está uma versão completa do playbook para referência.
-
Execute o playbook.
ansible-playbook ~/podman-project/podman-playbook.yml
-
Verifique se o contêiner está em execução.
podman ps
Exemplo de saída:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f74aa726d470 ghcr.io/oracle/oraclelinux9-nginx:1.20 nginx -g daemon o... 10 minutes ago Up 10 minutes ago 0.0.0.0:8080->80/tcp nginx
-
Verifique se o arquivo index.html existe.
ls -l /home/oracle/nginx
Exemplo de saída:
[oracle@ol-server podman-project]$ ls -l /home/oracle/nginx/ total 4 -rwxr-xr-x. 1 oracle oracle 41 Nov 5 16:46 index.html
-
Verifique a montagem de bind.
Use o cURL para exibir a página index.html do contêiner e a mensagem de Bem-vindo.
curl localhost:8080
Onde 8080 é o mapeamento de porta local para a porta 80 no contêiner.
Próximas Etapas
Ao concluir este tutorial, você deverá entender como automatizar seu trabalho com Podman e contêineres usando o Oracle Linux Automation Engine. Explore os outros módulos da coleção containers.podman para criar playbooks adicionais que automatizam sua infraestrutura.
Links Relacionados
- Documentação do Oracle Linux Automation Manager
- Treinamento do Oracle Linux Automation Manager
- Oracle Linux Training Station
Mais Recursos de Aprendizagem
Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal do Oracle Learning YouTube. Além disso, acesse education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.
Para obter a documentação do produto, visite o Oracle Help Center.
Configure Podman Containers with Oracle Linux Automation Engine
F52954-04
Copyright ©2021, Oracle and/or its affiliates.