Docker. Сборка образов, запуск контейнеров
Что такое образы и контейнеры?
Образы докер мы билдим (собираем) из Dockerfile’ов. Это образы могут хранится у вас локально или на внешнем сервере, таком, как docker hub.
На основе образа можно создать контейнер, который уже непосредственно выполняет что-то (например хостит ваш сайт), либо можно использовать контейнер как временную виртуальную среду, т.е. зайти, что-то поделать, выйти и создать новый чистый.
Проще будет показать на примере
Собираем Docker образ
Подключаемся к убунте, убеждаемся, что у нас есть Dockerfile из прошлой статьи Выполняем команды:
ls
- Видим наш Dockerfile
docker build . -t lol
Здесь мы запускаем сборку с помощью докер билд.
Точка указывает на каталог сборки (текущий каталог), -t позволяет задать имя lol итоговому образу.
Cмотрим образы которые есть в системе:
docker images
Видим 2 образа lol и nginx. Nginx мы использовали как базовый образ в поле FROM. А lol это наш образ, где мы изменили только переменую.
Давайте попробуем запустить контейнер на основе нашего образа
Запуск контейнера
В команде ниже:
--rm - Удалять контейнер, после того как он завершит работу
-p 80:80 - Мапинг портов. Так докер скажет вашей системе, что трафик должен на 80 порт ходить в контейнер, где будет nginx (на основе которого мы делали наш образ) слушать 80 порт (по умолчанию).
-d - Говорим контейнеру запуститься в фоне, чтобы отпустил консоль.
docker run --rm -d -p 80:80 lol
Запускаем и проверяем:
curl localhost
Ответ должен быть таким:
Если вы все делали по моим статьям, то у вас сайт должен быть доступен со всей локальной сети, т.е. открываться по IP адресу вашей машины с любого устройства, которое подключено к вашему Wi-Fi или по Ethernet кабелю к вашему роутеру.
То есть я просто ввожу IP адрес виртуалки в браузере и попадаю на дефолтный сайт Nginx’а:
Остановка контейнера
Смотрим все работающие контейнеры:
docker ps
docker kill 7e1fd4198f3e
- Убиваем по id, достаточно ввести первые пару символов из id, например docker kill 7e)
Очистка всего
- docker ps -a (покажет вам все контейнеры, а не только запущеные)
- docker volume prune (удалит все вольюмы)
- docker network prune (удалит все сети)
- docker system prune -a (удалит все что можно)