Docker - заметки

Преимущества docker

  1. Всегда ставится новейшая или нужная версия.
  2. Экономия ресурсов. RAM, CPU, диск используются только в момент запуска контейнера. Можно что-то выполнить и сразу выйти - ресурсы сразу освобождаются (serverless). Образ контейнера минимален - там нет ничего лишнего. Оптимизирован профессионально под сервис.
  3. Можно создавать свои образы и размещать их на hub.docker.com и даже сертифицировать. Также можно создать свое хранилище образов.
  4. Docker-way - все сервисы хранить в отдельных контейнерах и настраивать взаимодействие между ними - микросервисная архитектура. Все собирается “по кирпичикам”.
  5. Минималистичность при использовании диска, реализованная по принципам git. В ФС хранятся только изменения файлов относительно базового образа и их история.
  6. Можно совместно использовать некоторые службы различными потребителями - например Mysql СУБД для нескольких сайтов. Удобство в том, что все связанное с Mysql обслуживается только в одном контейнере!
  7. Использование единых настроек рабочей среды посредством экспорта файла переменных окружения внутрь всех рабочих контейнеров.
  8. Docker-compose позволяет в пакетном режиме создавать и управлять группами контейнеров, используя единую YAML-конфигурацию в рамках проекта (оркестрация).
  9. Сервисы понимают друг друга “по имени”, которое прописано в docker-compose.yaml, что существенно упрощает настройку взаимодействия.
  10. Проще по сравнению с kubernetes.

Установка

Copy
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D sudo apt install docker.io docker-compose swarm docker version docker info

Основные команды

Copy
# Просмотр всех контейнеров docker ps -a # Просмотр зарущенных контейнеров docker ps # Запуск контейнера с пробросом порта на гостевую машину docker run -p 8080:80 nginx # Запуск контейнера на образе nginx в интерактивном режиме и выполнение в нем нужной команды. docker run -it nginx who # Запуск нужной версии ПО docker run -it php:7.1-cli # Уничтожить контейнер docker kill <container_id> # Посмотреть лог контейнера в реальном времени docker logs -f <container_id> # Выполнить команду в запущенном контейнере docker exec <container_id> netstat -tulpn # Посмотреть статистику использования ресурсов docker stats # Зафиксировать изменения контейнера docker commit <container_id> # Опубликовать (обновить) образ контейнера в своем репозитории docker pull myreg:port/ovt/neutron # Трансляция локального каталога во внутренний docker run -p 8080:80 -v ~/www/index.php:/var/www/html nginx # Зайти внутрь контейнера docker exec -it <container_id> bash # Запуск контейнера с установкой переменных окружения docker run -e "PATH=$PATH:/app" nginx docker run --env-file=.env nginx

Построить собственный клон контейнера

Copy
mkdir php74_sil; cd php74_sil cat Dockerfile <<< EOF FROM php:7.4-cli MAINTAINER Omega DSA <dsa@omega.ru> RUN apt-get update && apt-get -y install net-tools iproute2 COPY . /var/www/html WORKDIR /var/www/html EOF docker build -t "php74_sil:php-for-webdev"

Пример оркестрации

Cоздаются два связанных контейнера, nginx не стартует, если php не создан (depends_on)

cat docker-compose.yaml

Copy
version: '3' services: nginx: build: ./nginx ports: - "8080:80" volumes: - ./nginx/nginx.conf:/etc/nginx/nginx.conf - ./nginx/conf.d:/etc/nginx/conf.d - ./app:/app depends_on: - php php: build: ./php volumes: - ./app:/app

Запускаем создание:

Copy
docker-compose up --build -d