虚拟化之Docker(一)

虚拟化主流技术

第一章 虚拟化之ESXi (待补充)
第二章 虚拟化之Hyper-V
第三章 虚拟化之KVM
第四章 虚拟化之Docker(一)



前言

很多同学应该都听过Docker,这几天研究了一下Docker,和大家分享一下


Docker图标

一、为什么需要Docker?

官方介绍:[https://www.docker.com/why-docker]

  • Docker 是世界领先的软件容器平台。
  • 开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。
  • 运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。
  • 企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。

二、什么是Docker?

Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。首先我们得先区分清楚两个概念,容器和虚拟机。我们之前文章中提到的主流虚拟化技术,大部分都是在虚拟机上实现的,每台虚拟机都需要有自己的操作系统,包括应用和和库。而容器技术是和我们的宿主机共享硬件资源及操作系统,可以实现资源的动态分配。容器包含应用和其所有的依赖包,但是与其他容器共享内核。容器在宿主机操作系统中,在用户空间以分离的进程运行。
在这里插入图片描述

三、Docker的优势

Docker相比于传统虚拟化技术的优势与劣势:

属性容器docker虚拟机
启动秒级分钟级
资源使用占用少,利用率极高需要空间大
安全性进程间的隔离,弱系统级的隔离,强
单机部署数量可部署成百上千一般几十个

四、Docker的三个基本概念(主要组件)

  • Image(镜像)
  • Container(容器)
  • Repository(仓库)
    三者关系如图
    在这里插入图片描述

Docker镜像

镜像可以看作是一个特殊的文件系统,包括容器运行时所需的程序、库、资源、配置等文件。镜像中的内容在构建之后就不会被改变。例如:一个镜像可以完全包含了Ubuntu操作系统环境,可以把它称作一个Ubuntu镜像。镜像也可以安装了Apache应用程序(或其他软件),可以把它称为一个Apache镜像。
用户可以从公有仓库拉取镜像,也可以自己定制镜像(不要害怕,不难,很有趣!)。

Docker容器

容器是从镜像创建的应用运行实例,可以将其启动、开始、停止、删除,而这些容器都是相互隔离、互不可见的。大家可以粗略的理解为,容器就是将镜像跑起来。

Docker仓库

仓库类似与代码仓库,是Docker集中存放镜像文件的场所。最大的公开仓库是Docker Hub,你也可以实现自己的仓库。有时候会把仓库 (Repository) 和仓库注册服务器 (Registry) 混为一谈,并不严格区分。实际上,一个 Docker Registry 中可以包含多个仓库 (Repository) ,每个仓库可以包含多个标签 (Tag),每个标签对应着一个镜像。

五、Docker的安装和使用

Docker 分为 CE 和 EE 两大版本。 CE 即社区版(免费,支持周期 7 个月), EE 即企业版,强调安全,付费使用,支持周期 24 个月。官方安装文档
不同的系统安装方法有所区别,这里我们以 CentOS 7.6 64位作为本文的演示。由于 Docker-CE 支持 64 位版本的 CentOS7 ,并且要求内核版本不低于 3.10

在测试或开发环境中 Docker 官方为了简化安装流程,提供了一套便捷的安装脚本,CentOS 系统上可以使用这套脚本安装:

[root@docker ~]# curl -fsSL get.docker.com -o get-docker.sh
[root@docker ~]# sh get-docker.sh

使用docker version查看是否安装成功

[root@docker ~]# docker -v
Docker version 19.03.13, build 4484c46d9d

启动Docker-CE

[root@docker ~]# systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@docker ~]# systemctl start docker

Docker的简单运用—部署Nginx(举个栗子)。不指定tag(就是nginx版本号),会默认下载最新版本!

[root@docker ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx

library/nginx 是 image 文件在仓库里面的位置,其中 library 是 image 文件所在的组,nginx是 image 文件的名字。拉取Ngnix镜像后,就可以在本机看到这个 image 文件了。

[root@docker default]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              daee903b4e43        22 hours ago        133MB

docker启动Nginx

[root@docker default]# docker run --name nginx-test -p 8080:80 -d nginx
13b22d34396dc76b3929fa65030455399a76be0af3e92917fa5fe7196b65ed30
[root@docker default]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
13b22d34396d        nginx               "/docker-entrypoint.…"   13 seconds ago      Up 4 seconds        0.0.0.0:8080->80/tcp   nginx-test

在浏览器上访问docker主机的ip:8080,会得到一个Nginx页面。
在这里插入图片描述

六、Docker架构

Docker 采用的是 Client/Server 架构。客户端向服务器发送请求,服务器负责构建、运行和分发容器。客户端和服务器可以运行在同一个 Host 上,客户端也可以通过 socket 或 REST API 与远程的服务器通信。可能很多朋友暂时不太理解一些东西,比如 REST API 是什么东西等,不过没关系,在后面的文章中会一一给大家讲解清楚。

Docker Client

Docker Client ,也称 Docker 客户端。它其实就是 Docker 提供命令行界面 (CLI) 工具,是许多 Docker 用户与 Docker 进行交互的主要方式。客户端可以构建,运行和停止应用程序,还可以远程与Docker_Host进行交互。最常用的 Docker客户端就是 docker 命令,我们可以通过 docker 命令很方便地在 host 上构建和运行 docker 容器。

Docker daemon

Docker daemon 是服务器组件,是 Docker 最核心的后台进程,我们也把它称为守护进程。它负责响应来自 Docker Client 的请求,然后将这些请求翻译成系统调用完成容器管理操作。该进程会在后台启动一个 API Server ,负责接收由 Docker Client 发送的请求,接收到的请求将通过Docker daemon 内部的一个路由分发调度,由具体的函数来执行请求。
在这里插入图片描述

七、Docker常用命令

其实在上文的nginx栗子中,我们已经认识了很多docker命令。

拉取一个 docker 镜像,用如下命令:

[root@docker default]# docker pull image-name:tag 

image-name是要拉取的镜像名字;tag(标签)就是应用的版本号,不加就默认是最新版本latest。

查看下主机下存在多少镜像,用如下命令:

[root@localhost ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
nginx               latest              daee903b4e43        25 hours ago        133MB

查看当前运行的容器,用如下命令:

[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
d74967be30e8        nginx               "/docker-entrypoint.…"   43 minutes ago      Up 43 minutes       0.0.0.0:8080->80/tcp   nginx-test

容器进行启动,重启和停止,用如下命令:

[root@localhost ~]# docker stop nginx-test
nginx-test
[root@localhost ~]# docker start nginx-test
nginx-test
[root@localhost ~]# docker restart nginx-test
nginx-test

想删除指定镜像的话,由于 image 被某个 container 拿来运行,如果不将这个引用的 container 删除,那 image 肯定是不能被删除。我们首先得先去停止这个容器:

[root@localhost ~]# docker stop nginx-test
nginx-test
[root@localhost ~]# docker rm nginx-test
nginx-test
[root@localhost ~]# docker ps  //发现nginx容器删除了
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
[root@localhost ~]# docker rmi nginx
Untagged: nginx:latest
Untagged: nginx@sha256:c3a1592d2b6d275bef4087573355827b200b00ffc2d9849890a4f3aa2128c4ae
Deleted: sha256:daee903b4e436178418e41d8dc223b73632144847e5fe81d061296e667f16ef2
Deleted: sha256:5cb676bcf30b4812d70161abdb1cb6bbcbcd005fa5ea80a0e4e694a921e1748f
Deleted: sha256:5d1b41d97ff62d07459012d67b1ed2af8e8ed3562f0c4aefcb8ae9fa86f09368
Deleted: sha256:61a339b2108ac582b905a652bc638a28ce62972e0a84df0be362a4a1117f81d1
Deleted: sha256:2e4d3caf29b5cd9941ea4802d38dfca7f5d5f42adf78c5804704925ca8dcc66a
Deleted: sha256:f5600c6330da7bb112776ba067a32a9c20842d6ecc8ee3289f1a713b644092f8
[root@localhost ~]# docker images//发现nginx镜像删除了
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

常用的 Docker 命令先讲到这里,以后熟能生巧。下一节将讲解Docker重点和难点—Dockerfile

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值