No name

Links

GitHub
Шпаргалка по docker & docker-compose (Debian 11)

Шпаргалка по docker & docker-compose (Debian 11)


visibility1140 2022-11-21 14:22:20
Задачи:
1) Установить docker и docker-compose
2) Создать Dockerfile
3) Объединить несколько образов с помощью docker-compose


Установка
$apt update
$apt install apt-transport-https ca-certificates curl software-properties-common
$curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
$echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list  /dev/null
$apt update
$apt-cache policy docker-ce
$apt install docker-ce docker-compose
$systemctl status docker (если не работает, то необходимо его перезапустить, после установки docker-compose единоразово может выпать в ошибку)

Базовые команды docker
$docker -v 
Список рабочих контейнеров
$docker ps
Список всех контейнеров
$docker ps -a
Список образов
$docker images
Поиск образа в репозитории hub.docker.com
$docker search nginx
Скачивание ИЛИ обновление образа
$docker pull nginx
Запуск с отображением состояния контейнера
$docker run -it -p 80:80 nginx:latest
Запуск в фоновом режиме
$docker run -d -p 80:80 nginx:latest
Создание копии контейнера с другим тегом
$docker tag nginx:v1 nginx:v2
Сборка контейнера из Dockerfile в текущей директории
$docker build -t customimage:latest .

Команды для удаления всех контейнеров и образов
$docker stop $(docker ps -a -q)
$docker rm $(docker ps -a -q)
$yes| docker container prune
$docker rmi $(docker images -q)
$docker images -q |xargs docker rmi
$docker volume rm $(docker volume ls -q)

Команды для входа в контейнер и сохранения изменений
$docker exec -it bash
если нужно сохранить изменения:
$docker commit updated_image:v3


Создание Dockerfile – пример

# Исходный образ для создания контейнера
FROM debian:latest 

# Копирование дополнительных файлов с конфигурациями nginx.conf & entrypoint.sh
COPY conf /conf

# Запуск процедуры сборки контейнера, первым шагом идет установка часового пояса, далее установка nginx+php8.0 _fpm, установка даты и времени в php, скачивание(последней версии)-разархивирование-установка прав доступа на phpMyAdmin. И только в конце устанавливаются файлы конфигурации, в противном случае процесс сборки контейнера закончится с ошибкой.
RUN cp /usr/share/zoneinfo/Asia/Yekaterinburg /etc/localtime \ 
&& apt-get update \
&& apt-get install -y \ 
ca-certificates \
apt-transport-https \
software-properties-common \
wget \
curl \
nginx \
gpg \
lsb-release \
&& wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg \
&& sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' \
&& apt-get update \
&& apt-get install -y \
php8.0-fpm \
php8.0-common \
php8.0-mysql \
php8.0-zip \
php8.0-gd \
php8.0-mbstring \
php8.0-curl \
php8.0-xml \
php-pear \
php8.0-bcmath \
  && echo "timezone = Asia/Yekaterinburg" >> /etc/php/8.0/php.ini \ 
&& wget https://sourceforge.net/projects/postfixadmin/files/postfixadmin-3.3.8/PostfixAdmin%203.3.8.tar.gz -O PostfixAdmin-tar.gz \
&& tar xvf PostfixAdmin-tar.gz --strip-components=1 -C /var/www/html/ \
&& rm PostfixAdmin-tar.gz \
&& mkdir /var/www/html/templates_c \
&& mv /conf/entrypoint.sh /entrypoint.sh \
&& mv /conf/nginx.conf /etc/nginx/nginx.conf \
&& rm -R /conf \
&& chown -R www-data:www-data /var/www/html \
&& chmod -R 500 /var/www/html \
&& chmod -R 700 /var/www/html/templates_c/ \
&& chmod a+x /entrypoint.sh

# Указание стартового скрипта с которого будет начинаться каждый запуск контейнера
ENTRYPOINT ["/entrypoint.sh"]

# Открытие порта внутри контейнера
EXPOSE 80


Создание файла entrypoint.sh

#!/bin/bash
echo "Start nginx & php-fpm"
nginx
service php8.0-fpm start

# Выдача логов, если данный параметр убрать то контейнер после запуска будет сразу завершатся.
tail -f /var/log/nginx/error.log


Объединение контейнеров в docker-compose

# Версия docker-compose
version: '3'
# Список наших сервисов (контейнеров)
services:
    phpmyadmin:
        restart: always
        image: h963z57/phpmyadmin:main
        # маршрутизируем порты
        ports:
            - "83:80"
        # монтируем директории, слева директории на основной машине, справа - куда они монтируются в контейнере
        volumes:
            - /mnt/cfg/phpMyAdmin.config.inc.php:/var/www/html/config.inc.php:ro
    postfixadmin:
        restart: always
        image: h963z57/postfixadmin:main
        # маршрутизируем порты
        ports:
            - "84:80"
        # монтируем директории, слева директории на основной машине, справа - куда они монтируются в контейнере
        volumes:
            - /mnt/cfg/poftfixadmin.config.php:/var/www/html/config.inc.php:ro

Источники:
1) Быстрый гайд как поднять сайт в Docker

https://evilcoder.ru/bystryj-gajd-kak-podnyat-sajt-v-docker/

2) Остановить/Удалить все Docker контейнеры/images

https://linux-notes.org/ostanovit-udalit-vse-docker-kontejnery/

3) Как установить Docker на Debian

https://help.reg.ru/hc/ru/articles/4408047684241-%D0%9A%D0%B0%D0%BA-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C-Docker-%D0%BD%D0%B0-Debian

4) Изучаем Docker, часть 3: файлы Dockerfile

https://habr.com/ru/company/ruvds/blog/439980/

Back