docker原理+基本命令参数+实战(部署mssql服务)

目录

Docker是什么?

Docker有什么用?

Docker原理是什么?

Docker技术是否与传统的 Linux 容器相同?

Docker容器的好处

模块化

层和镜像版本控制

回滚

快速部署

使用Docker的缺点有哪些?

正文部分

容器镜像

实战部分


Docker是什么?

Docker是一个用于开发、部署和运行应用程序的开放平台。Docker使您能够将应用程序从基础结构中分离出来,这样您就可以快速交付软件。使用Docker,您可以以与管理应用程序相同的方式管理基础结构。通过利用Docker的快速传送、测试和部署代码的方法,可以大大减少编写代码和在生产中运行代码之间的延迟。

Docker有什么用?

借助 Docker,您可将容器当做轻巧、模块化的虚拟机使用。同时,您还将获得高度的灵活性,从而实现对容器的高效创建、部署及复制,并能将其从一个环境顺利迁移至另一个环境,

Docker提供了在称为容器的松散隔离环境中打包和运行应用程序的能力。它的隔离性和安全性能允许您在给定的主机上同时运行多个容器。容器是轻量级的,因为它们不需要管理程序的额外负载,而是直接在主机的内核中运行。这意味着您可以在给定的硬件组合上运行比使用虚拟机更多的容器。您甚至可以在实际上是虚拟机的主机中运行Docker容器!

Docker提供了管理容器生命周期的工具和平台:

  • 使用容器开发应用程序及其支持组件。
  • 容器成为分发和测试应用程序的单元。
  • 准备好之后,将应用程序部署到生产环境中,作为容器或精心编排的服务。无论您的生产环境是本地数据中心、云提供商还是两者的混合体

快速、一致地交付应用程序

Docker允许开发人员使用提供应用程序和服务的本地容器在标准化环境中工作,从而简化了开发生命周期。容器非常适合持续集成和连续交付(CI/CD)工作流。

考虑以下示例场景:

  • 您的开发人员在本地编写代码,并使用Docker容器与同事共享他们的工作。
  • 他们使用Docker将应用程序推入测试环境,并执行自动化和手动测试。
  • 当开发人员发现bug时,他们可以在开发环境中修复它们,并将它们重新部署到测试环境中进行测试和验证。
  • 测试完成后,将更新的映像推送到生产环境中,就可以简单地将修复结果发送给客户。

响应性部署和缩放

Docker的基于容器的平台允许高度可移植的工作负载。Docker容器可以在开发人员的本地笔记本上运行,可以运行在数据中心中的物理或虚拟机上,可以在云提供商上运行,也可以在多种环境中运行。

Docker的可移植性和轻量级特性还使动态管理工作负载变得非常容易,可以根据业务需要实时地扩展或删除应用程序和服务。

在相同的硬件上运行更多的工作负载

码头客重量轻,速度快。它为基于管理程序的虚拟机提供了一个可行的、具有成本效益的替代方案,因此您可以使用更多的计算能力来实现您的业务目标。Docker非常适合高密度环境和中小型部署,在这些部署中,您需要使用更少的资源来完成更多的任务。


Docker原理是什么?

docker容器化技术简单来说只不过是利用内核中的六种名称空间技术来实现的程序运行环境的隔离

  • PID
  • Network
  • Mount
  • IPC
  • User
  • UTS

Docker引擎所使用的名称空间,相当于Linux上的以下内容:

  • 这个pid命名空间:进程隔离(PID:进程ID)。
  • 这个net命名空间:管理网络接口(网络:网络)。
  • 这个mnt命名空间:管理文件系统挂载点(mnt:挂载)。
  • 这个ipc命名空间:管理对IPC资源的访问(IPC:InterProcessCommunications)。
  • 这个uts命名空间:隔离内核和版本标识符。(UTS:Unix分时系统)

Docker技术是否与传统的 Linux 容器相同?

否。Docker 技术最初是基于 LXC 技术构建(大多数人都会将这一技术与“传统的”Linux 容器联系在一起),但后来它逐渐摆脱了对这种技术的依赖。就轻量级虚拟化 这一功能来看,LXC 非常有用,但它无法提供出色的开发人员或用户体验。除了运行容器之外,Docker 技术还具备其他多项功能,包括简化用于构建容器、传输镜像以及控制镜像版本的流程。

传统 Linux 容器和 Docker 有什么区别

传统的 Linux 容器使用 init 系统来管理多种进程。这意味着,所有应用都作为一个整体运行。与此相反,Docker 技术力争让应用各自独立运行其进程,并提供相应工具,帮助实现这一功能。这种精细化运作模式自有其优势。


Docker容器的好处

模块化

Docker 容器化方法非常注重在不停止整个应用的情况下,单独截取部分应用进行更新或修复的能力。除了这种基于微服务的方法,您还可以采用与面向服务的架构(SOA)类似的使用方法,在多个应用间共享进程。

层和镜像版本控制

每个 Docker 镜像文件都包含多个层。这些层组合在一起,构成单个镜像。每当镜像发生改变时,就会创建一个新的镜像层。用户每次发出命令(例如 run或 copy)时,都会创建一个新的镜像层。

Docker 重复使用这些层来构建新容器,借此帮助加快流程构建。镜像之间会共享中间变化,从而进一步提升速度、规模以及效率。版本控制是镜像层本身自带的能力。每次发生新的更改时,您大都会获得一个内置的更改日志,实现对容器镜像的全盘管控。

回滚

回滚也许是层最值得一提的功能。每个镜像都拥有多个层。举例而言,如果您不喜欢迭代后的镜像版本,完全可以通过回滚,返回之前的版本。这一功能还支持敏捷开发方法,帮助持续实施集成和部署(CI/CD),使其在工具层面成为一种现实。

快速部署

启动和运行新硬件、实施部署并投入使用,这在过去一般需要数天时间。投入的心力和成本往往也让人不堪重负。基于 Docker 的容器可将部署时间缩短到几秒。通过为每个进程构建容器,您可以快速将这些类似进程应用到新的应用程序中。而且,由于无需启动操作系统即可添加或移动容器,因此大幅缩短了部署时间。除此之外,得益于这种部署速度,您可以轻松无虞、经济高效地创建和销毁容器创建的数据。

因此,Docker 技术是一种更加精细、可控、基于微服务的技术,可为企业提供更高的效率价值。


使用Docker的缺点有哪些?

Docker 本身非常适合用于管理单个容器。但随着您开始使用越来越多的容器和容器化应用,并把它们划分成数百个部分,很可能会导致管理和编排变得非常困难。最终,您需要后退一步,对容器实施分组,以便跨所有容器提供网络、安全、遥测等服务。于是,Kubernetes 应运而生。

了解更多与 Kubernetes 容器编排有关的内容

使用 Docker,您将获得与传统 Linux 容器不同的类 UNIX 功能,包括可以随同应用一起,在容器中使用 cron 或 syslog 之类的进程。当然,在某些事情上面也存在一些限制,例如终止子进程之后,需要清理孙进程,而对于这类事情,传统 Linux 容器会自行处理。但我们可以在开始时更改配置文件和设置功能,从而消除这些顾虑,这些都是瑕不掩瑜的小问题。

除此以外,有些其它 Linux 子系统和设备也未指定命名空间。它们包括 SELinux、Cgroups 以及 /dev/sd* 设备。这意味着,如果攻击者控制了这些子系统,主机也将不保。为了保持轻量,主机与容器共享内核,也因此埋下了安全漏洞的隐患。在这一点上,它与虚拟机不同,后者更加严格地与主机系统保持隔离。

Docker 守护进程也可能成为安全隐患。为使用和运行 Docker 容器,您很可能需要使用 Docker 守护进程,来为容器提供持续运行时环境。Docker 守护进程需要根权限,所以我们需要特别留意谁可以访问该进程,以及进程驻留在哪个位置。例如,相比公共区域所用的守护进程(例如 Web 服务器),本地守护进程的受攻击面要小得多。


正文部分

先来看下docker容器的常用命令


再来了解下docker的事件状态机制

 

复述一下上图:

docker run 命令可以创建并启动容器

docker create 命令只创建容器,启动还需要执行 docker start

容器一旦start运行起来了,就表示处于running状态

处于running状态中的容器可以通过docker killdocker stop 来停止容器,进入到stopped状态

对停止状态的容器和刚创建还没有启动的容器可以使用docker rm 来删除,删除完之后容器destroy

运行中的容器可以通过docker restart重启,docker pause暂停 以及docker unpause继续运行

容器运行过程中,如果内存消耗殆尽,就会被OOM

容器挂了之后可以通过定义策略来决定是否重启

OK,整个环节就是docker容器的生命周期


容器镜像

下面来介绍一下images

Dcoker镜像含有启动容器所需要的文件系统及其内容,因此用于创建并启动容器

采用分成构建机制,最底层为bootfs,其之为rootfs

  • bootfs:用于系统引导的文件系统,包括bootloader和Kernel,容器启动完成后会被卸载以节约内存资源
  • rootfs:位于bootfs之上,表现为docker容器的根文件系统
  1. 传统模式中,系统启动之时,内核挂载在rootfs时会首先将其挂载为“只读”模式,完整性自检完成后将其重新挂载为读写模式;
  2. docker中,rootfs由内核挂载为“只读”模式,而后通过“联合挂载”技术额外挂载一个可写

位于下层的镜像称为父镜像,最底层的称为基础镜像

镜像的最上层为可读写层,也就是所谓的容器层,其下的均为只读

基础镜像是不允许编辑的,仅只有最上层可供编辑操作,底下这些镜像都是可供多个基于同一个镜像启动的同一个容器所共享的层次

如果删除容器,这个容器的最上层也就是可写层也一起被删除,这也就是下文创建容器,为什么要使用-v 挂载存储卷来保存数据的原因了


实战部分

有了理论知识做铺垫,接下来就开始进行实战了,话不多说,干就完事了!

首先安装docker,然后使用命令行 通过pull命令 拉取搭建mssql服务所需的镜像

docker pull microsoft/mssql-server-linux

拉取完毕后 执行 docker images 命令查看本地镜像,如下图:
仓库版本注意一定不要搞错,红线圈起来的这个,之前搞错了使用了第一个镜像,配置运行好了使用MSSM怎么都链接不上本地服务器,坑了...

好,镜像拉取完毕,接下来就开始做容器了,通过run命令 执行创建并运行容器命令

docker run -e 'ACCEPT_EULA=Y' -e 'SA_PASSWORD=Abc@#2017!' -p 1433:1433 -v /d/SqlVolume/docker:/var/opt/mssql/data --name sqlserver -d microsoft/mssql-server-linux:2017-latest

这里说一下 docker相关参数,

  1. -e 作用是指定容器内的环境变量 ;
  2. -p 是端口映射,将本地端口映射到容器内部端口,
  3. -v 就是挂载 存储卷,将自定义 宿主机文件路径 映射到 容器内部 volume 路径,可以实现数据持久化
  4. --name  给创建的容器起一个别名
  5. -d 在后台运行

 其他参数以及命令:

  • -i: 交互式操作, -t: 终端,一般这两个是连起来用的-it
  • -P:将容器内部使用的网络端口随机映射到我们使用的主机上(注意:这里是大写的P)
  • 查看所有容器的命令:docker ps -a
  • 启动容器:docker start 6afd135
  • 停止容器:docker stop 6afd135
  • 重启停止的容器:docker restart 6afd135
  • 删除容器:docker rm 6afd135 (注意:删除容器时,容器必须是停止状态)
  • 清理所有处于终止状态的容器:docker container prune
  • 在使用 -d 参数时,容器启动后会进入后台。此时想要进入容器,可以通过 docker exec  -it 6afd135 /bin/bash
     

至于怎么知道容器内部端口以及文件存储卷路径,可以在容器启动的时候通过 docker inspect 容器ID  命令来查看,如下图:


没错,就是这么简单~!

创建并运行启动容器后 通过 docker ps 命令查看当前正在运行的容器

OK!服务器环境搭建完毕,接下来就是用我们安装好的客户端连接工具MSSM来进行连接了

Bingo,大功告成! 对了,需要注意的几个坑差点忘记和大伙儿讲:

  • 宿主机使用MSSM链接数据库时,目前我没有改端口使用1433:1433,则要写 "localhost,1433",而不是冒号。
  • 创建容器,注入环境变量 预设SA密码时,必须使用强密码,至少八位数且包括大小写字母数字特殊符号,否则容器运行一会儿会自动停止
  • 做数据库存储目录共享时,注意宿主机(WIN)目录从盘符开始,:使用/代替,例如:  /d/data=d:\data

补充一下,单机docker并没有太大作用,真正能提高生产力还得配合使用K8S或者swrm等容器编排管理工具,

编排工具 能够帮助我们在需要把某个服务运行起来的时候,把服务程序提交给编排系统,编排系统会根据自己底层节点当前资源消耗状态并根据应用程序自身的需求从中选择一个最佳目标节点,将此应用程序运行起来 

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值