Посты по тегу: docker

Docker tips: COPY и ADD

Иногда, просматривая разные Dockerfile, вы можете видеть инструкции COPY или ADD. Они очень похожи, но в 99% случаев вы должны использовать COPY вместо ADD. И вот почему.

COPY и ADD - это инструкции Dockerfile, которые выполняют похожие действия. Они предоставляют возможность скопировать файлы из указанного места внутрь Docker образа.

COPY позволяет только одно - скопировать файлы или каталоги с машины, где собирается образ, в сам образ. И больше ничего.

ADD позволяет сделать все тоже самое, только эта инструкция поддерживает еще 2 исходных места. Во-первых, вы можете использовать URL в качестве источника. Во-вторых, вы можете распаковать tar файл из источника в образ.

В большинстве случаев, если вы используете URL для загрузки zip файла, то после этого вам необходимо выполнить RUN для его распаковки. Если это так, то лучше использовать RUN для запуска curl и распаковки файла, чем использовать ADD и потом RUN. Это уменьшит размер Docker образа.

ADD же лучше использовать когда у вас есть локальный tar файл и его необходимо распаковать внутрь образа:

ADD file.tar.gz /opt

Если же вы просто копируете файлы, то всегда используйте COPY.

Автотесты для образов docker

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

А что на счет готовых образов docker? Мы же пишем Dockerfile, в котором есть определенные инструкции по установке пакетов, открытых портов и т.п. Это такой же код, как и само наше приложение внутри доккера. Его тоже стоит покрывать тестами и для этого тоже есть инструменты.

Goss

Goss - это инструмент, основанный на YAML, для тестирования конфигурации серверов. Он облегчает процесс написания тестов, позволяя пользователю создавать тесты из текущего состояния системы.

Пример goss.yml из документации:

port:
  tcp:22:
    listening: true
    ip:
    - 0.0.0.0
  tcp6:22:
    listening: true
    ip:
    - '::'
service:
  sshd:
    enabled: true
    running: true
user:
  sshd:
    exists: true
    uid: 74
    gid: 74
    groups:
    - sshd
    home: /var/empty/sshd
    shell: /sbin/nologin
group:
  sshd:
    exists: true
    gid: 74
process:
  sshd:
    running: true

Описывать тут особо нечего, все просто и понятно. Для доккера есть dgoss враппер, который позволяет писать такие тесты для доккера.

Интегрировать такие тесты в CI/CD процесс не сложно и весьма полезно.

Режем рекламу в домашней сети

Сейчас стало ну уж сильно большое количество рекламы в интернете. Предлагаю сделать интернет серфинг немного проще с помощью собственного DNS сервера.

Что понадобится:

  • git
  • docker
  • docker-compose

git

sudo apt install git

docker

Поскольку все это крутится внутри контейнеров docker, то эта штука нам 100% понадобится. Все действия относятся к Ubuntu Linux, т.к. именно его я использую дома и в работе.

Устанавливается она согласно документации достаточно просто:

curl -sSL https://get.docker.com/ | sh

После завершения работы скрипта docker будет готов и им можно пользоваться.

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

docker-compose

Docker Compose предназначен для планирования и организации процессов в контейнерах Docker (запуска, отключения, создания межконтейнерных соединений и томов, и т.п.).

Установка не сложнее самого докера:

curl -L "https://github.com/docker/compose/releases/download/1.8.1/docker-compose-$(uname -s)-$(uname -m)" > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

Запуск собственного фильтра рекламы

Клонируем репозиторий

Логичное действие и не нуждается, наверное, в пояснениях, зачем это делать. :)

sudo mkdir /opt/docker
sudo chown <user> /opt/docker
git clone https://github.com/DmitriyLyalyuev/dnsmasq-no-ads /opt/docker/dnsmasq
cd /opt/docker/dnsmasq

Стартуем DNS сервер

docker-compose up -d

Осталось исправить в DHCP настройках роутера IP адрес DNS сервера на ваш.

Обновление списка рекламных доменов

Для обновления достаточно перезапустить контейнер:

cd /opt/docker/dnsmasq
docker-compose restart dnsmasq

Белый список

Иногда нам необходимо исключить из фильтра какие-то домены. Для этого достаточно добавить их в переменную WHITE_LIST в файле docker-compose.yml