Docker Compose Sql server Создание базы данных и таблиц автоматически при запуске - PullRequest
0 голосов
/ 19 октября 2019

Я создал основной веб-API asp.net с Sql-сервером. Запустив docker compose file, мне нужно создать базу данных и таблицы. Мои решения следующие:

Dockerfile

FROM microsoft/dotnet:2.2-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 80

FROM microsoft/dotnet:2.2-sdk AS build
WORKDIR /src
COPY StarterPackMSSQL.StarterPackMSSQL.csproj StarterPackMSSQL/
RUN dotnet restore StarterPackMSSQL/StarterPackMSSQL.csproj
COPY . .
WORKDIR /src/StarterPackMSSQL
RUN dotnet build StarterPackMSSQL.csproj -c Release -o /app

FROM build AS publish
RUN dotnet publish StarterPackMSSQL.csproj -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "StarterPackMSSQL.dll"]

docker-compose.yml

version: '3.5'

networks : 
  localdev:
    name: localdev

services:
 starterpackmssql:
    image: ${DOCKER_REGISTRY-}mssql
    restart: always
    build:
      context: .
      dockerfile:StarterPackMSSQL/Dockerfile
    ports:
      - "5001:80"
    depends_on:
      - db-server
    networks:
      - localdev

  db-server:
    image: microsoft/mssql-server-linux
    container_name: db-server
    environment:
      - ACCEPT_EULA=Y
      - MSSQL_SA_PASSWORD=password123
      - MSSQL_TCP_PORT=1433

    ports:
      - "1400:1433"
    networks:
      - localdev

SQL Script

CREATE DATABASE [StarterPacksDB]
GO

USE [StarterPacksDB]
GO

/****** Object:  Table [dbo].[Users]    Script Date: 10/18/2019 10:42:39 PM ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[User](
    [id] [int] IDENTITY(1,1) NOT NULL,
    [handle] [varchar](50) NOT NULL,
 CONSTRAINT [PK_Users] PRIMARY KEY CLUSTERED 
(
    [id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO

Мне просто нужно автоматически создать базу данных и таблицы при запуске docker-compose up

И он должен работать как на Mac, так и на Windows.

1 Ответ

1 голос
/ 19 октября 2019

В случае MySQL, Postgress и т. Д. Весь образ БД поставляется с готовым скриптом точки входа, который выполняет задачу инициализации БД и т. Д., Но нет точки входа с образом док-станции MSSQL. Поэтому я рекомендую использовать официальный рекомендуемый подход, так как ваш текущий скрипт не будет работать в соответствии с вашими ожиданиями.

Но официальное изображение рекомендуется. Вы также можете использовать инструменты в скрипте entrypoint.sh для таких вещей, как:создавать базы данных или входить в систему, присоединять базы данных, импортировать данные или выполнять другие задачи настройки. Посмотрите этот пример с использованием сценария entrypoint.sh для создания базы данных, схемы и bcp в некоторых данных .

CMD точки входа, которая выполняет import-data. Сценарий sh во время выполнения, чтобы использовать sqlcmd для выполнения сценария .sql и создать базу данных и заполнить ее исходной схемой .

Теперь второе, что должно обеспечить работу вышеуказанной точки входа,Вы должны использовать обновленное и последнее рекомендованное изображение от MS. текущее изображение устарело.

microsoft/mssql-server-linux

от Microsoft • Обновлено 10 месяцев назад Устаревший SQL Server в репозитории контейнеров Linux. Подробнее см. Ниже.

Мы переходим на mcr.microsoft.com, где вы можете загрузить последние версии SQL Server 2017 и SQL Server 2019 для Linux-контейнеров. Мы больше не будем обновлять это хранилище с помощью обновлений, и в конечном итоге мы удалим все образы контейнера из этого хранилища.

Посетите нашу новую страницу Docker Hub по адресу https://hub.docker.com/r/microsoft/mssql-server

https://hub.docker.com/r/microsoft/mssql-server-linux/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...