Работа с docker

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

Контеризация нам позволяет с большей продуктивностью использовать аппаратные средства. В контейнерах может быть что угодно, даже ОС, например можно разместить в контейнер UBUNTU и установить в нее apache. Обычно так и делаю разработчики, они обновляют свой код в уже готовом image файле и не мучаються с установкой на виртуаке необходимых програмных сред.

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

Файлы image можно скачивать с doker hub, либо пилить самому. Image файл представляетсобой многослойную структуру, в которой мы можем наслаивать необходимые нам инструменты. Например, можно скачать готовый image на docker hub с Ubuntu, а потом вторім слоем накотить на нее тотже apache или nginx, а третим слоем наше приложение. Создать с данного image контейнер, и потом через браузер заходить на готовую реализаую продукта.

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

Консольные команды для docker

docker без sudo
  • sudo groupadd docker
  • sudo usermod -aG docker ${USER}
  • su - ${USER}
команды для работы
  • docker image - просмотреть список существующих image в локальном реестре
  • docker ps - просмотреть список запущенных контейнеров (-a выведет все запускаемые ранее контейнеры, -q показать только id контейнеров)
  • docker build - собрать image с учетом DockerFile(-t new_name_image)
  • docker create - создаем контейнер( -t -i name_image --name new_name_cont)
  • docker run - запуск контейнера (-d запуск в фоновом режиме, --rm после выполнения удалится, --name указываем_имя_image указываем_имя_контейнера)
  • docker start - запуск остановленного контейнера
  • docker exec -it id_cont bash - зайти в контейнер и запустить bash(выход из контейнера exit)
  • docker stop - остановка работы контейнера
  • docker rm - удалить контейнер
  • docker rm $(docker ps -a -q) - удалить все незапущенные контейнер
  • docker rmi - удалить iamge

Команды настройки DockerFile

  • FROM - что мы хотим видить в данном image, например Ubuntu. Через двоеточие : указываеться версия Ubuntu:20
  • LABEL — описывает метаданные. Например — кто создал, поддерживает образ.
  • RUN - нужно віполнить какуюто команду, например mkdir -p /user/src/application/
  • WORKDIR - указываем что будем работать в данной папке
  • COPY - копируем содного места в другое
  • ADD — копирует файлы и папки в контейнер, может распаковывать локальные .tar-файлы.
  • CMD - что нужно делать при запуске контейнера
  • ENTRYPOINT - Тоже что и CMD без shell
  • ENV — устанавливает постоянные переменные среды.
  • EXPOSE — указывает на необходимость открыть порт.
  • VOLUME — создаёт точку монтирования для работы с постоянным хранилищем.
Пример создания DockerFile который реализует php+запуск index.php
FROM php:7.4-cli
COPY . /usr/src/myapp
WORKDIR /usr/src/myapp
CMD [ "php", "./index.php" ]

Работа с docker-compose

установка
  • sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
  • sudo chmod +x /usr/local/bin/docker-compose
  • docker-compose --version
команды для использование
  • docker-compose up -d — запуск контейнера
  • docker-compose build — собрать контейнер на базе файла docker-compose.yaml
  • docker-compose --version
Пример создания файл docker-compose.yaml, который позволяет поднять fpm+nginx
version: "3.3"
services:
   nginx:
     build:
       context: .
       dockerfile: dfile/nginx.Dockerfile
     ports:
       - 8098:80
     links:
       - fpm
     volumes:
         - ./:/var/www/app-docker
   fpm:
     build:
       context: .
       dockerfile: dfile/fpm.Dockerfile
     volumes:
       - ./:/var/www/app-docker
Файл nginx.Dockerfile
FROM nginx
ADD dfile/conf/vhost.conf /etc/nginx/conf.d/default.conf
WORKDIR /var/www/app-docker
Файл fpm.Dockerfile
FROM php:7.4-fpm
RUN apt-get update
Перебилдить контейнер
docker-compose up -d --build --force-recreate --no-deps app