Понимание концепций контейнеров — Часть 2
В предыдущем посте этой серии мы экспериментировали с изоляцией файловой системы и запускали бинарные файлы Alpine Linux поверх нашей установки Ubuntu. Однако в этой установке отсутствовала некоторая конфигурация, и она все еще не завершена:
- DNS-разрешение не настроено должным образом
- не все программы были установлены
- Необходимые файловые системы, такие как proc и dev, не монтируются, и это ограничивает функциональность некоторых инструментов, таких как ps.
В этом посте мы продолжим настраивать нашу недавно созданную среду Alpine.
Составление рецепта
Очень важно следить за тем, что мы делаем, поэтому мы запишем рецепт. этот рецепт будет использоваться в случае, если мы захотим воссоздать точное окружение с нуля.
Создайте файл с именем container_recipe.sh:
touch container_recipe.sh chmod +x container_recipe.sh
Скачиваем базу rootfs
Чтобы начать рецепт, давайте загрузим образ rootfs, который мы скачали в предыдущем посте.
#!/bin/sh wget https://dl-cdn.alpinelinux.org/alpine/v3.17/releases/x86_64/alpine-minirootfs-3.17.3-x86_64.tar.gz mkdir ~/alpine_rootfs tar -xvf alpine-minirootfs-3.17.3-x86_64.tar.gz -C ~/alpine_rootfs cd ~/alpine_rootfs
Настройка конфигурации преобразователя DNS
Чтобы сделать среду пригодной для использования, мы добавим в нее статическую конфигурацию преобразователя DNS.
echo nameserver 8.8.8.8 > /etc/resolv.conf
Поддержание среды в актуальном состоянии и установка дополнительного программного обеспечения
В этом разделе мы удостоверимся, что среда обновлена, а также установим bash и NodeJS, которые пригодятся нам в последующих сообщениях.
apk update apk add bash apk add nodejs npm
Составление полного рецепта
Мы завершили настройку базовой среды!
Это сценарий, который мы создали:
#!/bin/sh wget https://dl-cdn.alpinelinux.org/alpine/v3.17/releases/x86_64/alpine-minirootfs-3.17.3-x86_64.tar.gz mkdir ~/alpine_rootfs tar -xvf alpine-minirootfs-3.17.3-x86_64.tar.gz -C ~/alpine_rootfs cd ~/alpine_rootfs echo nameserver 8.8.8.8 > /etc/resolv.conf apk update apk add bash apk add nodejs npm
Если вы раньше использовали Docker, скрипт может вам что-то напомнить. Этот рецепт — самодельный аналог Dockerfile. Давайте переведем наш рецепт в рецепт Dockerfile:
# wget https://dl-cdn.alpinelinux.org/alpine/v3.17/releases/x86_64/alpine-minirootfs-3.17.3-x86_64.tar.gz # mkdir ~/alpine_rootfs # tar -xvf alpine-minirootfs-3.17.3-x86_64.tar.gz -C ~/alpine_rootfs # cd ~/alpine_rootfs FROM alpine:3.17.3 # echo nameserver 8.8.8.8 > /etc/resolv.conf RUN echo nameserver 8.8.8.8 > /etc/resolv.conf # apk update # apk add bash # apk add nodejs npm RUN apk update RUN apk add bash RUN apk add nodejs npm
Заканчивать
В этом посте мы настроили контейнер и, что более важно, мы создали способ воспроизвести эту точную конфигурацию контейнера. Мы узнали о необходимости Dockerfile.
В следующий раз мы рассмотрим другую концепцию, представленную в Docker.
Пока!