[Windows] Docker를 사용하여 호스트 환경을 더럽히지 않고 mssql-server-linux 사용

TL;DR


  • DB를 위해서만 개발 환경에 SQLServer 넣는 것은 바람직하지 않기 때문에 Docker를 사용합시다
  • 로컬 환경에는 Docker Desktop 및 visual studio code만 설치
  • mssql-server-linux의 docker-compose 샘플이 적기 때문에 기사를 썼습니다.

    참고로 한 사이트



    Microsoft 공식 리포지토리의 컨테이너 샘플
    htps : // 기주 b. 코 m / 미 c 로소 ft / sql - r ゔ ぇ r mp ぇ s / t 어 /

    작성한 샘플 리포지토리



    환경


  • Windows10
  • Docker Desktop 2.2.0.3
  • docker-compose는 Docker Desktop과 함께 제공됩니다
  • mssql-server-linux 2017-latest
  • visual studio code 1.42.1 [SQL Server (mssql)로 DB에 연결]

  • 파일


    \---mssql-server-linux-sample
        |   .gitignore
        |   db-init.sh
        |   db-init.sql
        |   docker-compose.yml
        |   Dockerfile
        |   entrypoint.sh
        |
        \---backup
                dbo.members.csv
    

    Dockerfile
    FROM microsoft/mssql-server-linux:2017-latest
    
    COPY . /usr/src/docker
    
    WORKDIR /usr/src/docker
    
    RUN chmod +x ./db-init.sh
    
    CMD /bin/bash ./entrypoint.sh
    

    docker-compose.yml
    version: "3"
    services:
        db:
            build: ./
            environment:
                SA_PASSWORD: "MssqlPass123"
                ACCEPT_EULA: "Y"
                MSSQL_AGENT_ENABLED: "true"
            ports:
                - "1433:1433"
            container_name: db1
            hostname: db1
            volumes:
                - ms-sqlserver-linux-sample-data:/var/opt/mssql
                - ./backup:/backup
    volumes:
        ms-sqlserver-linux-sample-data:
            driver: local
    

    ※MSSQL_AGENT_ENABLED를 true로 하면 SQLServer가 떨어지지 않고 계속 기동한다

    entrypoint.sh
    #start SQL Server, start the script to create/setup the DB
     ./db-init.sh & /opt/mssql/bin/sqlservr
    

    ※, DB 초기화 스크립트와 SQLServer 기동을 실시

    db-init.sh
    #start SQL Server, start the script to create/setup the DB
     #wait for the SQL Server to come up
    sleep 10s
    
    echo "running set up script"
    #run the setup script to create the DB and the schema in the DB
    /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P MssqlPass123 -d master -i db-init.sql
    

    db-init.sql
    CREATE DATABASE testdb;
    go
    
    use testdb;
    go
    
    DROP TABLE IF EXISTS members;
    GO
    
    CREATE TABLE members(
        id int identity(1,1) primary key,
        name nvarchar(32),
        birthday datetime
    );
    GO
    
    BULK INSERT members
    FROM '/usr/src/docker/backup/dbo.members.csv'
    WITH
    (
       FIELDTERMINATOR = ',',
       ROWTERMINATOR = '\n'
    );
    GO
    

    ※, DB 작성, 테이블 작성, 데이터 투입을 실시. 데이터는 볼륨에 등록되어 있습니다.

    docker-compose 빌드



    컨테이너 빌드 실시
    docker-compose build
    

    docker-compose 시작



    빌드된 컨테이너를 백그라운드에서 시작
    docker-compose up -d
    

    docker-compose 종료



    컨테이너 초기화 및 종료
    docker-compose down
    

    DB에 연결





    ※컨테이너가 기동중에 이하의 순서를 실시
    1. SQL Server (mssql)를 Visual Studio 코드에 설치하면 사이드 바에 DB 아이콘이 표시되므로 선택
    2. COONNECTIONS에 커서를 맞추면 「+」아이콘이 나오므로 누르기
    3. servername:localhost
    4. Database Name:testdb
    5. SQL Login 선택
    6. 사용자 이름: sa
    7. 암호: MssqlPass123
    8. Save Password: No
    9. Display Name: 모든 이름

    이제 DB에 연결할 수 있으므로 dbo.members를 선택하여 데이터가 등록되었는지 확인합니다.



    이상

    좋은 웹페이지 즐겨찾기