Найти в Дзене
Из сисадмина в DevOps`а

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

Сегодня я бы хотел рассказать, как создавать образы Docker с помощью Ansible. Но для начала расскажу кратко что такое Docker. 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 su
Оглавление

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

Но для начала расскажу кратко что такое Docker. 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: https://github.com/ZeroBot-Dot/Build-Docker-Images-with-Ansible

Создаем папку 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, рекомендую ознакомиться.

Теперь создадим рядом с папкой 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 (про саму систему Ansible будет статья, но чуть позже).

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

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

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

Обсудить статью вы можете в нашем Телеграм канале: https://t.me/devops_spb_ru

Или в комментариях ниже.