Install SQL Server 2019 CTP3.2 (RHEL) on Docker 

# はじめに

SQL Server 2017より、SQL Server on Linuxが登場し、コンテナ環境でSQL Serverが利用できるようになりました。ただし、これは Ubuntu ベースのコンテナのみの提供であり、RHELベースのコンテナがほしいユーザーもいたかと思います。

**SQL Server 2019**からは、現行のUbuntuベースに加え、新たに`RHELベースのコンテナも利用できるようになりました。`そのため、今回はRHELベースでのSQL ServerコンテナをDockerにてインストールしてみようと思います。

MS公式ドキュメントは [こちら](https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-configure-docker?view=sql-server-linux-ver15#rhel) を参照してください。
<img width="811" alt="スクリーンショット 2019-08-12 14.49.21.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/cf17e9ce-0c21-7236-1d8d-339409752ce4.png">

また、Docker Hubは [こちら](https://hub.docker.com/_/microsoft-mssql-server?tab=description) です。参考にしてください。
<img width="1440" alt="スクリーンショット 2019-08-12 15.01.42.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/951f8f00-02b8-36be-aeb4-e1a1bb0e9f33.png">

# 環境

今回は、以下の環境でインストールを実施しています。

```
- OS: macOS Mojave 10.14.6
- Docker Desktop: 2.1.0.0 (36874)
- Docker Engine: 19.03.1
- Docker Compose: 1.24.1
```

また、インストールしたSQL Serverコンテナのバージョンは、`2019-CTP3.2`です。
※2019/8/12現在にて公開されている、SQL Server 2019の最新バージョンです。これは、GA\(General Availability\)されているものではありません。

# インストール

Yamlファイルは、[GitHub](https://github.com/ymasaoka/docker-mssql)上でも公開しています。面倒な方はこちらからYamlファイルを取得してください。

```yaml:docker-compose.yaml
version: '3'

services:
  mssql:
    image: mcr.microsoft.com/mssql/rhel/server:2019-CTP3.2
    container_name: 'mssql2019-ctp32-rhel'
    hostname: 'localhost'
    environment:
      - MSSQL_SA_PASSWORD=<your_strong_password>
      - ACCEPT_EULA=Y
      # - MSSQL_PID=<your_product_id> # default: Developer
      # - MSSQL_PID=Express
      # - MSSQL_PID=Standard
      # - MSSQL_PID=Enterprise
      # - MSSQL_PID=EnterpriseCore
    ports:
      - 1433:1433
    # volumes: # Mounting a volume does not work on Docker for Mac
    #   - ./mssql/log:/var/opt/mssql/log
    #   - ./mssql/data:/var/opt/mssql/data
```

- `MSSQL_SA_PASSWORDの<your_strong_password>`は、**任意の強力なパスワードに書き換え**てください。
- MSSQL_PIDは、指定しない場合はデフォルトで開発者モード\(Developer Edition\)で起動します。SQL Server 2019は2019/8/12現在、GAされていないので、こちらは指定しなくても問題無いかと思います。\(Developer Editionなどでコンテナを起動すると、起動時のログ内にて有効期限のようなものが表示されます\)
- `Docker for Mac`では、Volumesのマウントを指定すると起動時にエラーになるため、**Volumesはコメントアウト**してください。\(Known Issuesとして報告されています\)

# コンテナ起動

`docker-compose up -d`にて、コンテナを起動してください。

# 接続

`docker-compose logs -f`でログを表示し、以下の内容が表示されれば、SQL Serverに接続可能です。
sqlcmdやSSMS、Azure Data Studioを使用して、環境にアクセスできることを確認してください。

```bash
2019-08-12 05:09:04.14 spid23s     Server is listening on [ ::1 <ipv6> 1431].
2019-08-12 05:09:04.14 spid23s     Server is listening on [ 127.0.0.1 <ipv4> 1431].
2019-08-12 05:09:04.16 spid23s     SQL Server is now ready for client connections. This is an informational message; no user action is required.
```

## sqlcmd

SQL Serverのコンテナに入り、sqlcmdを起動して、SQL Serverに接続できます。
`docker ps`でコンテナIDを確認します。

```bash
$ docker ps
CONTAINER ID        IMAGE                                             COMMAND                  CREATED             STATUS              PORTS                    NAMES
980e6adccd38        mcr.microsoft.com/mssql/rhel/server:2019-CTP3.2   "/opt/mssql/bin/sqls…"   2 hours ago         Up 16 minutes       0.0.0.0:1433->1433/tcp   mssql2019-ctp32-rhel
```

`docker exec`でコンテナにログインします。

```bash
$docker exec -it 980e6adccd38 "bash"
```

コンテナ内に入ったら、sqlcmdを起動して、SQL Serverにログインします。
`<YourPassword>`は、**MSSQL_SA_PASSWORDで指定した値に書き換え**てください。
sqlcmdが起動したら、接続成功です。

```bash
[root@localhost /]# /opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P '<YourPassword>'
1>
```

## SSMS

今回はMac環境での実行のため、SSMSは利用できないので実施しません。
接続のための入力値などは、[Azure Data Studio](#azure-data-studio)の欄を参考にしてください。

## Azure Data Studio

Connection Detailsの欄を参考に、値を入力してください。
入力内容に問題がなければ、Connectボタン押下にて、SQL Serverに接続できます。

<img width="1022" alt="スクリーンショット 2019-08-12 16.02.01.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/348116/41d9e7cd-f34a-a7fa-125c-271fa54920ad.png">


# 関連リンク

- [Add AdventureWorks to SQL Server 2019 RC1 (RHEL) on Docker](https://qiita.com/ymasaoka/items/69503b168c917800aa51)


# 参考情報

- [Docker 上で SQL Server コンテナー イメージを構成する](https://docs.microsoft.com/ja-jp/sql/linux/sql-server-linux-configure-docker?view=sql-server-linux-ver15#rhel) - Microsoft Docs