美文网首页菜鸟学编程Docker容器
How to Setup Linux Version of MS

How to Setup Linux Version of MS

作者: 菜鸟飞不动 | 来源:发表于2019-04-05 00:02 被阅读1次
    mssql server linux docker This article explains how to setup and run Microsoft SQL server on containerised Linux Operating System. I will use the image available on Docker Hub to run a Docker container. An earlier version of SQL Server is meant to run on Windows OS. SQL Server 2017 CTP 2.1 run Linux based OS as well. Microsoft also published docker images which are having preinstalled mysql-server for Linux and Windows containers. We will talk about installing mysql-server on linux based container OS.

    There are few minimum requirements for using microsoft/mssql-server-linux docker image which are listed below:

    • Install Docker Engine 1.8 or higher
    • Minimum of 4 GB of disk space
    • Minimum of 4 GB of RAM
    • You need to set a strong mssql admin password which should be at least 8 characters including uppercase, lowercase letters, base-10 digits and/or non-alphanumeric symbols.

    How to create mssql-server-linux Docker container

    To create a docker container which is having mssql-server we will have to run below command which will download microsoft/mssql-server-linux (if not already present on the machine) and create a container based on it.

    Before that, I will show you some docker commands.

    To check if any docker container is running:

    BANL141cc14d1:~ ngupta9$ docker ps
    
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
    
    BANL141cc14d1:~ ngupta9$
    

    It means that there is no container running at the moment.

    To check all the containers on the machine (not necessarily in running state):

    BANL141cc14d1:~ ngupta9$ docker ps -a
    
    CONTAINER ID        IMAGE                                   COMMAND             CREATED             STATUS                    PORTS                                          NAMES
    
    bec19ccd48af        coolnicks/qbdt-dashboard:ubuntu-14.04   "/bin/bash"         12 weeks ago        Exited (0) 12 weeks ago   0.0.0.0:8880->80/tcp, 0.0.0.0:8881->8000/tcp   QBDT-Dashboard
    
    6d0c74506404        ubuntu:14.04                            "/bin/bash"         12 weeks ago        Exited (0) 12 weeks ago                                                  qbdt-dashboard
    
    7b667349c0c3        python:2.7-wheezy                       "python2"           12 weeks ago        Exited (0) 12 weeks ago                                                  python-2.7
    
    22dc8a99c427        coolnicks/ansible:ubuntu1404-nginx      "/bin/bash"         3 months ago        Exited (0) 3 months ago                                                  my_ubuntu_nginx_container
    
    BANL141cc14d1:~ ngupta9$
    

    This shows that there are 4 containers present on the system and in exited state. You can also see the docker image on which they are based. More than 1 container can be based on a single docker image.

    Similarly, you can check the docker images present on your machine.

    BANL141cc14d1:~ ngupta9$ docker images
    
    REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
    
    coolnicks/qbdt-dashboard      ubuntu-14.04        89faaa2ecceb        12 weeks ago        936.1 MB
    
    python                        2.7-wheezy          97f122a59c01        3 months ago        530.6 MB
    
    ubuntu                        14.04               7c09e61e9035        3 months ago        188 MB
    
    coolnicks/ansible             ubuntu1404-nginx    b4dcce787cd4        3 months ago        329 MB
    
    jenkins                       latest              e11ceb27c34e        5 months ago        714.6 MB
    
    ansible/ubuntu14.04-ansible   stable              1526eaefd882        20 months ago       287.4 MB
    
    BANL141cc14d1:~ ngupta9$
    

    These are the images present on the machine. microsoft/mssql-server-linux image is not already present. We will run the command to create a container based on microsoft/mssql-server-linux. Docker engine will check if this image is present on the machine or not. If not then it will download the image on the machine and create a container based on this image. From next time onwards it will not download the image if you want to create a mssql-server-linux container. It will use the already downloaded image.

    BANL141cc14d1:~ ngupta9$ docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=@MyMSSQLDocker112' -p 1433:1433 -d microsoft/mssql-server-linux
    
    Unable to find image 'microsoft/mssql-server-linux:latest' locally
    
    latest: Pulling from microsoft/mssql-server-linux
    
    aed15891ba52: Pull complete
    
    773ae8583d14: Pull complete
    
    d1d48771f782: Pull complete
    
    cd3d6cd6c0cf: Pull complete
    
    8ff6f8a9120c: Pull complete
    
    1fd7e8b10447: Pull complete
    
    bd485157db89: Pull complete
    
    273a1970ce9c: Pull complete
    
    67fbf3e59574: Pull complete
    
    4c0c60131530: Pull complete
    
    Digest: sha256:604d27fe5d3d9b4434fb1657e9bf4f2c2bf55ea9bd29dc0cb3660d84bc6f56a8
    
    Status: Downloaded newer image for microsoft/mssql-server-linux:latest
    
    0cebc8c5f887c237007bb099e2e93012ac8a4746b275bf078eb881b027ba2d3c
    
    BANL141cc14d1:~ ngupta9$
    
    BANL141cc14d1:~ ngupta9$ docker images
    
    REPOSITORY                     TAG                 IMAGE ID            CREATED             SIZE
    
    microsoft/mssql-server-linux   latest              5985832855cf        4 weeks ago         1.382 GB
    
    coolnicks/qbdt-dashboard       ubuntu-14.04        89faaa2ecceb        12 weeks ago        936.1 MB
    
    python                         2.7-wheezy          97f122a59c01        3 months ago        530.6 MB
    
    ubuntu                         14.04               7c09e61e9035        3 months ago        188 MB
    
    coolnicks/ansible              ubuntu1404-nginx    b4dcce787cd4        3 months ago        329 MB
    
    jenkins                        latest              e11ceb27c34e        5 months ago        714.6 MB
    
    ansible/ubuntu14.04-ansible    stable              1526eaefd882        20 months ago       287.4 MB
    
    BANL141cc14d1:~ ngupta9$
    
    BANL141cc14d1:~ ngupta9$ docker ps -a
    
    CONTAINER ID        IMAGE                                   COMMAND                  CREATED             STATUS                     PORTS                                          NAMES
    
    0cebc8c5f887        microsoft/mssql-server-linux            "/bin/sh -c /opt/mssq"   5 minutes ago       Exited (1) 5 minutes ago                                                  tender_saha
    
    bec19ccd48af        coolnicks/qbdt-dashboard:ubuntu-14.04   "/bin/bash"              12 weeks ago        Exited (0) 12 weeks ago    0.0.0.0:8880->80/tcp, 0.0.0.0:8881->8000/tcp   QBDT-Dashboard
    
    6d0c74506404        ubuntu:14.04                            "/bin/bash"              12 weeks ago        Exited (0) 12 weeks ago                                                   qbdt-dashboard
    
    7b667349c0c3        python:2.7-wheezy                       "python2"                12 weeks ago        Exited (0) 12 weeks ago                                                   python-2.7
    
    22dc8a99c427        coolnicks/ansible:ubuntu1404-nginx      "/bin/bash"              3 months ago        Exited (0) 3 months ago                                                   my_ubuntu_nginx_container
    
    BANL141cc14d1:~ ngupta9$
    

    You can see that it has downloaded the image and created a container with container ID 0cebc8c5f887c237007bb099e2e93012ac8a4746b275bf078eb881b027ba2d3c or 0cebc8c5f887.

    Sometimes you may face an issue where you will get error “This program requires a machine with at least 3250 megabytes of memory.”

    BANL141cc14d1:~ ngupta9$ docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=@MyMSSQLDocker112' -p 1433:1433 microsoft/mssql-server-linux
    
    sqlservr: This program requires a machine with at least 3250 megabytes of memory.
    

    So, you will have to allocate ~4GB RAM to docker container in the command line. In some cases even if you are allocating memory to docker container but it will fail with the same error. In that case you will have to check the memory allocated to Docker and make it 4GB. Generally, it is seen in Mac (You can change the allocated RAM in preference section under docker).

    BANL141cc14d1:~ ngupta9$ docker run --memory 4096m -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=@MyMSSQLDocker112' -p 1433:1433 -d microsoft/mssql-server-linux
    
    300fb0551542ca1fe9ed0c021980ed3ad61c788ca6dae66147e20598e45e6c07
    
    
    
    BANL141cc14d1:~ ngupta9$ docker ps
    
    CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
    
    300fb0551542        microsoft/mssql-server-linux   "/bin/sh -c /opt/mssq"   4 seconds ago       Up 3 seconds        0.0.0.0:1433->1433/tcp   pensive_roentgen
    
    BANL141cc14d1:~ ngupta9$
    

    Now you can connect with the MsSql server running on docker container and perform database operations using below commands:

    BANL141cc14d1:~ ngupta9$ docker exec -it 300fb0551542 /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P @MyMSSQLDocker112
    
    1> SELECT Name from sys.Databases;
    
    2> GO
    
    Name
    
    --------------------------------------------------------------------------------------------------------------------------------
    
    master
    
    tempdb
    
    model
    
    msdb
    
     
    
    (4 rows affected)
    
    1> CREATE DATABASE testdb;
    
    2> GO
    
    1>
    
    1>
    
    1> USE testdb;
    
    2> GO
    
    Changed database context to 'testdb'.
    
    1>
    
    1> CREATE TABLE inventory (id INT, name NVARCHAR(50), quantity INT);
    
    2> GO
    
    1> INSERT INTO inventory VALUES (1, 'banana', 150);
    
    2> INSERT INTO inventory VALUES (2, '', 154);
    
    3> GO
    
     
    
    (1 rows affected)
    
     
    
    (1 rows affected)
    
    1> SELECT * FROM inventory WHERE quantity > 152;
    
    2> GO
    
    id          name                                               quantity
    
    ----------- -------------------------------------------------- -----------
    
    2                                                      154
    
     
    
    (1 rows affected)
    
    1>
    
    1> SELECT * FROM inventory WHERE quantity > 150;
    
    2> GO
    
    id          name                                               quantity
    
    ----------- -------------------------------------------------- -----------
    
    2                                                      154
    
     
    
    (1 rows affected)
    
    1>
    
    1> SELECT * FROM inventory WHERE quantity > 149;
    
    2> GO
    
    id          name                                               quantity
    
    ----------- -------------------------------------------------- -----------
    
    1 banana                                                     150
    
    2                                                      154
    
     
    
    (2 rows affected)
    
    1> QUIT
    
    BANL141cc14d1:~ ngupta9$
    

    If you want to go inside the container in interactive mode and run command then you can do like this:

    BANL141cc14d1:~ ngupta9$ docker ps
    
    CONTAINER ID        IMAGE                          COMMAND                  CREATED             STATUS              PORTS                    NAMES
    
    300fb0551542        microsoft/mssql-server-linux   "/bin/sh -c /opt/mssq"   15 minutes ago      Up 15 minutes       0.0.0.0:1433->1433/tcp   pensive_roentgen
    
    BANL141cc14d1:~ ngupta9$ docker exec -it 300fb0551542 bash
    
    root@300fb0551542:/# pwd
    
    /
    
    root@300fb0551542:/# cd
    
    root@300fb0551542:~# pwd
    
    /root
    
    root@300fb0551542:~# which sqlcmd
    
    root@300fb0551542:~# /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P @MyMSSQLDocker112
    
    1> SELECT Name from sys.Databases;
    
    2> GO
    
    Name
    
    --------------------------------------------------------------------------------------------------------------------------------
    
    master
    
    tempdb
    
    model
    
    msdb
    
    testdb
    
     
    
    (5 rows affected)
    
    1> QUIT
    
    root@300fb0551542:~#
    

    Conclusion

    Microsoft is aware that most of the companies are using Linux based systems as development to production servers and many are migrating from windows to Linux if possible. Hence Microsoft is also coming into the Linux area and providing its software which can run on Linux based systems and It is also now proving Docker images based on Linux containers. MsSql for Linux is the product which can be run on Linux based systems and on Linux based docker containers.

    相关文章

      网友评论

        本文标题:How to Setup Linux Version of MS

        本文链接:https://www.haomeiwen.com/subject/efbciqtx.html