(一) Docker介绍与安装、测试和常用命令等。一篇文章足以。

1. 云计算介绍

1.1 虚拟化技术

虚拟化一般分为硬件级虚拟化(hardware-level-virtualization)和操作系统级虚拟化(os-level-virtualization)。硬件级虚拟化是运行在硬件之上的虚拟化技术,它的管理软件需要模拟的就是一个完整的操作系统,也就是我们通常所说的基于Hyper-V的虚拟化技术,VMWare、VirtualBox、Xen和阿里云ESC都是使用这种技术。

操作系统级虚拟化就是运行在操作系统之上的,它模拟的是运行在操作系统上的多个不同进程,并将其封装在一个封闭的容器里面,也称为容器化技术。Docker正是容器虚拟化中目前最流行的一种实现。

1.2 云计算服务模式

现在又大批提供云服务的公司。总的来说,基本可以归为一下几类。

  • 平台设施即服务(Infrastructure as a service,IaaS),通常指的是在云端为用户提供基础设施,如虚拟机、服务器、存储、负载均衡和网络。如国内的阿里云。
  • 平台即服务(Platform as a service,PaaS),通常是指在云端为用户提供可执行环境、数据库、网站服务器和开发工具等。
  • 软件即服务(Software as a service,SaaS),通常是指在云端为用户提供软件,如CRM系统、邮件系统、在线协作和在线办公等。例如国内的有道。
  • 容器即服务(Container as a service,Caas),随着容器的出现,在传统IaaS层出现了用容器替代虚拟机的服务模式,这种模式是虚拟云主机的升级版。由于容器的轻量级特性,从资源利用率和性能方面都比IaaS层的虚拟机高出等多。

写的多一点,是为了让大家在Docker的路上走的更远,而不是单纯的学一个Hello-World实现。

2. Docker介绍

在这里插入图片描述

Docker是基于Go语言实现的云开源项目。

Docker的主要目标是“Build,Ship and Run Any App,Anywhere”,也就是通过对应用组件的封装、分发、部署、运行等生命周期的管理,使用户的APP(可以是一个WEB应用或数据库应用等等)及其运行环境能够做到“一次封装,到处运行”。

Linux 容器技术的出现就解决了这样一个问题,而 Docker 就是在它的基础上发展过来的。将应用运行在 Docker 容器上面,而 Docker 容器在任何操作系统上都是一致的,这就实现了跨平台、跨服务器。只需要一次配置好环境,换到别的机子上就可以一键部署好,大大简化了操作。

Docker镜像的设计,使得Docker得以打破过去「程序即应用」的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。

2.1 Docker是什么?

简单一点,解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟化技术。

2.2 Docker能干吗?

  1. 传统的虚拟机技术
    以前使用虚拟机,可以在一种操作系统里面运行另一种操作系统,但是使用虚拟机也有很多缺点,比如:资源占用多、步骤冗余、启动慢等等。

  2. 容器虚拟化技术
    Linux 容器不是模拟一个完整的操作系统,而是对进程进行隔离。有了容器,就可以将软件运行所需的所有资源打包到一个隔离的容器中。

  3. 比较了 Docker 和传统虚拟化方式的不同之处:

    • 传统虚拟机技术是虚拟出一套硬件后,在其上运行一个完整操作系统,在该系统上再运行所需应用进程;
    • 而容器内的应用进程直接运行于宿主的内核,容器内没有自己的内核,而且也没有进行硬件虚拟。因此容器要比传统虚拟机更为轻便。
    • 每个容器之间互相隔离,每个容器有自己的文件系统 ,容器之间进程不会相互影响,能区分计算资源。
  4. 使用docker的好处:
    开发/运维(DevOps)–》一次构建、随处运行。

    • 更快速的应用交付和部署 (环境和代码都给)
    • 更便捷的升级和扩缩容
    • 更简单的系统运维
    • 更高效的计算资源利用

2.3 Docker的三要素

  1. 镜像(image)
    Docker 镜像(Image)就是一个只读的模板。镜像可以用来创建 Docker 容器,一个镜像可以创建很多容器。

  2. 容器(container)
    Docker 利用容器(Container)独立运行的一个或一组应用。容器是用镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。

    可以把容器看做是一个简易版的 Linux 环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。

    容器的定义和镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一层是可读可写的。

Docker 面向对象
镜像
容器 对象实例
  1. 仓库(repository)
    仓库(Repository)是集中存放镜像文件的场所。
    仓库(Repository)和仓库注册服务器(Registry)是有区别的。仓库注册服务器上往往存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像有不同的标签(tag)。
    仓库分为公开仓库(Public)和私有仓库(Private)两种形式。
    在这里插入图片描述

最大的公开仓库是 Docker Hub(https://hub.docker.com/),
存放了数量庞大的镜像供用户下载。国内的公开仓库包括阿里云 、网易云 等。

总结

需要正确的理解仓储/镜像/容器这几个概念:
Docker 本身是一个容器运行载体或称之为管理引擎。我们把应用程序和配置依赖打包好形成一个可交付的运行环境,这个打包好的运行环境就似乎 image镜像文件。只有通过这个镜像文件才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根据 image 文件生成容器的实例。同一个 image 文件,可以生成多个同时运行的容器实例。

  1. image 文件生成的容器实例,本身也是一个文件,称为镜像文件。
  2. 一个容器运行一种服务,当我们需要的时候,就可以通过docker客户端创建一个对应的运行实例,也就是我们的容器
  3. 至于仓储,就是放了一堆镜像的地方,我们可以把镜像发布到仓储中,需要的时候从仓储中拉下来就可以了。

架构图
在这里插入图片描述

3. Docker安装与常用命令

3.1 Docker安装

参考docker官网安装教程

3.2 Docker测试

  1. 启动docker
    [root@localhost ~]# systemctl start docker

  2. 开机启动docker
    [root@localhost ~]# systemctl enable docker
    Created symlink from /etc/systemd/system/multi‐user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.

  3. 停止docker
    [root@localhost ~]# systemctl stop docker

  4. 查看docker版本
    在这里插入图片描述5. 运行第一个容器
    在这里插入图片描述hello-world镜像是Docker官网推荐的第一个学习镜像,他的功能很简单,运行后将输出一段日志在终端上。
    [root@zxg /]# docker run hello-world
    这条命令包含了三部分:

    • docker—— Docker的客户端程序
    • run——子命令,用于运行程序
    • hello-world ——镜像的名称

这条命令首先会在本地查找是否有hello-world这个镜像,如果没有,则会自动从Dockerhub(Docker主仓库 https://hub.docker.com)去拉取,之后会启动一个程序,并把镜像装载进容器中运行。
在这里插入图片描述

3.3 Docker底层原理

Docker是一个Client-Server结构的系统,Docker守护进程运行在主机上, 然后通过Socket连接从客户端访问,守护进程从客户端接受命令并管理运行在主机上的容器。 容器,是一个运行时环境,就是我们前面说到的集装箱。
在这里插入图片描述

  1. docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的都是实际物理机的硬件资源。因此在CPU、内存利用率上docker将会在效率上有明显优势。

  2. docker利用的是宿主机的内核,而不需要Guest OS。因此,当新建一个容器时,docker不需要和虚拟机一样重新加载一个操作系统内核。仍而避免引寻、加载操作系统内核返个比较费时费资源的过程,当新建一个虚拟机时,虚拟机软件需要加载Guest OS,返个新建过程是分钟级别的。而docker由于直接利用宿主机的操作系统,则省略了返个过程,因此新建一个docker容器只需要几秒钟。

Docker容器 虚拟机(VM)
操作系统 与宿主共享OS 宿主机OS上运行虚拟机OS
存储大小 镜像小,便于存储与传输 镜像庞大(vmdk、vdi等)
运行性能 几乎无额外性能损失 操作系统额外的CPU、内存消耗
移植性 轻便、灵活、适用于Linux 笨重,与虚拟化技术耦合度高
硬件亲和性 面向软件开发者 面向硬件运维者

3.4 Docker常用命令

所有的Docker的命令格式都如下:
docker [OPTIONS] COMMAND [arg.....]

  1. 镜像操作
    在这里插入图片描述
命令:docker images [OPTIONS] 镜像名
docker images 列出本地主机上的镜像.
OPTIONS说明:
	-a :列出本地所有的镜像(含中间映像层)
	-q :只显示镜像ID
	--digests :显示镜像的摘要信息
	--no-trunc :显示完整的镜像信息


docker search 镜像名
在主仓库查找镜像:https://hub.docker.com
命令:docker search [OPTIONS] 镜像名字
OPTIONS说明:
	--no-trunc : 显示完整的镜像描述
	-s : 列出收藏数不小于指定值的镜像。
	--automated : 只列出 automated build类型的镜像;


docker rmi 镜像id 来删除镜像
删除单个镜像: docker rmi  -f 镜像ID
删除多个镜像: docker rmi -f 镜像名1:TAG 镜像名2:TAG 
删除全部:    docker rmi -f $(docker images -qa)
  1. 容器操作
创建并启动容器:
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS说明(常用):有些是一个减号,有些是两个减号
	--name="容器新名字": 为容器指定一个名称;
	-d: 后台运行容器,并返回容器ID,也即启动守护式容器;
	-i:以交互模式运行容器,通常与 -t 同时使用;
	-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;
	-P: 随机端口映射;
	-p: 指定端口映射,有以下四种格式
    	ip:hostPort:containerPort
      	ip::containerPort
 		hostPort:containerPort
      	containerPort

端口映射很有必要,比如下面启动了三个mysql分别映射三个端口。

docker run ‐p 3306:3306 ‐‐name mysql01 ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql
docker run ‐p 3307:3306 ‐‐name mysql02 ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql
docker run ‐p 3308:3306 ‐‐name mysql03 ‐e MYSQL_ROOT_PASSWORD=123456 ‐d mysql
列出当前所有正在运行的容器:docker ps [OPTIONS]
OPTIONS说明:
	-a :列出当前所有正在运行的容器+历史上运行过的
	-l :显示最近创建的容器。
	-n:显示最近n个创建的容器。
	-q :静默模式,只显示容器编号。
	--no-trunc :不截断输出。

退出容器:
	exit: 容器停止并退出
	ctrl+P+Q: 容器不停止退出

启动容器: docker start 容器ID或者容器名
重启容器: docker restart 容器ID或者容器名
停止容器: docker stop 容器ID或者容器名
强制停止容器: docker kill 容器ID或者容器名

删除已停止容器: docker rm 容器ID
一次性删除多个容器:
	docker rm -f $(docker ps -a -q)
	docker ps -a -q | xargs docker rm

**启动守护式容器** : docker run -d 容器名
Docker容器后台运行,就必须有一个前台进程,将要运行的程序以前台进程的形式运行。

查看容器日志:docker logs -f -t --tail 容器ID
	-f 	跟随最新的日志打印
	-t 	加入时间戳
	--tail  数字 显示最后多少条
查看容器内运行的进程:docker top 容器ID
查看容器内部细节:docker inspect 容器ID

进入正在运行的容器并以命令行交互:
	docker exec -it 容器ID bashShell
	docker attach 容器ID

以启动redis容器为例,进入交互模式
首先创建并启动一个redis容器
在这里插入图片描述
查看容器
在这里插入图片描述

3.5 Docker Hub的使用

  1. 打开网站 https://hub.docker.com
    在这里插入图片描述2. 搜索要使用的镜像(如mysql)
    在这里插入图片描述3. 查看版本信息,拉取镜像命令
    在这里插入图片描述4. 如何使用镜像
    在这里插入图片描述4. 进入容器命令行模式以及查看日志
    在这里插入图片描述

4. 阿里云镜像加速

平时使用国外的镜像下载速度太慢,可以改用阿里云镜像加速。
在这里插入图片描述
相关博客

(二) Docker 镜像与容器的区别与存储结构

(三) Docker容器数据卷 详细讲解

(四) Docker之Dockerfile编写与指令解析,自定义镜像实战

猜你喜欢

转载自blog.csdn.net/Zhangxg0206/article/details/110387868