Docker
Знакомство с Docker
Докер основные команды | # 2
-
Запустить контейнер
docker run -it ubuntu bash
где-i -t
сообщает докеру что необходимо создать сеанс интерактивной работы на подключаемом терминальном устройствеbash
- инициализирует командную оболочку bash -
Запустить контейнер с ручным указанием имени
docker run -it --name myapp --hostname myapp ubuntu bash
-
Удалить все контейнеры со статусом
exited
docker rm -v $(docker ps -aq -f status=exited)
-
Запустить контейнер как демон
docker run -d bitnami/apache
-
Вывести список всех запущенных и остановленны контейнеров
docker ps -a
-
Для остановки контейнера
docker stop container_name
-
Запуск контейнера с пробросом портов
docker run -d -p 8000:8080 bitnami/apache
где 8000 - порт локальной машины
8080 - порт контейнера
см .:
http://phpqa.ru:8000/
- Получить информацию о контейнере + с фильтрацией
docker inspect container_name | grep IPAddress
Docker создаем собственный образ | # 3
- Запустить контейнер с ручным указанием имени
docker run -it --name myapp --hostname myapp ubuntu bash
- Обновить репозитории
apt update
- Установить приложение
apt install cowsay
- создать симлинк для быстрого запуска команды ввода «cowsay»
ln -s /usr/games/cowsay /usr/bin/cowsay
- проверим работу
cowsay test
______
< test >
------
\ ^__^
\ (oo)\_______
(__)\ )\/\
||----w |
|| ||
- выйдем из контейнера
exit
- Волшебной командой отправим подготовленный контейнер в образ докер-хаб:
docker commit myapp dionisvl/myapp
- теперь у нас есть свой докер контейнер который можно вызыть передавая параметры:
docker run dionisvl/myapp cowsay 'hi'
- Авторизоваться на сврере докера:
docker login -u "user" -p "pass" docker.io
- отправим образ в репозиторий:
docker push dionisvl/myapp
- Удаление образов с локальной машины:
docker rmi 97923498723fa
- Список образов на данной машине:
docker images
Dockerfile - Первое знакомство | # 4
- В любом месте создадим директорию `youtube` и файл `Dockerfile` :
FROM ubuntu
RUN apt-get update && apt-get install -y cowsay && ln -s /usr/games/cowsay /usr/bin/cowsay
ENTRYPOINT ["cowsay"]
- И его можно запускать:
docker build -t dionisvl/youtube .
https://www.youtube.com/watch?v=gir9Ay4pQU4
Докер соединение контейнеров между собой | # 5
- Внимательно читаем инструкции к выбранным для контейнерам
https://hub.docker.com/_/mariadbdocker run --name mysqlserver -e MYSQL_ROOT_PASSWORD=123456 -d mariadb
docker run --link mysqlserver:db -p 8080:8080 adminer
# где вместо mysqlserver
ставим имя нашего контейнера БД
теперь по адресу http://phpqa.ru:6080/ мы можем войти в Adminer
Docker-compose что это? Первое знакомство | №6
https://www.youtube.com/watch?v=NRcpqse2zBo&list=PLD5U-C5KK50XMCBkY0U-NLzglcRHzOwAg&index=8
- Можно проверить совместимость версий compose и docker здесь: https://docs.docker.com/compose/compose-file/compose-versioning/
- Возьмем готовый скрипт для docker-compose.yml из описания нашего выбранного контейнера:
https://hub.docker.com/_/mariadb :
version: '3.1'
services:
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
adminer:
image: adminer
restart: always
ports:
- 6080:8080
-
Перейдем в директорию где мы сохранили этот файл docker-compose.yml и попробуем его запустить:
docker compose up
-
Чтобы запустить роль в демона добавим флаг -d
docker compose up -d
-
Посмотреть список всех запущенных docker-compose:
docker-compose ps
-
Для Windows все также, но есть моменты:
чтобы узнать ip машины:docker-machine ip default
Dockerfile и docker-compose.yml больше и связь между ними | # 7
https://www.youtube.com/watch?v=OCNzafcF2Yw&list=PLD5U-C5KK50XMCBkY0U-NLzglcRHzOwAg&index=9
-
внутри docker-compose.yml должен быть один
build
либо одинimage
-
после сознания Dockerfile для каждого из службы
docker-compose build
-
docker-compose up
-
Можно объявить ТОМ при запуске контейнера при помощи флага '-v'
docker run -v /data ubuntu
-
Мы можем проверить расположение тома на файловой системе хоста при помощи inspect
docker inspect -f {{.Mounts}} имяконтейнера
-
Используя инструкцию к нашему контейнеру для БД, см. «Где хранить данные», добавлен в docker-compose параметр тома:
volumes:
- /databases:/var/lib/mysql
- Теперь удалим контейнер по имени сервиса:
docker-compose rm db
- Пересоберем контейнеры и docker-compose:
docker-compose build
- Пересоберем поднимаем конфигурацию docker-compose:
docker-compose up
- теперь наше хранилище файлов создано и работает не зависимо от того удален контейнер или нет
Докер разница между образом и контейнером | # 8
- Docker-образ - это список компонентов или рецепт по которому собирается контейнер. Эти рецепты хранятся в Docker-реестрах, как например Docker Hub и их можно скачать с помощью команды docker pull:
docker pull ubuntu
- Контейнеры - контейнеры из образованных с помощью команды docker run, а выполнив команду docker ps можно узнать, какие контейнеры в данный момент запущены
docker run -it ubuntu /bin/bash
docker ps
Docker как уменьшить размер изображения - файловая система UnionFS и слои | №9
-
Посмотреть список образов на машине:
docker images
-
Посмотреть список всех слоев населения образа:
docker history mariadb
-
Напишем новый Dockerfile в каждой команде пишем с новой строки + очистим список лишних репозиториев APT:
FROM ubuntu
MAINTAINER BWP DEVELOP <info@phpqa.ru>
RUN apt-get update
RUN apt-get install -y cowsay
RUN ln -s /usr/games/cowsay /usr/bin/cowsay
RUN rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["cowsay"]
-
Сформируем новый образ и посмотрим на размер:
docker build -t dkamanyrun .
docker images
показало 133мб -
Перепишем Dockerfile там, чтобы все команды были в одной строке:
FROM ubuntu
MAINTAINER BWP DEVELOP <info@phpqa.ru>
RUN apt-get update \
&& apt-get install -y cowsay \
&& ln -s /usr/games/cowsay /usr/bin/cowsay \
&& rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["cowsay"]
-
Сформируем новый образ и посмотрим на размер ::
docker build -t dkaonerun .
docker images
Теперь вместо 7 слоев-шагов стало 4 и показало 105 мб. - на 28 мб. меньше (!) -
также вместо образа ubuntu можно использовать debian или alpine
-
Удалить все контейнеры у которых статус = exited:
docker rm -v $(docker ps -aq -f status=exited)
-
Удалить образы:
docker rmi $(docker images -q) --force
Самый простой и минимальный запуск laravel в докере | установка laravel в docker | # 10
https://www.youtube.com/watch?v=TumfGqUf39U&feature=youtu.be&list=PLD5U-C5KK50XMCBkY0U-NLzglcRHzOwAg
- Создадим .env файл
#PATHS
DB_PATH_HOST=./databases
APP_PATH_HOST=./dka-blog
APP_PATH_CONTAINER=/var/www/html/
- Создадим файл docker-compose.yml:
version: '3'
services:
web:
build: ./web
environment:
- APACHE_RUN_USER=#1000
volumes:
- ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
ports:
- 8080:80
working_dir: ${APP_PATH_CONTAINER}
db:
image: mariadb
restart: always
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- ${DB_PATH_HOST}:/var/lib/mysql
adminer:
image: adminer
restart: always
ports:
- 6080:8080
composer:
image: composer:1.9.1
volumes:
- ${APP_PATH_HOST}:${APP_PATH_CONTAINER}
working_dir: ${APP_PATH_CONTAINER}
command: composer install
- Создадим наш Dockerfile (обязательно по тому адресу, который указан в docker-compose - build):
FROM php:7.4-apache
RUN docker-php-ext-install \
pdo_mysql \
&& a2enmod \
rewrite
// тут «a2enmod» - необходимо для работы laravel
-
В терминале откроем директорию встроенную все эти файлы (/ home / docker / laravel) и выполним
git clone https://github.com/dka-develop/dka-blog-new.git
-
Добавим путь к нашему проекту в файле .env
APP_PATH_HOST=./dka-blog-new
- Давайте запустим наш проект:
docker-compose up --build
Тут мы можем лицезреть следующий процесс:
- Установка PHP с Apache, Образ собирается из Dockerfile и добавляются пакеты
- Установка Базы данных MariaDB
- Установка Adminer PHP script для управления
- Установка Composer Пакетный менеджер
- Запуск контейнеров
- Инициализация Composer , устанавливаются зависимости для Laravel
- laravel_composer_1 exited with code 0 - значет `composer install` выполнена успешно
-
командой
docker-compose ps
проверим, чтобы наши 3 контейнера были в состоянии UP: laravel_adminer_1, laravel_db_1, laravel_web_1. -
Теперь необходимо зайти в сервис «laravel_web_1» и выполнить команду для генерации ключа.
Не завершая запущенные процессы, войдем в контейнер:docker-compose exec web bash
Сгенерируем ключ ларавел:php artisan key:generate
-
Перейдем в adminer и создадим БД для laravel:
http://phpqa.ru:6080/
Создать базу данных -> dka_blog -
Настроим ларавел в файле .env:
...
DB_HOST=db
DB_PORT=3306
DB_DATABASE=dka_blog
DB_USERNAME=root
DB_PASSWORD=123456
...
- Возвращаемся в терминал и путием перемещения БД:
php artisan migrate
- Теперь открываем ларавел, он будет на порту 8080:
http://phpqa.ru:8080/ - Ошибка
"The stream or file "/var/www/html/storage/logs/laravel.log" could not be opened: failed to open stream: Permission denied"
говорит о том что у пользователя нет доступа. - Изучив документацию https://hub.docker.com/_/php , в разделе «Запуск от имени произвольного пользователя» узнаем о том что для Apache нужно изменить настройки в файле docker-compose.yml так:
- APACHE_RUN_USER=#1000
- Остановим контейнеры
- Запустим все сервисы снова, но уже без команды --build:
docker-compose up
- Теперь открываем блог:
http://phpqa.ru:8080/public/
зарегистрировавшись переходим в админку
http: // phpqa .ru: 8080 / public / admin - Все! у нас получился минимальный набор для работы.
Докер бесконечно загружается с надписью "Docker is starting.."
- выключить докер Desktop
- в Powershell выполнить команды:
-
wsl --unregister docker-desktop wsl --unregister docker-desktop-data
Leave a reply