Hướng dẫn chạy MSSQL Server trên Windows 10 với Docker
Tags: docker
Published: 2021-05-19 08:25:09

Với sinh viên IT, **SQL Server** là công cụ không thể thiếu trong quá trình học tập. Nhưng việc cài đặt mất rất nhiều thời gian mà còn dễ xảy ra lỗi, với **Docker trên Windows 10**, ta có thể chạy **MS SQL Server 2016 Developer** với chỉ... 1 dòng lệnh.

> Lưu ý: `Microsoft SQL Server Developer` chỉ nên được dùng để **DEV** hay **TEST**, không khuyến khích sử dùng trong môi trường thực tế. 
> Nếu muốn sử dụng cho sản phẩm thực tế, hãy dùng image [Microsoft SQL Server](https://hub.docker.com/_/microsoft-mssql-server "Microsoft SQL Server")
## 1. Cài đặt Docker
Trước khi đến với bài viết, vui lòng [cài đặt Docker cho Windows 10](https://hub.docker.com/editions/community/docker-ce-desktop-windows "cài đặt Docker cho Windows 10]").

## 2. Switch to Windows containers...
Vì **MS SQL Server 2016 Developer** được xây dựng cho **Windows container**, cho nên ta phải chuyển loại containers của **Docker** sang **Windows container**.
Mở **Docker**, sau đó click chuột phải vào biểu tượng **Docker** ở dưới **System Tray** (góc dưới bên phải của màn hình).
- Nếu thấy menu `Switch to Linux containers...` thì chuyển qua bước 3.
- Nếu thấy menu `Switch to Windows containers...` thì click để chuyển sang loại container của Windows.

> Nếu gặp lỗi `Containers feature is disabled. Enable it using the PowerShell script.` thì mở **Windows PowerShell** với quyền **Administrator** lên và chạy lệnh `Enable-WindowsOptionalFeature -Online -FeatureName $("Microsoft-Hyper-V", "Containers") -All` sau đó khởi động lại máy là được.

## 3. Chạy MS SQL Server Developer

```shell
docker run -d -p 1433:1433 -e sa_password=<SA_PASSWORD> -e ACCEPT_EULA=Y microsoft/mssql-server-windows-developer
```

- Mặc định **SQL Server** được cài đặt với tên người dùng (username) để đăng nhập là **sa** (viết tắt của cụm từ "**system administrator**") là quyền cao cấp nhất của **SQL Server**, ta đặt password của user này qua tham số `sa_password`
- `SA_PASSWORD` phải đặt phức tạp tý (không phải `1`, hay `123` hay `123456`, nếu không **SQL Server** sẽ từ chối xác thực đăng nhập.
- `ACCEPT_EULA` là điều khoản sử dụng, chấp thuận bằng giá trị **Y**.

Quá trình chạy trong **lần đầu** sẽ mất rất nhiều thời gian tùy vào tốc độ mạng của bạn.

## 4. Chạy lại container cũ như thế nào?
Khi bạn khởi động lại máy hay mở lại **Docker** thì làm sao để mở lại **container** cũ để tiếp tục sử dụng để tránh việc mất đi dữ liệu?

Xem tất cả các container đang có bằng lệnh `docker ps -a`
```shell
C:\Users\TRONG>docker ps -a
CONTAINER ID   IMAGE                                      COMMAND                  CREATED       STATUS                            PORTS     NAMES
fadc83e27488   microsoft/mssql-server-windows-developer   "powershell -Command…"   4 hours ago   Exited (1073807364) 3 hours ago             ecstatic_johnson
```
Ở đây ta thấy **CONTAINER ID**: `fadc83e27488` có trạng thái là `Exited`, để chạy lại container này, ta sử dụng lệnh `docker start <CONTAINER ID>`
```shell
C:\Users\TRONG>docker start fadc83e27488
fadc83e27488
```

Vậy là xong. Hãy để lại ý kiến của bạn trong phần bình luận nhé.

**Tham khảo:**
https://hub.docker.com/r/microsoft/mssql-server-windows-developer/
https://docs.microsoft.com/en-us/virtualization/windowscontainers/quick-start/set-up-environment?tabs=Windows-10