Docker. Сборка образов, запуск контейнеров

Что такое образы и контейнеры?

Образы докер мы билдим (собираем) из Dockerfile’ов. Это образы могут хранится у вас локально или на внешнем сервере, таком, как docker hub.

На основе образа можно создать контейнер, который уже непосредственно выполняет что-то (например хостит ваш сайт), либо можно использовать контейнер как временную виртуальную среду, т.е. зайти, что-то поделать, выйти и создать новый чистый.

Проще будет показать на примере

Собираем Docker образ

Подключаемся к убунте, убеждаемся, что у нас есть Dockerfile из прошлой статьи Выполняем команды:

ls
  • Видим наш Dockerfile
docker build . -t lol

Здесь мы запускаем сборку с помощью докер билд.

Точка указывает на каталог сборки (текущий каталог), -t позволяет задать имя lol итоговому образу.

Cмотрим образы которые есть в системе:

docker images 

40 sec

Видим 2 образа lol и nginx. Nginx мы использовали как базовый образ в поле FROM. А lol это наш образ, где мы изменили только переменую.

Давайте попробуем запустить контейнер на основе нашего образа

Запуск контейнера

В команде ниже:

--rm - Удалять контейнер, после того как он завершит работу

-p 80:80 - Мапинг портов. Так докер скажет вашей системе, что трафик должен на 80 порт ходить в контейнер, где будет nginx (на основе которого мы делали наш образ) слушать 80 порт (по умолчанию).

-d - Говорим контейнеру запуститься в фоне, чтобы отпустил консоль.

docker run --rm -d -p 80:80 lol

Запускаем и проверяем:

curl localhost

Ответ должен быть таким:

40 sec

Если вы все делали по моим статьям, то у вас сайт должен быть доступен со всей локальной сети, т.е. открываться по IP адресу вашей машины с любого устройства, которое подключено к вашему Wi-Fi или по Ethernet кабелю к вашему роутеру.

То есть я просто ввожу IP адрес виртуалки в браузере и попадаю на дефолтный сайт Nginx’а:

40 sec

Остановка контейнера

Смотрим все работающие контейнеры:

docker ps

40 sec

docker kill 7e1fd4198f3e 
  • Убиваем по id, достаточно ввести первые пару символов из id, например docker kill 7e)

Очистка всего

  • docker ps -a (покажет вам все контейнеры, а не только запущеные)
  • docker volume prune (удалит все вольюмы)
  • docker network prune (удалит все сети)
  • docker system prune -a (удалит все что можно)