1396
Nov. 21, 2022, 2:22 p.m.
Шпаргалка по docker & docker-compose (Debian 11)
Задачи:
- Установить docker и docker-compose
- Создать Dockerfile
- Объединить несколько образов с помощью 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
Если не работает, то необходимо его перезапустить, после установки docker-compose единоразово может выпать в ошибку.
systemctl status docker
Базовые команды 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