Как создавать образы Docker с помощью Ansible в Ubuntu 20.04

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Сегодня я бы хотел рассказать, как создавать образы Docker с помощью Ansible.

Но для начала расскажу кратко что такое Docker. Docker – это софт для виртуализации и он позволяет вам упаковывать ваши приложения в контейнеры.

Что такое Ansible – это софт для управления конфигурациями, в частности управление конфигурациями операционных систем.

Для начала нам нужно установить Docker и Ansible, затем создадим Docker файл и соберем контейнер для Web-сервера. После этого мы создадим простой плейбук Ansible для создания образа Docker для другого Web-сервера.

Устанавливаем Docker

sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

sudo add-apt-repository “deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable”

sudo apt update

sudo apt install docker-ce docker-ce-cli containerd.io

sudo groupadd docker

sudo usermod -aG docker $USER

Теперь вам надо перелогиниться в операционной системе и проверяем версию установленного Docker:

docker --version

Устанавливаем Ansible

sudo apt install ansible

Всё.

Установка дополнительного софта

Выше мы установили основной софт, но для полноценной работы нам надо установить дополнительные пакеты.

sudo apt install python3-pip

pip3 install docker

Теперь давайте писать код

Весь код, который будет предоставлен дальше, вы можете скачать в моем репозитории на GitHub.

Создаем папку docker-build и в ней создаем файл Dockerfile, он будет использоваться для создания Docker image.

Содержимое файла:

FROM nginx:latest

# Default Nginx static file location
# Ideally, we would edit the nginx.conf for new configuration
WORKDIR /usr/share/nginx/html

# Add all local static files to image working directory
ADD ./ ./

# If there was a lot of ADD COPY and RUN Steps, Bash script file is common practice
# To bootstrap the image without additional layers
# RUN /bootstrap.sh

# Self explanatory
EXPOSE 8080

Теперь создадим рядом с папкой docker-build папку ansible-build. В ней создаем файл docker-image-playbook.yaml

Содержимое файла:

---
- name: Pull latest Nginx Image
  hosts: localhost
  tasks:
    - name: Pull Nginx Image
      docker_container:
        name: «nginx-ansible-base»
        image: «nginx:latest»
        state: started
        command: tail -f /dev/null
    - name: Add Nginx Image to Ansible Hosts
      add_host:
        name: «nginx-ansible-base»
        ansible_connection: docker
        ansible_ssh_user: root
- name: Configure Nginx Base Image for deploying Webserver
  hosts: «nginx-ansible-base»
  gather_facts: false
  tasks:
    - name: Install Python3
      raw: apt update && apt upgrade -y && apt install python3 -y
    - name: Install Rsync
      apt:
        name: rsync
    - name: Copy local configuration Files to Nginx Conf
      synchronize:
        src: ./website/
        dest: /usr/share/nginx/html/
    - name: Ensure NGINX Is enabled
      service:
        name: nginx
        enabled: yes
    - name: Clean up Python 3 and Prerequisites
      raw: apt purge python3 rsync -y
- name: Snapshot base image to create newly configured Image
  hosts: localhost
  tasks:
    - name: Commit Docker image
      command: docker commit «nginx-ansible-base» «nginx-ansible-build-demo»
- name: Clean Up Docker Containers
  hosts: localhost
  tasks:
    - name: Remove Running Base Image
      docker_container:
        name: nginx-ansible-base
        state: absent
        force_kill: yes

В этом файле описываются команды, которые будет выполнять Ansible.

По факту в этом файле описана сборка контейнера Docker на основании нужного нам образа, установка зависимостей и копирование необходимых файлов. Не вижу смысла копировать сюда официальную документацию, она может потерять актуальность, поэтому рекомендую вам изучить ее на официальном сайте Ansible.

Чтобы собрать образ на основании только что созданного файла docker-image-playbook.yaml вводим в консоли команду ansible-playbook docker-image-playbook.yaml

В репозитории вы найдете еще файлы от двух html шаблонов сайтов. Они добавлены чтобы при запуске контейнера Docker через Dockerfile и через файл docker-image-playbook.yaml вы могли увидеть разницу (шаблоны отличаются друг от друга).

Источник: https://habr.com/ru/post/672162/


Интересные статьи

Интересные статьи

Новые релизы Dockerfile 1.4 и Buildx v0.8+ дают возможность определения нескольких контекстов сборки. Теперь в качестве сборки вы можете использовать файлы из разных локальных директорий. Давайте посм...
Один из принципов правильного и удобного взаимодействия пользователя с digital-продуктом — это модульная дизайн-система. Многослойная, но логичная и простая система, в которой все блоки, кнопки и элем...
Мы привыкли создавать некоторые элементы пользовательского интерфейса с помощью JavaScript, например аккордеоны, всплывающие подсказки (тултипы), усечение текста и т. д. ...
Детектирование аномалий — интересная задача машинного обучения. Не существует какого-то определенного способа ее решения, так как каждый набор данных имеет свои особенности. Но в то же время есть...
Среди советов по улучшению юзабилити интернет-магазина, которые можно встретить в инете, один из явных лидеров — совет «сообщайте посетителю стоимость доставки как можно раньше».