SQL Server 真是越来越有看头。当我们还在为 Linux 上运行 SQL Server 而兴奋的时候,SQL Server 已经开启了 容器化之路,至此才能看清微软的胸怀,开始拥抱更大的世界。当我越来越深入去阅读有关 Docker 容器的文档,已然发现曾经部署上千台 Linux MySQL 的场景,如今在 Docker 的帮助下,SQL Server 也是手到擒来。如果 SQL Server 再匹配一个分布式计算引擎,那也是分分钟即可打造一个计算怪兽,和小象 Hadoop 分庭抗礼。届时玩 SQL 的朋友们不用分心去折腾 Hadoop/Spark, 仅用 T-SQL 依然可以笑傲江湖。因为人工智能,机器学习算法本就是数据集合操作,天生和 SQL 结合紧密。不信看我的这篇:

机器学习算法之 KNN 的 SQL 实现

当然,理想是要有的,目前还是将心放一放,回归这次的主题, Docker.
接触容器化实践,始于团队 2017 的 CRM 产品发布流程改革,微服务化。

现将整个过程梳理一下,对 SQL Server 容器化进程做一个明晰的总结。

  • Docker 概念以及作用

  • Docker 用来发布 SQL Server 部署的方法和优势

Docker 的概念以及作用

Docker 的安装

安装的必备条件:
  1. 64位 CPU
  2. Linux 3.8 以上版本
  3. 内核必须支持一种合适的存储驱动(storage driver),如:
Device ManagerAUFSvfsbtrfs默认存储驱动是 Device Mapper
  1. 内核必须支持并开启 cgroup 和命名空间功能
检查 Centos 版本:
[root@centos00 log]# uname -aLinux centos00 3.10.0-514.el7.x86_64 #1 SMP Tue Nov 22 16:42:41 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
检查存储驱动:
[root@centos00 log]# ls -l /sys/class/misc/device-mapperlrwxrwxrwx. 1 root root 0 Aug 22 18:33 /sys/class/misc/device-mapper -> ../../devices/virtual/misc/device-mapper

或者直接查当前运行的设备

[root@centos00 log]# grep device-mapper /proc/devices253 device-mapper

若没有则运行下面脚本安装

yum install -y device-mappermodprobe dm_mod
安装 EPEL 软件包仓库

此仓库只是在 centos 上安装 Docker 的时候需要,当然 RedHat 也是同门。而 Fedora 则不需要,因为 EPEL 是 Fedora 出品,已经包含了此库。

https://fedoraproject.org/wiki/EPEL

EPEL: Extra Packages For Enterprise Linux

顾名思义,这是专门为企业版 Linux 打造的扩展功能库。

CentOS 6/7 安装路径各不相同:

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

而正式的安装则简单的多:

yum install -y docker
Docker 运行时检查:
[root@centos00 log]# docker infoCannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

以上脚本可用来检查 Docker 运行时信息,亦可用来检查 Docker 是否运行

启动 Docker 进程以及配置开机运行 Docker :

systemctl start dockersystemctl enable docker
[root@centos00 log]# systemctl start dockerJob for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details.
[root@centos00 log]# systemctl status docker.service -l● docker.service - Docker Application Container Engine   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)   Active: failed (Result: exit-code) since Thu 2018-08-30 07:45:41 CST; 2min 19s ago     Docs: http://docs.docker.com  Process: 31489 ExecStart=/usr/bin/dockerd-current --add-runtime docker-runc=/usr/libexec/docker/docker-runc-current --default-runtime=docker-runc --exec-opt native.cgroupdriver=systemd --userland-proxy-path=/usr/libexec/docker/docker-proxy-current --init-path=/usr/libexec/docker/docker-init-current --seccomp-profile=/etc/docker/seccomp.json $OPTIONS $DOCKER_STORAGE_OPTIONS $DOCKER_NETWORK_OPTIONS $ADD_REGISTRY $BLOCK_REGISTRY $INSECURE_REGISTRY $REGISTRIES (code=exited, status=1/FAILURE) Main PID: 31489 (code=exited, status=1/FAILURE)

Aug 30 07:45:38 centos00 systemd[1]: Starting Docker Application Container Engine...Aug 30 07:45:38 centos00 dockerd-current[31489]: time="2018-08-30T07:45:38.949026762+08:00" level=warning msg="could not change group /var/run/docker.sock to docker: group docker not found"Aug 30 07:45:38 centos00 dockerd-current[31489]: time="2018-08-30T07:45:38.954488551+08:00" level=info msg="libcontainerd: new containerd process, pid: 31496"Aug 30 07:45:41 centos00 dockerd-current[31489]: Error starting daemon: SELinux is not supported with the overlay2 graph driver on this kernel. Either boot into a newer kernel or disable selinux in docker (--selinux-enabled=false)Aug 30 07:45:41 centos00 systemd[1]: docker.service: main process exited, code=exited, status=1/FAILUREAug 30 07:45:41 centos00 systemd[1]: Failed to start Docker Application Container Engine.Aug 30 07:45:41 centos00 systemd[1]: Unit docker.service entered failed state.Aug 30 07:45:41 centos00 systemd[1]: docker.service failed.

参考这篇文章:

https://stackoverflow.com/questions/45461307/selinux-is-not-supported-with-the-overlay-graph-driver

执行命令:

[root@centos00 log]#  cat /etc/sysconfig/docker-storageDOCKER_STORAGE_OPTIONS="--storage-driver overlay2 "

修改其 storage driver,使其应用 devicemapper :

[root@centos00 log]#  cat /etc/sysconfig/docker-storageDOCKER_STORAGE_OPTIONS="--storage-driver devicemapper "

再次启动 docker, 并检查 Docker 的状态

[root@centos00 log]# docker infoContainers: 0 Running: 0 Paused: 0 Stopped: 0Images: 0Server Version: 1.13.1Storage Driver: devicemapper Pool Name: docker-253:0-101679883-pool Pool Blocksize: 65.54 kB Base Device Size: 10.74 GB Backing Filesystem: xfs Data file: /dev/loop0 Metadata file: /dev/loop1 Data Space Used: 11.8 MB Data Space Total: 107.4 GB Data Space Available: 29.25 GB Metadata Space Used: 581.6 kB Metadata Space Total: 2.147 GB Metadata Space Available: 2.147 GB Thin Pool Minimum Free Space: 10.74 GB Udev Sync Supported: true Deferred Removal Enabled: true Deferred Deletion Enabled: true Deferred Deleted Device Count: 0 Data loop file: /var/lib/docker/devicemapper/devicemapper/data WARNING: Usage of loopback devices is strongly discouraged for production use. Use `--storage-opt dm.thinpooldev` to specify a custom block storage device. Metadata loop file: /var/lib/docker/devicemapper/devicemapper/metadata Library Version: 1.02.135-RHEL7 (2016-09-28)Logging Driver: journaldCgroup Driver: systemdPlugins:  Volume: local Network: bridge host macvlan null overlaySwarm: inactiveRuntimes: runc docker-runcDefault Runtime: docker-runcInit Binary: /usr/libexec/docker/docker-init-currentcontainerd version:  (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)runc version: 5eda6f6fd0c2884c2c8e78a6e7119e8d0ecedb77 (expected: 9df8b306d01f59d3a8029be411de015b7304dd8f)init version: fec3683b971d9c3ef73f284f176672c44b448662 (expected: 949e6facb77383876aeff8a6944dde66b3089574)Security Options: seccomp  WARNING: You're not using the default seccomp profile  Profile: /etc/docker/seccomp.json selinuxKernel Version: 3.10.0-514.el7.x86_64Operating System: CentOS Linux 7 (Core)OSType: linuxArchitecture: x86_64Number of Docker Hooks: 3CPUs: 4Total Memory: 3.699 GiBName: centos00ID: DORM:3S6Z:Y33P:TWDH:MT52:NRJR:T5LY:MZYT:37MU:HP3O:JDTS:OFREDocker Root Dir: /var/lib/dockerDebug Mode (client): falseDebug Mode (server): falseRegistry: https://index.docker.io/v1/Experimental: falseInsecure Registries: 127.0.0.0/8Live Restore Enabled: falseRegistries: docker.io (secure)
创建一个容器:
[root@centos00 log]# docker run -i -t ubuntu /bin/bashUnable to find image 'ubuntu:latest' locallyTrying to pull repository docker.io/library/ubuntu ... latest: Pulling from docker.io/library/ubuntu124c757242f8: Downloading [===============================>                   ] 19.84 MB/31.76 MB2ebc019eb4e2: Download complete dac0825f7ffb: Download complete 82b0bb65d1bf: Download complete ef3b655c7f88: Download complete

这是简易版本的创建新容器的方式。如果容器不是远程服务器维护的,而在本地局域网(为了安全,放在本地局域网缓存),创立新容器的方法又有稍微不同。

当命令执行完毕,此时我们已经在 Docker 新建的容器里面:

root@ecb9d7b74b07:~# cat /etc/hosts127.0.0.1    localhost::1    localhost ip6-localhost ip6-loopbackfe00::0    ip6-localnetff00::0    ip6-mcastprefixff02::1    ip6-allnodesff02::2    ip6-allrouters172.17.0.2    ecb9d7b74b07

另起一个窗口,检查开启的容器

[root@centos00 huangyun]# docker ps -aCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMESecb9d7b74b07        ubuntu              "/bin/bash"         9 minutes ago       Up 9 minutes                            vibrant_thompson

这是一个临时起的容器,一旦退出执行了 docker run -i -t ubuntu /bin/bash 的窗口,容器就随之关闭了。

如果要建立一个长久不关闭的容器,就需要执行面的命令来安装守护容器:

docker run --name daemon_dave -d ubuntu /bin/sh -c "while true ;do echo hello world; sleep 1 ; done"

-d 标识了此容器运行在后台,命令执行完之后,返回主机。

可以执行下面的命令,连接后台执行的容器:

[root@centos00 huangyun]# docker exec -i -t daemon_dave /bin/bashroot@eb6cb2a3b7b6:/# top

top - 14:19:01 up 16:17,  0 users,  load average: 0.29, 0.21, 0.20Tasks:   4 total,   1 running,   3 sleeping,   0 stopped,   0 zombie%Cpu(s):  0.6 us,  1.2 sy,  0.0 ni, 98.2 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 stKiB Mem :  3878288 total,   114852 free,  2647828 used,  1115608 buff/cacheKiB Swap:  2097148 total,  2092540 free,     4608 used.   831552 avail Mem
关闭一个容器:

执行下面命令即可关闭一个正在运行的容器:

[root@centos00 website]# docker stop  nginx_server_1nginx_server_1[root@centos00 website]# docker psCONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES[root@centos00 website]#

docker ps 可以用来检查当前运行着的容器。

以特定名字运行一个容器之后,这名字就一直保存着,下次运行,如果再以这份名字执行相应的运行程序,会报如下的错误:

[root@centos00 website]# docker run -d -p 80 --name nginx_server_1 -v /var/www/html/website:/var/www/html/website:rw ubuntu/nginx3 /usr/bin/docker-current: Error response from daemon: Conflict. The container name "/nginx_server_1" is already in use by container f40d10674908782758915399d3f16f1c5207e2907cb90e25f3689bccb9449d34. You have to remove (or rename) that container to be able to reuse that name..See '/usr/bin/docker-current run --help'.

不知道为什么 Docker 主程会一直保存着运行过的 docker 名字:

[root@centos00 website]# docker ps -aCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES17f8ba709f49        ubuntu/nginx3       "nginx"                  4 minutes ago       Exited (0) 3 minutes ago                        hardcore_paref40d10674908        ubuntu/nginx3       "nginx"                  10 hours ago        Exited (0) 6 minutes ago                        nginx_server_17baea86e09b2        ubuntu/nginx2       "/bin/sh"                10 hours ago        Exited (2) 10 hours ago                         determined_bartika4a3348bf5b4        ubuntu/nginx2       "/bin/sh"                10 hours ago        Exited (0) 10 hours ago                         quirky_kellerd944f39ba4b5        ubuntu/nginx2       "nginx"                  10 hours ago        Exited (1) 10 hours ago                         amazing_wozniak498f38dab68d        ubuntu/nginx2       "nginx"                  10 hours ago        Exited (1) 10 hours ago                         websitee91147812d90        ubuntu/nginx2       "/bin/sh"                11 hours ago        Exited (0) 10 hours ago                         reverent_golickb2dc934e76cb        ubuntu/nginx2       "/bin/sh"                11 hours ago        Exited (0) 11 hours ago                         nginx24389f303f89f        ubuntu/ping         "/bin/sh"                11 hours ago        Exited (0) 11 hours ago                         dockernginx1425db7295d54        ubuntu/ping         "/bin/sh"                11 hours ago        Exited (0) 11 hours ago                         dockernginx4092ee432cdc        ubuntu/ping         "/bin/sh"                11 hours ago        Exited (0) 11 hours ago                         ubuntu002eedc14e316f        c58e6a4eb329        "/bin/sh -c 'apt-g..."   11 hours ago        Exited (100) 11 hours ago                       nervous_stallman8393f330888c        ubuntu/nginx        "/bin/bash"              12 hours ago        Exited (0) 12 hours ago                         gracious_leavittb106b1b31c84        ubuntu/nginx        "/bin/bash"              13 hours ago        Exited (127) 12 hours ago                       nginx_server6f748f358454        ubuntu/ping         "/bin/bash"              15 hours ago        Exited (0) 15 hours ago                         compassionate_brahmaguptae4a3a8acc032        centos:7.4.1708     "/bin/sh"                17 hours ago        Exited (0) 17 hours ago                         centos7eb6cb2a3b7b6        ubuntu              "/bin/sh -c 'while..."   2 days ago          Exited (137) 12 hours ago                       daemon_daveecb9d7b74b07        ubuntu              "/bin/bash"              2 days ago          Exited (127) 12 hours ago                       vibrant_thompson[root@centos00 website]#

当再一次使用其中之一运行容器时,名字会因为重复而被拒绝运行。

针对这种需要使用同一个名字重启容器的情况,一般的解决方法有3种:

  1. 在每次运行容器时,指定关闭容器之后,销毁
# docker run -d -p 80 --rm --name nginx_server_1 -v /var/www/html/website:/var/www/html/website:rw ubuntu/nginx3
  1. 先关闭容器,再移除容器名字
# docker stop nginx_server_1# docker rm nginx_server_1
  1. 重启容器而不用先销毁
# docker restart nginx_server_1
Docker 的镜像与仓库

Docker 公司出版了自己维护和运营的一些镜像,官方网站维护了这份列表:

https://hub.docker.com/

注册一个 Docker 官网的账户 , dblenis, l*w*6.

每个仓库中都存放着各种镜像,执行命令,可以将这些镜像都拉到本地存储:

[root@centos00 containers]# docker pull centosUsing default tag: latestTrying to pull repository docker.io/library/centos ... latest: Pulling from docker.io/library/centos256b176beaff: Pull complete Digest: sha256:6f6d986d425aeabdc3a02cb61c02abb2e78e57357e92417d6d58332856024fafStatus: Downloaded newer image for docker.io/centos:latest[root@centos00 containers]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEdocker.io/ubuntu    latest              16508e5c265d        9 days ago          84.1 MBdocker.io/centos    latest              5182e96772bf        3 weeks ago         200 MB[root@centos00 containers]#

每个镜像都会带有自己的标签,在建立新容器的时候带上这份标签,会让我们更明白操作的对象是什么,会有什么异常:

[root@centos00 containers]# docker run --name centos7 -d centos:centos7.4.1708   /bin/sh

如果不指定特定标签,在拉取官网镜像时,则拉取的是最新的。

构建镜像

两种方法:

使用 Docker Commit 命令

使用 Docker build 命令和 Dockerfile 文件

通过前面新建的 ubuntu 没有 ping 的功能,我希望可以将 ping 功能安装进去,然后打包一个新的镜像,放在 Docker 上分享。

# apt-get install iputils-pingReading package lists... DoneBuilding dependency tree       Reading state information... DoneThe following additional packages will be installed:  libcap2 libcap2-bin libidn11 libpam-capThe following NEW packages will be installed:  iputils-ping libcap2 libcap2-bin libidn11 libpam-cap0 upgraded, 5 newly installed, 0 to remove and 0 not upgraded.Need to get 140 kB of archives.After this operation, 537 kB of additional disk space will be used.Do you want to continue? [Y/n] y

apt-get 安装一些其他软件,方便以后使用,提交这些更改,将其完整的做成一个容器镜像。以后若要新建容器,只需要在此镜像基础上新建便可。

[root@centos00 huangyun]# docker commit daemon_dave ubuntu/ping

若此时查看镜像库:

[root@centos00 huangyun]# docker imagesREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEubuntu/ping         latest              2eb12722cb2f        2 minutes ago       186 MBdocker.io/ubuntu    latest              16508e5c265d        9 days ago          84.1 MBdocker.io/centos    7.4.1708            d3949e34634c        3 weeks ago         197 MBdocker.io/centos    centos7.4.1708      d3949e34634c        3 weeks ago         197 MBdocker.io/centos    latest              5182e96772bf        3 weeks ago         200 MB

发现 repository 里面多了一个 ubuntu/ping 的镜像。

就像是虚拟机多保存了一个 snapshot 一样,更方便的是我们居然可以依据这份 snapshot 来构建一个新的虚拟机。

官方更推荐使用 Dockerfile 和 Docker build 来构建新容器镜像

Dockerfile 是一种特殊的文件,用来编写 DSL 指令,这些指令可以被 Docker 进程识别,并根据这些指令进行处理,最终完成一个可用的镜像制作。每一个镜像都是从基础镜像之上,一点点添加其他镜像组成的。一开始的基础镜像只是符合最低运行库的内核,比如 ubuntu 的基础镜像,居然连 ping, vi 都没有。如果需要这些功能作为新镜像的一部分,那么就要在 Dockerfile 里面新加。

更多的 Dockerfile 支持的指令:
http://docs.docker.com/reference/builder

Docker build 就是基于 Dockerfile ,将其中的指令发送给 Docker 进程,使其进行构建新镜像。Docker 进程可以看做是服务进程,提供一系列的后台服务,docker build 就是客户端,发送请求给 Docker ,Docker 统一调度工作完成 build 的请求。

[root@centos00 DockerWeb]# cat Dockerfile# version : 0.0.1

FROM ubuntu:14.04

MAINTAINER Lenis Huang "huangyun_122@163.com"RUN apt-get updateRUN apt-get install -y nginxRUN echo "Hello, World!" > /usr/share/nginx/html/index.htmlEXPOSE 80

上面的脚本安装了 nginx 服务,并且创建了一个简单的静态网页,最后允许 80 开放给外界访问。

构建开始:

[root@centos00 DockerWeb]# docker build -t="ubuntu/nginx" .Sending build context to Docker daemon 2.048 kBStep 1/6 : FROM ubuntu:14.04Trying to pull repository docker.io/library/ubuntu ... 14.04: Pulling from docker.io/library/ubuntu72c01b436656: Extracting [=====>                                             ] 7.799 MB/67.13 MB944f9cf63457: Download complete 6856614e8780: Download complete 9d0e4b6507f2: Download complete c00913272b9b: Download complete

正在 build 之中的镜像,这一步步看的更详细:

[root@centos00 DockerWeb]# docker build -t="ubuntu/nginx" .Sending build context to Docker daemon 2.048 kBStep 1/6 : FROM ubuntu:14.04Trying to pull repository docker.io/library/ubuntu ... 14.04: Pulling from docker.io/library/ubuntu72c01b436656: Pull complete 944f9cf63457: Pull complete 6856614e8780: Pull complete 9d0e4b6507f2: Pull complete c00913272b9b: Pull complete Digest: sha256:d6b8e25d0f3073bad48fda3f28d01ac0e8bd0e2a6d034c7f462619591a72c791Status: Downloaded newer image for docker.io/ubuntu:14.04 ---> 8789038981bcStep 2/6 : MAINTAINER Lenis Huang "huangyun_122@163.com" ---> Running in 6a16f9906861 ---> aacb0d62260fRemoving intermediate container 6a16f9906861Step 3/6 : RUN apt-get update ---> Running in ed843eeaf662

Ign http://archive.ubuntu.com trusty InReleaseGet:1 http://security.ubuntu.com trusty-security InRelease [65.9 kB]Get:2 http://archive.ubuntu.com trusty-updates InRelease [65.9 kB]Get:3 http://archive.ubuntu.com trusty-backports InRelease [65.9 kB]Get:4 http://archive.ubuntu.com trusty Release.gpg [933 B]Get:5 http://security.ubuntu.com trusty-security/main amd64 Packages [952 kB]Get:6 http://archive.ubuntu.com trusty-updates/universe Sources [260 kB]Get:7 http://security.ubuntu.com trusty-security/universe Sources [96.3 kB]Get:8 http://archive.ubuntu.com trusty-updates/main amd64 Packages [1372 kB]Get:9 http://archive.ubuntu.com trusty-updates/restricted amd64 Packages [21.4 kB]Get:10 http://archive.ubuntu.com trusty-updates/universe amd64 Packages [606 kB]Get:11 http://archive.ubuntu.com trusty-updates/multiverse amd64 Packages [16.0 kB]Get:12 http://security.ubuntu.com trusty-security/restricted amd64 Packages [18.1 kB]Get:13 http://archive.ubuntu.com trusty-backports/main amd64 Packages [14.7 kB]Get:14 http://archive.ubuntu.com trusty-backports/restricted amd64 Packages [40 B]Get:15 http://archive.ubuntu.com trusty-backports/universe amd64 Packages [52.5 kB]Get:16 http://archive.ubuntu.com trusty-backports/multiverse amd64 Packages [1392 B]Get:17 http://archive.ubuntu.com trusty Release [58.5 kB]Get:18 http://archive.ubuntu.com trusty/universe Sources [7926 kB]Get:19 http://archive.ubuntu.com trusty/main amd64 Packages [1743 kB]Get:20 http://archive.ubuntu.com trusty/restricted amd64 Packages [16.0 kB]Get:21 http://archive.ubuntu.com trusty/universe amd64 Packages [7589 kB]Get:22 http://archive.ubuntu.com trusty/multiverse amd64 Packages [169 kB]Get:23 http://security.ubuntu.com trusty-security/multiverse amd64 Packages [4721 B]Get:24 http://security.ubuntu.com trusty-security/universe amd64 Packages [311 kB]Fetched 21.4 MB in 11s (1822 kB/s)Reading package lists... ---> 582a2a0c6fb9Removing intermediate container ed843eeaf662Step 4/6 : RUN apt-get install -y nginx ---> Running in 7199f88e91ef

Reading package lists...Building dependency tree...Reading state information...The following extra packages will be installed:  fontconfig-config fonts-dejavu-core geoip-database libfontconfig1  libfreetype6 libgd3 libgeoip1 libjbig0 libjpeg-turbo8 libjpeg8 libtiff5  libvpx1 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxml2 libxpm4  libxslt1.1 nginx-common nginx-core sgml-base xml-coreSuggested packages:  libgd-tools geoip-bin fcgiwrap nginx-doc sgml-base-doc debhelperThe following NEW packages will be installed:  fontconfig-config fonts-dejavu-core geoip-database libfontconfig1  libfreetype6 libgd3 libgeoip1 libjbig0 libjpeg-turbo8 libjpeg8 libtiff5  libvpx1 libx11-6 libx11-data libxau6 libxcb1 libxdmcp6 libxml2 libxpm4  libxslt1.1 nginx nginx-common nginx-core sgml-base xml-core0 upgraded, 25 newly installed, 0 to remove and 0 not upgraded.Need to get 5593 kB of archives.After this operation, 19.8 MB of additional disk space will be used.Get:1 http://archive.ubuntu.com/ubuntu/ trusty/main libgeoip1 amd64 1.6.0-1 [71.0 kB]Get:2 http://archive.ubuntu.com/ubuntu/ trusty/main libxau6 amd64 1:1.0.8-1 [8376 B]Get:3 http://archive.ubuntu.com/ubuntu/ trusty/main libxdmcp6 amd64 1:1.1.1-1 [12.8 kB]Get:4 http://archive.ubuntu.com/ubuntu/ trusty/main libxcb1 amd64 1.10-2ubuntu1 [38.0 kB]Get:5 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libx11-data all 2:1.6.2-1ubuntu2.1 [111 kB]Get:6 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libx11-6 amd64 2:1.6.2-1ubuntu2.1 [561 kB]Get:7 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libxml2 amd64 2.9.1+dfsg1-3ubuntu4.13 [573 kB]Get:8 http://archive.ubuntu.com/ubuntu/ trusty/main sgml-base all 1.26+nmu4ubuntu1 [12.5 kB]Get:9 http://archive.ubuntu.com/ubuntu/ trusty/main fonts-dejavu-core all 2.34-1ubuntu1 [1024 kB]Get:10 http://archive.ubuntu.com/ubuntu/ trusty-updates/main fontconfig-config all 2.11.0-0ubuntu4.2 [47.4 kB]Get:11 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libfreetype6 amd64 2.5.2-1ubuntu2.8 [304 kB]Get:12 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libfontconfig1 amd64 2.11.0-0ubuntu4.2 [123 kB]Get:13 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libjpeg-turbo8 amd64 1.3.0-0ubuntu2.1 [104 kB]Get:14 http://archive.ubuntu.com/ubuntu/ trusty/main libjpeg8 amd64 8c-2ubuntu8 [2194 B]Get:15 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libjbig0 amd64 2.0-2ubuntu4.1 [26.1 kB]Get:16 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libtiff5 amd64 4.0.3-7ubuntu0.9 [147 kB]Get:17 http://archive.ubuntu.com/ubuntu/ trusty/main libvpx1 amd64 1.3.0-2 [556 kB]Get:18 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libxpm4 amd64 1:3.5.10-1ubuntu0.1 [33.2 kB]Get:19 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libgd3 amd64 2.1.0-3ubuntu0.10 [123 kB]Get:20 http://archive.ubuntu.com/ubuntu/ trusty-updates/main libxslt1.1 amd64 1.1.28-2ubuntu0.1 [145 kB]Get:21 http://archive.ubuntu.com/ubuntu/ trusty/main geoip-database all 20140313-1 [1196 kB]Get:22 http://archive.ubuntu.com/ubuntu/ trusty/main xml-core all 0.13+nmu2 [23.3 kB]Get:23 http://archive.ubuntu.com/ubuntu/ trusty-updates/main nginx-common all 1.4.6-1ubuntu3.8 [19.1 kB]Get:24 http://archive.ubuntu.com/ubuntu/ trusty-updates/main nginx-core amd64 1.4.6-1ubuntu3.8 [325 kB]Get:25 http://archive.ubuntu.com/ubuntu/ trusty-updates/main nginx all 1.4.6-1ubuntu3.8 [5394 B]debconf: unable to initialize frontend: Dialogdebconf: (TERM is not set, so the dialog frontend is not usable.)debconf: falling back to frontend: Readlinedebconf: unable to initialize frontend: Readlinedebconf: (This frontend requires a controlling tty.)debconf: falling back to frontend: Teletypedpkg-preconfigure: unable to re-open stdin: Fetched 5593 kB in 6min 9s (15.2 kB/s)Selecting previously unselected package libgeoip1:amd64.(Reading database ... 11571 files and directories currently installed.)Preparing to unpack .../libgeoip1_1.6.0-1_amd64.deb ...Unpacking libgeoip1:amd64 (1.6.0-1) ...Selecting previously unselected package libxau6:amd64.Preparing to unpack .../libxau6_1%3a1.0.8-1_amd64.deb ...Unpacking libxau6:amd64 (1:1.0.8-1) ...Selecting previously unselected package libxdmcp6:amd64.Preparing to unpack .../libxdmcp6_1%3a1.1.1-1_amd64.deb ...Unpacking libxdmcp6:amd64 (1:1.1.1-1) ...Selecting previously unselected package libxcb1:amd64.Preparing to unpack .../libxcb1_1.10-2ubuntu1_amd64.deb ...Unpacking libxcb1:amd64 (1.10-2ubuntu1) ...Selecting previously unselected package libx11-data.Preparing to unpack .../libx11-data_2%3a1.6.2-1ubuntu2.1_all.deb ...Unpacking libx11-data (2:1.6.2-1ubuntu2.1) ...Selecting previously unselected package libx11-6:amd64.Preparing to unpack .../libx11-6_2%3a1.6.2-1ubuntu2.1_amd64.deb ...Unpacking libx11-6:amd64 (2:1.6.2-1ubuntu2.1) ...Selecting previously unselected package libxml2:amd64.Preparing to unpack .../libxml2_2.9.1+dfsg1-3ubuntu4.13_amd64.deb ...Unpacking libxml2:amd64 (2.9.1+dfsg1-3ubuntu4.13) ...Selecting previously unselected package sgml-base.Preparing to unpack .../sgml-base_1.26+nmu4ubuntu1_all.deb ...Unpacking sgml-base (1.26+nmu4ubuntu1) ...Selecting previously unselected package fonts-dejavu-core.Preparing to unpack .../fonts-dejavu-core_2.34-1ubuntu1_all.deb ...Unpacking fonts-dejavu-core (2.34-1ubuntu1) ...Selecting previously unselected package fontconfig-config.Preparing to unpack .../fontconfig-config_2.11.0-0ubuntu4.2_all.deb ...Unpacking fontconfig-config (2.11.0-0ubuntu4.2) ...Selecting previously unselected package libfreetype6:amd64.Preparing to unpack .../libfreetype6_2.5.2-1ubuntu2.8_amd64.deb ...Unpacking libfreetype6:amd64 (2.5.2-1ubuntu2.8) ...Selecting previously unselected package libfontconfig1:amd64.Preparing to unpack .../libfontconfig1_2.11.0-0ubuntu4.2_amd64.deb ...Unpacking libfontconfig1:amd64 (2.11.0

开箱即用的 SQL Server Docker相关推荐

  1. 开箱即用的 SQL Server Docker 之二

    Docker 与 SQL Server 之一,讲的还只是 Docker 的一些基础概念,这篇将 Docker 应用在 SQL Server 上,包括这些主题: 在 Docker 上制作 SQL Ser ...

  2. 创建自己SQL Server Docker映像

    In this article, we will review how to create custom SQL Server docker images and run the containers ...

  3. sql docker容器_了解SQL Server Docker容器中的备份和还原操作

    sql docker容器 In this 17th article of the series (see the full article index at bottom), we will disc ...

  4. linux能装sql2000,亲测linux安装sql server (docker+centos7)

    sql server已经支持在linux中安装了.最简单的方式还是使用docker, 今天我就带大家来,体验一下使用docker来安装sql server.超爽!!! 一.使用docker下载并配置s ...

  5. 使用 Docker 运行 SQL Server 容器映像 在Windows操作系统上,重设置密码和操作数库

    快速入门:使用 Docker 运行 SQL Server 容器映像 2020/09/07 V O G M Choose your command shell 适用于: 是SQL Server(所有支持 ...

  6. 微软的 SQL Server 你学会了吗?

    SQL Server 的发展 SQL Server 是由 Microsoft 公司推出的具有使用方便可伸缩性好与相关软件集成程度高等优点的关系型数据库管理系统,是一个全面的数据库平台.对于关系型数据和 ...

  7. 启动sqlserver_微软的 SQL Server 你学会了吗?

    SQL Server 是由 Microsoft 公司推出的具有使用方便可伸缩性好与相关软件集成程度高等优点的关系型数据库管理系统,是一个全面的数据库平台.对于关系型数据和结构化数据,SQL Serve ...

  8. 如何在Linux/MacOS系统上安装Microsoft SQL Server

    转载来源:https://hub.docker.com/_/mssql-server-linux 如何在Linux/MacOS系统上安装Microsoft SQL Server 快速安装 # 首先在L ...

  9. SqlPackage.exe –使用bacpac和PowerShell或Batch技术自动执行SQL Server数据库还原

    Data is the key to your organization's future, but if it's outdated, irrelevant, or hidden then it's ...

最新文章

  1. Linux Mint 19 安装Gnome Boxes 新建失败
  2. 上热搜了!“学了Python6个月,竟然找不到工作!”
  3. linux shell 执行多个文件,/etc/profile、~/.bash_profile等几个文件的执行过程
  4. struts2--国际化
  5. 程序的加载和执行(五)——《x86汇编语言:从实模式到保护模式》读书笔记25
  6. python单链表操作_单链表的创建、增删改查等操作(Python实现)
  7. 萤石网络摄像头服务器稳定吗,萤石摄像头画面稳定性如何?
  8. 前端开发 什么是网页 什么是html
  9. spring3 的restful API RequestMapping介绍
  10. 需要大量设计的软件如何进行敏捷开发
  11. [转]Vs解决方案的目录结构设置和管理
  12. 引燃抖音短视频源码开发项目的几点原因
  13. #上位机开发大师之路# 管理员登陆模块开发
  14. mongodb 集群shard_MongoDB分片集群部署详解
  15. python继承list_python中 class和l
  16. 解决MacOS系统字体不识别STXingkai问题
  17. 第一讲 OC简介及基本语法
  18. 单选题 计算机软件一般包括,2016年计算机一级考试《MSOffice》单选题练习及答案...
  19. 操作系统-进程互斥的软件实现方法
  20. armv8 ARM64 AARCH64

热门文章

  1. Five reasons to embrace Transformer in computer vision/在计算机视觉领域拥抱Transformer的5条理由
  2. JavaScript实现H5游戏断线自动重连的技术
  3. 计算机开始菜单打不开是什么原因,电脑开始菜单打不开怎么办_win7开始菜单点击无效解决方法...
  4. 干货来袭!java怎么创建包和类
  5. centos6 更新xorg导致进入不了登录界面---intel(1): pEnt-device-identifier=(nil)
  6. 单摆模型,控制器及其MATLAB图形仿真
  7. VPC NAT(SANT,NANT)实验
  8. 2020年浙江理工大学新生赛 B Cly的博弈
  9. 企业领袖必备的八大特质
  10. 有源代码就可以自行开发通达信交易接口了吗?