체인의정석

docker에 DB 설치하기 (2) - MS SQL 본문

개발/docker & linux

docker에 DB 설치하기 (2) - MS SQL

체인의정석 2021. 8. 9. 17:06
728x90
반응형

oracle 설치 후 ms sql도 도커로 똑같이 설치 시작!

 

이 블로그를 보고 따라해보기로 했다.

https://oingdaddy.tistory.com/285

 

Docker 환경에서 MSSQL 설치 및 기본설정하기

빠르게 MSSQL 환경을 구성해야 할 일이 생겼다. Docker가 있어서 이제 이런건 정말 간단하게 해결할 수 있다. Docker를 설치하는것은 이 글을 참조하도록 하자. Docker Windows 에 설치하기 지난번에는 linu

oingdaddy.tistory.com

 

(base) lambda256@ethan ~ % docker pull mcr.microsoft.com/mssql/server:2019-latest
2019-latest: Pulling from mssql/server
a31c7b29f4ad: Extracting [===============================================>   ]  27.13MB/28.57MB

또 기다려 준다.

비밀번호 1234, 이름 mssql로 테이블 생성 완료

(base) lambda256@ethan ~ % docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=1234’ -p 1433:1433 --name mssql -d mcr.microsoft.com/mssql/server:2019-latest
quote>

그러나 이 뒤로 진행이 되지 않는다. 

mac을 위한 설치 방법으로 다시 진행해보도록 하겠다.

 

https://www.twilio.com/blog/using-sql-server-on-macos-with-docker

 

Using SQL Server on macOS with Docker

Learn how to use SQL Server on macOS with Docker. We'll show you all the tutorials and examples you need to get started.

www.twilio.com

(base) lambda256@ethan ~ % docker run -d --name sql_server -e 'ACCEPT_EULA=Y' -e '1234' -p 1433:1433 mcr.microsoft.com/mssql/server:2019-latest

위 명령어로 실행을 하니 진행이 되었다.

근데 다시 살펴보니 비밀번호 형식이 잘못되었다.

초기화를 먼저 해주고

docker ps -a
docker stop sql_server
docker rm sql_server

다시 SA_PASSWORD를 넣어서 띄워준다.

(base) lambda256@ethan ~ % docker run -d --name sql_server -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=1234' -p 1433:1433 mcr.microsoft.com/mssql/server:2019-latest

블로그에 친절하게 파라미터 설명도 써져 있어서 한번 읽고 넘어갔다.

 

  • -d will launch the container in "detached" mode and is optional. This means that containers will run in the background and you can close the terminal window.
  • --name sql_server will assign a name to the container and is optional, but recommended for easier management!
  • -e will allow you to set environment variables:
    • 'ACCEPT_EULA=Y' SQL Server requires the user to accept the "End User Licence Agreement" or EULA. The Y here indicates acceptance.
    • 'SA_PASSWORD=someThingComplicated1234' is a required parameter for SQL Server. This is the System Administrator password. See the note below on password strength.
  • -p 1433:1433 will map the local port 1433 to port 1433 on the container. Port 1433 is the default TCP port that SQL Server will listen on.

-d는 백그라운드에서 돌리는것, --name은 도커 컨테이너 이름, accept_eula 는 라이선스 동의, sa_password 는 sql 서버의 비밀번호 파라미터, -p 포트번호:포트번호는 포트번호 설정

 

이제 테이블 생성을 테스트 하기 위하여 sql cli tool을 써보도록 하겠다.

sql-cli 먼저 설치 진행

(base) lambda256@ethan ~ % npm install -g sql-cli

그런 후에 아까 설정한 SA_PASSWORD값을 넣고 로그인 시도 (여기선 1234가 비밀번호였다.)

(base) lambda256@ethan ~ % mssql -u sa -p 1234
Connecting to localhost...
Error: Failed to connect to localhost:1433 - connect ECONNREFUSED 127.0.0.1:1433

비밀번호가 틀린건 아닌데 , 왜이럴까..  ㅠㅠ

이럴 땐 도커 프로세스를 확인해 본다.

docker ps -a
docker logs -f mssql

도커가 꺼져있다. 무슨 에러인지 위의 명령어를 쳐서 로그를 살펴보면

2021-08-09 06:27:27.71 spid12s     Clearing tempdb database.
2021-08-09 06:27:27.72 spid25s     ERROR: Unable to set system administrator password: Password validation failed. The password does not meet SQL Server password policy requirements because it is too short. The password must be at least 8 characters..
2021-08-09 06:27:27.73 spid25s     An error occurred during server setup. See previous errors for more information.
2021-08-09 06:27:27.73 spid25s     SQL Trace was stopped due to server shutdown. Trace ID = '1'. This is an informational message only; no user action is required.

비밀번호가 너무 짧으니 8자 이상으로 하라고 한다. mssql에는 비밀번호 글자가 8개 이하면 에러가 난다고 하니까 비밀번호를 

qwer12345로 바꿔봐야겠다.

 

일단 이미 만든 db는 비밀번호가 1234니까 지워주고 다시 띄우자

(base) lambda256@ethan ~ % docker run -d --name sql_server -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=qwer12345' -p 1433:1433 mcr.microsoft.com/mssql/server:2019-latest

다시 에러가 나서 보니

2021-08-09 06:31:44.12 spid26s     ERROR: Unable to set system administrator password: Password validation failed. The password does not meet SQL Server password policy requirements because it is not complex enough. The password must be at least 8 characters long and contain characters from three of the following four sets: Uppercase letters, Lowercase letters, Base 10 digits, and Symbols..

대,소문자,숫자,특수문자 중 3개의 조합도 써야한다고 한다.

 

qwer1234! 로 바꿔서 다시시도

(base) lambda256@ethan ~ % docker run -d --name sql_server -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=qwer1234!' -p 1433:1433 mcr.microsoft.com/mssql/server:2019-latest

(base) lambda256@ethan ~ % mssql -u sa -p qwer1234!
Connecting to localhost...done

sql-cli version 0.6.2
Enter ".help" for usage hints.
mssql>

드디어 성공! mssql에서 비밀번호는 상당히 복잡하게 만들어야 하나보다.

 

이제 테이블 생성이 되는지 테스트를 해보자

Error: The size (65535) given to the column '칼럼이름' exceeds the maximum allowed for any data type (8000).

이번에도 당연히 사이즈 에러가 나온다. 

https://www.promotic.eu/en/pmdoc/Subsystems/Db/MsSQL/DataTypes.htm

 

Data types in MsSQL Server

float(n) 4-8 Numeric data type with float precision, where n is the number of mantis bits (1-24, accuracy of 7 digits, size of 4 bytes and 25-53, accuracy of 15 digits and size of 8 bytes).

www.promotic.eu

사이즈 최대치를 보자면 text를 쓰면 되지 않을까?

nvarchar의 사이즈를 키우는 것이니 ntext로 생성하기로 하였다.

nvarchar(max)를 쓰라는 답변이 많았는데 찾아보니 이건 2GB까지 지원이 된다고 한다.

 

https://stackoverflow.com/questions/11131958/what-is-the-maximum-characters-for-the-nvarcharmax/11131977

 

What is the maximum characters for the NVARCHAR(MAX)?

I have declared a column of type NVARCHAR(MAX) in SQL Server 2008, what would be its exact maximum characters having the MAX as the length?

stackoverflow.com

2GB = 2147483648 byte이므로, 충분한것 같다.

따라서 nvarchar(max)로 생성해주는것으로 하겠다.

 

마지막으로 postgreSQL이 남았는데 이 부분은 다른 급한 프로젝트가 생겨서 나중에 이어서 할 것 같다.

728x90
반응형
Comments