Понимание концепций контейнеров — Часть 2

В предыдущем посте этой серии мы экспериментировали с изоляцией файловой системы и запускали бинарные файлы Alpine Linux поверх нашей установки Ubuntu. Однако в этой установке отсутствовала некоторая конфигурация, и она все еще не завершена:

  1. DNS-разрешение не настроено должным образом
  2. не все программы были установлены
  3. Необходимые файловые системы, такие как 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.

Пока!