Как создать Docker-образ с предустановленной SQLite и базой данных
Сборка Docker-контейнера с СУБД SQLite - частый запрос при разработке и тестировании. В этой статье разберём корректный Dockerfile и объясним, почему ваш первый вариант не работал.
Типичная ошибка в исходном Dockerfile
Вы использовали команду CMD [ "sqlite3.exe C:\\Users\\HP\\Downloads\\fff.db", ".tables" ]. Вот основные проблемы:
- Путь Windows в Linux-контейнере: образ на базе Alpine Linux не понимает
C:\Users\.... Внутри контейнера файловая система Linux, поэтому используйте абсолютные пути вроде/app/fff.db. - Неверный синтаксис CMD: CMD в форме exec ожидает отдельные аргументы, а не одну строку. Правильно:
CMD [ "sqlite3", "/app/fff.db", ".tables" ]. - Отсутствие копирования БД: файл
fff.dbнужно явно скопировать в образ черезCOPY, или создать его во время сборки.
Правильный Dockerfile для SQLite
Ниже приведён рабочий пример, который создаёт образ Alpine с SQLite, копирует файл базы данных и запускает проверку таблиц при старте контейнера.
FROM alpine:latest
# Устанавливаем SQLite
RUN apk add --no-cache sqlite
# Создаём рабочую директорию
WORKDIR /app
# Копируем файл базы данных из локальной папки
COPY fff.db .
# При запуске контейнера выполняем команду sqlite3 для вывода списка таблиц
CMD [ "sqlite3", "/app/fff.db", ".tables" ]Как собрать и запустить образ
Выполните следующие шаги:
- Поместите Dockerfile и файл
fff.dbв одну директорию. - Соберите образ:
docker build -t sqlite-demo . - Запустите контейнер:
docker run --rm sqlite-demo
В выводе вы увидите список таблиц вашей базы данных. Если файл fff.db ещё не существует, создайте его заранее командой sqlite3 fff.db "CREATE TABLE test(id INT);".
Создание БД прямо в Dockerfile
Если вы хотите, чтобы образ создавал базу данных автоматически, используйте RUN во время сборки:
FROM alpine:latest
RUN apk add --no-cache sqlite
WORKDIR /app
# Создаём БД и таблицу
RUN sqlite3 /app/myapp.db "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT);"
CMD [ "sqlite3", "/app/myapp.db", ".tables" ]Этот образ при запуске выведет таблицу users.
Советы по оптимизации образа
- Используйте
--no-cacheдля уменьшения размера слоя. - Для минимизации веса образа можно взять
alpine:3.18илиscratchсо статически скомпилированным sqlite3. - Не храните большие файлы БД в образе - лучше монтировать их через
docker run -v.