Docker

1. Docker 介绍

1.1 Docker 是什么

Docker 是一个开源的应用容器引擎,基于 Go 语言开发实现,属于操作系统层面的虚拟化技术。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何安装有 Docker 的电脑(Windows、MacOS 或者 Linux)上。

容器是完全使用沙盒机制(Sandbox mechanism),相互之间不会有任何接口(类似 iOS 上的 app),更重要的是容器性能开销极低。

1.2 Docker 能够做什么

Docker 可以解决虚拟机能够解决的问题,同时也能够解决虚拟机由于电脑资源要求过高而无法解决的问题。

虚拟机和 Docker 虚拟化的不同之处在于:

docker流程 docker通俗易懂_系统环境


docker流程 docker通俗易懂_docker流程_02

1.3 为什么使用 Docker

  • 更快速的交付和部署:
    对开发和运维人员来说,最希望的就是一次创建或配置,就可以在任意地方正常运行。
    例如: 开发者可以使用一个标准的镜像来构建一套开发容器,开发完成之后,运维人员可以直接使用这个容器来部署代码。Docker 容器很轻很快,容器的启动时间也是秒级的,大量地节约开发、测试、部署的时间。
  • 更轻松的迁移和扩展:
    Docker 容器几乎可以再任意的平台上运行,包括物理机、虚拟机、公有云、私有云、个人电脑、服务器等。这种兼容性可以容用户把一个应用从一个平台直接迁移到另一个平台。
  • 更高的资源利用率
    Docker 对系统资源的利用率很高,一台主机上可以同时运行数千个 Docker 容器。容器除了运行其中应用外,基本不消耗额外的系统资源,使得应用的性能很高,同时系统的开销相对较小。传统虚拟机方式运行十个不同的应用就要开启十个虚拟机,而 Docker 只需要启动十个隔离的应用容器即可。

总结:
Docker 背后的想法是创建软件程序可移植容器,让其亦可在任何安装了 Docker 的机器上运行,并不用关心底层操作系统。最终的目的是简化部署流程,提高生产力。

2. 安装简易版 Ubuntu(案例)

2.1 下载镜像(image)

打开 shell,输入以下命令,无所谓你是什么系统,只要打开能运行 docker 命令的地方就行。

docker pull ubuntu

下载后可以通过一下命令来查看当前以及下载好的镜像

docker images

运行后结果如图:

docker流程 docker通俗易懂_docker流程_03


可以看见在 REPOSITORT 栏下有一个叫 ubuntu 的数据,那个就是我们刚才下载好的包。

2.2 创建一个新的容器并运行

从镜像中创建一个容器并运行的命令为 docker run

语法:

docker run [OPTIONS] IMAGE [COMMAND] [ARG...`]

OPTIONS 说明:

option

说明

-a stdin

指定标准输入输出内容类型,可选 STDIN / STDOUT / STDERR 三项

-d

后台运行容器,并返回容器ID

-i

以交互模式运行容器,通常与 -t 同时使用;

-p

端口映射,格式为:主机(宿主)端口:容器端口

-t

为容器重新分配一个伪输入终端,通常与 -i 同时使用

–name=“nginx-lb”

为容器指定一个名称

–dns 8.8.8.8

指定容器使用的DNS服务器,默认和宿主一致

–dns-search example.com

指定容器DNS搜索域名,默认和宿主一致

-h “mars”

指定容器的hostname

-e username=“ritchie”

设置环境变量

–env-file=[]

从指定文件读入环境变量

–cpuset=“0-2” or --cpuset=“0,1,2”

绑定容器到指定CPU运行

-m

设置容器使用内存最大值

–net=“bridge”

指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型

–link=[]

添加链接到另一个容器

–expose=[]

开放一个端口或一组端口

简单创建一个 Ubuntu 容器并进入 bash 模式

docker run -it --name ubuntu -p 22:22 -v [需要映射的本地文件夹]:/test ubuntu bash

其中的值可以参考上表来根据需求修改

2.3 前后台切换

输入了 2.1 里所提到的命令后,你就会进入到 Ubuntu 的 bash 界面。但是,如果你通过输入 ctrl + dexit 退出 bash 界面后,Ubuntu 系统便自动关闭。
如果需要让 Ubuntu 系统常驻后台服务的话,可以先按 ctrl + p 然后按 ctrl + q 退出 bash。

可以输入以下命令来查看当前 正在运行 的容器:

docker ps

可以输入以下命令来查看 所有 的容器:

docker ps -a

另外,如果容器已经被创建,可以通过以下命令来重新拉起容器(其中 ubuntu 可以替换成容器的 CONTAINER ID):

docker attach ubuntu

特别的,通过以下命令拉起的容器,即使通过使用 ctrl + dexit 方式退出 bash 后,容器依然在后台运行

docker exec -it ubuntu bash

2.4 关闭后台运行的容器

关闭容器相对简单,只需

docker stop ubuntu

2.5 附加内容(新手可以跳过)

2.5.1 多端口映射

如果一个参数的选项格式里带有 [ ] 号,比如:

-H=[]host
-p=[]portdirection

这些都以为着这个参数可以多次出现,既可以使用多次 -p 来多次指定端口映射规则

例:

docker run -d -p 80:80 -p 22:22

3. 制作本地镜像

docker commit -a "author" -m "this is comments" [容器 ID] [镜像名字]:[版本]

OPTIONS 说明:

  • -a:提交的镜像作者
  • -m:提交时的说明文字
  • -p:在 commit 时, 将容器暂停