Сегодня я бы хотел рассказать, как создавать образы 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 вы могли увидеть разницу (шаблоны отличаются друг от друга).
Комментарии (9)
edo1h
18.06.2022 18:36+4sudo apt install ansible
почему бы вместо всего идущего перед этим не сделать так же
sudo apt install docker.io
?
sudo apt install python3-pip pip3 install docker
почему не
sudo apt install python3-docker
?
итого всю установку можно сократить до
sudo apt install docker.io ansible python3-docker rsync
(да, не мешает убедиться, что rsync есть на хосте)
Создаем папку docker-build и в ней создаем файл Dockerfile, он будет использоваться для создания Docker image.
зачем? не увидел нигде использования
ну и главный вопрос вам задали в первом же комментарии: что побудило вас написать эту статью? зачем вносить изменения в контейнер docker через ansible?
Exclipt
18.06.2022 21:45+3а можно узнать, зачем тут ансибл? Вот с практической точки зрения, допустим на этом простом примере не видно (тут и Dockerfile-то не нужен), но расскажите, с какого момента в принципе ансибл будет полезен?
Martsial
18.06.2022 22:39+3Docker – это НЕ софт для виртуализации [аппаратного обеспечения]. Этим занимаются гипервизоры.
osipov_dv
Во-первых - зачем?
Во-вторых, это bashible...
ajijiadduh
bashsible*