Как создать 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" ]

    Как собрать и запустить образ

    Выполните следующие шаги:

    1. Поместите Dockerfile и файл fff.db в одну директорию.
    2. Соберите образ: docker build -t sqlite-demo .
    3. Запустите контейнер: 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.

    Часто задаваемые вопросы