銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

SQL Server をRHELのコンテナーで動かすDockerfileを公開しました

SQL Server on Linux がGAされたわけですが、Dockerで動かしたいとなった場合、Ubuntuベースのものしか公開されていなかったので、RHEL版のコンテナーを動かすためのDockerfileを作ってみました。

Microsoftが公開しているSQL Server on Linuxのdockerコンテナーはこれですが、Ubuntuベースのものとなっています。

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

じゃあ元のDockerfileを見て他のディストリ版を作ろうと思っても./installというフォルダの中身が公開されておらず、お手上げ状態です。

mssql-docker/Dockerfile at 1efc4cf9b78fa5fccea682f26067189660af85c8 · Microsoft/mssql-docker · GitHub

無人インストールの手順は公開されているので、これを元にDockerfileを作ろうとも考えたのですが...

docs.microsoft.com

mssql-conf を実行するとわかるのですが、GAのタイミングでmssql-confsudoコマンドを必須とするようになってしまいました*1。1,2箇所ならモンキーパッチでもあてようとおもったのですが、これスクリプトを検索すればわかるのですが、いたるところにsudoコマンドでの実行がハードコーディングされているので、ちょっとDockerfileの中でごにょごにょするのは無理がありました。

で、どうしたかというと、実はSQL Server on Linuxはmssql-confを実行せずとも環境変数を適切に設定すれば動きます。コンテナでの起動を前提に考えれば実行ユーザーもroot固定としてよいので*2、ユーザー作成なども考えなくてもよさそうです。環境変数の一覧はここに書いてあります。

docs.microsoft.com

というわけで以上を踏まえて、RHELをベースとしたdockerイメージを作るためのDockerfileを作ってみました。

github.com

RHELをベースとしたコンテナをビルドする際の一般的な注意事項として、適切なsubscriptionを持っているRHEL Serverをホストにしてdocker buildしないとパッケージのインストールでエラーになる可能性があります。また、なぜかMSSQL_LCIDの指定をしてdocker buildすると実行エラーになったので、ビルドしたコンテナを起動するときに環境変数で指定するようにしてください。

Unofficial でサポートされませんが、開発環境などでつかってみたいという場合にはぜひどうぞ。

*1:preview版ではroot権限があればsudoがなくても動いていた

*2:本当は任意のUIDで実行できるようになるのがいいのですが、そこまではまだできなそうなので