シェル(@takasqr)のブログ

sqlserverのdockerfileを作る

1. dockerfileを作る

SQL Serverのdockerfileを作ります。

FROM mcr.microsoft.com/mssql/server

この記事を書いた人

@takasqr アプリケーション開発が大好きなエンジニア。Vue、Swift、Electrom などでアプリを作って公開している。AWS や Firebase などのクラウドサービスも好き。

作ったアプリKeyScript

2. dockerfileをビルドする

dockerfileビルドする。

docker build -t sqlserver-custom-image:0.1 .
  • 0.1パージョン番号
  • sqlserver-custom-imageイメージ名

3. 作ったイメージのコンテナを作る

SQL Serverのコンテナをビルドします。 環境変数の部分は読み替えて下さい。

docker run -e "ACCEPT_EULA=Y" -e "SA_PASSWORD=P@ssw0rd" -e "MSSQL_PID=Developer" \
   -p 1433:1433 \
   --name sqlserver-custom-container \
   -h sqlserver-hostname \
   -d sqlserver-custom-image:0.1
  • SA_PASSWORDSQL Serverのパスワード
  • sqlserver-custom-image先ほどビルドしたイメージを指定

ちなみにことの時、パスワードをちゃんと設定しないとエラーでコンテナがちゃんと起動しません。

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..

エラー:システム管理者パスワードを設定できません:パスワードの検証に失敗しました。パスワードは十分に複雑ではないため、SQLServerのパスワードポリシー要件を満たしていません。パスワードは8文字以上で、大文字、小文字、10進数、記号の4つのセットのうちの3文字が含まれている必要があります。

クイック スタート:Docker を使用して SQL Server コンテナー イメージを実行する

4. 作ったコンテナに接続する

docker exec -it sqlserver-custom-container bash

5. SQL Serverに接続する

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "P@ssw0rd"

公式情報によるとsqlcmdにパスは通ってないのでフルパスを指定する必要があります。

6. SQLを実行する

SQL Serverに接続すると、

mssql@sqlserver-hostname:/$ /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P "P@ssw0rd"
1> 
2> 
3> 
4> 

このようになるのでSQLを書いて実行します。 SQLを書き終わったら、GOと書いてエンターを押すするとSQLが実行されます。

7. テストDBの作成

CREATE DATABASE TestDB
SELECT Name from sys.Databases
6> CREATE DATABASE TestDB
7> SELECT Name from sys.Databases
8> GO
Name                                                                                                                            
--------------------------------------------------------------------------------------------------------------------------------
master                                                                                                                          
tempdb                                                                                                                          
model                                                                                                                           
msdb                                                                                                                            
TestDB                                                                                                                          

(5 rows affected)

これは、TestDBというデータベースを新たに作って、データベースの一覧を表示しています。

8. サンプルデータ作成

CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)
INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
SELECT * FROM Inventory WHERE quantity > 152;
1> SELECT Name from sys.Databases
2> CREATE TABLE Inventory (id INT, name NVARCHAR(50), quantity INT)
3> INSERT INTO Inventory VALUES (1, 'banana', 150); INSERT INTO Inventory VALUES (2, 'orange', 154);
4> GO
Name                                                                                                                            
--------------------------------------------------------------------------------------------------------------------------------
master                                                                                                                          
tempdb                                                                                                                          
model                                                                                                                           
msdb                                                                                                                            
TestDB                                                                                                                          

(5 rows affected)

(1 rows affected)

(1 rows affected)
1> SELECT * FROM Inventory WHERE quantity > 152;
2> GO
id          name                                               quantity   
----------- -------------------------------------------------- -----------
          2 orange                                                     154

(1 rows affected)

9. SQL Serverの接続を解除

QUIT