0
点赞
收藏
分享

微信扫一扫

Dcoker基础

Dcoker项目起源

docker这个项目的话呢,最早是在2013的时候开源出来,k8s是2015年开源出来的,在2013年之前,我们主要就是使用那个虚拟化,包括open stack,包括kvm等等都是都是虚拟机啊。

在2017年3月1号的时候啊, docker公司的话呢,把docker这个项目进行了重新组合。2017年之后,它改成了mob项目,mob里面又有一个docker的商业版和一个docker的开源版

我们广泛使用的就是这个Doker-ce

Dcoker基础_Docker


如何去找Docker官方文档

进入 docker.com ,找到最下面的docs 进入

Dcoker基础_docker_02

点击doc 进入后如下图

Dcoker基础_docker_03


在点击那个Download and install 如下图所示

这样一来就可以找对应的版本下载安装了

Dcoker基础_docker基本操作_04


Docker理念

docker的这种官方的理念就是一次构建,构建指的是构建定向。嗯,一次构建,然后呢?到处运行。啊,其实中间还有个运输呢。一次构建,他叫做构建。叫build。叫build。就是运输的意思呃,构建运输网,构建运输和运行,这个是它是它的理念。

这个主要是解决了我们服务的运行环境的问题啊,其实在在Docker之前也有很多这种类似的容器技术,只不过呢。嗯,落地的技术难度比较比较比较高,而导致呢,没有一些技术人员推广,所以说没有大量的使用啊,在docker出现之后,它简化了我们容器的运行,包括容器的落地。

所以说,就是基于它的一次构建,然后呢,到处运行。这个构建出一个镜像。镜像是运行容器的最基本条件叫image。镜像当中的话呢,包含了你的服务所运行需要的最基本的一些依赖环境啊,包括你的可执行程序。啊,如果是JAVA程序的话,它会有jdk环境啊,也包括各种配置文件,包括你的代码等等。都会在镜像里面来进行提供,

那么把这个镜像构建好之后的话呢,我们一般会放到一个进行仓库,就是harbor。在harbor里面保存我们的镜像。在k8s里面,到目前为止,在我们的公司里面都是通过harbor来进行进项的统一分发的,统一分发。

所以说这个harbor又起到了镜像的运输的作用啊,把镜像放到harbor里面。就可以让各个服务器嗯,去harbor里面去下载镜像了。所以说镜像的分发。是通过harbor实现的,

     这个运行的话呢。就是你通过什么样的方式把镜像运行为一个服务,毕竟镜像的话呢,是个静态文件,我们是不能直接访问的。如果要访问的话,得把这个镜像启动为一个服务,你的服务起来之后的体现就是它有个端口啊,你可以通过这个端口对它进行访问。对它进行访问,这个运行的话就是docker的核核心技术啊,目前是 runc。

Docker的组成

Dcoker基础_docker_05

那docker的组成就是它有些最基本的组件儿啊,这个组件儿就是。有一个registry进入进入进入进入仓库,这个进入仓库的话呢,官方有一个就叫做docker registry,不过我们用的不多,我们一般用harbor这个里面就是放的镜像啊,我们有个docker host,就是在docker主机上去运行容器

Dcoker基础_服务器_06


这个容器在运行的时候的话呢,需要通过。一些命令把镜像下载下来。下载下来之后,它就是images啊,就是镜像,这个镜像也是存到你的你的docker里面的,然后呢?这个镜像嗯,通过一些命令啊,叫docker run去调用你的docker demo啊,这个docker的server端。然后呢,把镜像运行为一个容器

    一旦运行为一个容器之后,它叫container,一个容器就是一个container啊,多个容器就是containers。一个镜像可以被启动为多个容器啊.

   主机就是运行docker容器的一个服务器,可以使虚拟机啊,它对环境没有什么太多要求啊,只要有。Docker就可以,而且也不需要你的CPU支持什么嗯,一些特殊的指令集啊,这个一般不需要。

    除非呢是你的业务。比较特殊啊,比如说你的业务是做这种人工智能的啊,那它可能会需要一些智能机,就是做一些AI的。啊,它可能会用到一个特非常特殊的这种机叫avx2。

     这个是英特尔开发的一个指令集啊。嗯,是用于这种人工智能环境的。有些现在这个人工智能的一些,场景的话会非常依赖于这个整机,非常依赖这个整机,如果没有这个整机的话。你会发现他的服务跑不起来。


Docker调用方式

那这个docker的话呢,它的调用方式就是你在你的电脑上,或者在服务器上装好,有个docker服务。它会起个server啊,这个server有个Docker daemon,其实就是个进程,那这个进程的话呢? 会被你的Docker cli所调用。命令行也好啊,或者是是k8s的那个kubernetes组件是运行的node节点,它是通过调用docker的socket的文件来创建容器的。

一个docker的守护进程,下面还会有N多个容器container1 container2等等。这个结构基本上就是下图这样。

Dcoker基础_docker_07

Docker仓库

官方的镜像仓库 hub.docker.com

官方的镜像仓库当中保存了很多镜像,一些社区或者是一些第三方的项目提供的镜像,比如说nginx啊mysql,做好镜像之后会放到docker的官方的仓库。比如说你要装个mysql啊,不一定非得是yum install 或者二进制安装,你可以通过镜像去。把它pull下来,

Dcoker基础_docker_08

Docker和虚拟机对比

Docker

Dcoker基础_服务器_09

       虚拟机的话和docker对比的话呢,有些区别。最大的区别在于,你的虚拟机里面是有是有独立的内核的啊,你通过open stack也好,或者通过Vmware也好,跑一个虚拟机。

       每个虚拟机都有独立的内核,但是呢Docker没有,Docker是直接调用宿主机内核来运行了,来运行了。所以说相对比的话,docker的资源利用率会相对更高些,就是一个服务器,你可能会运行。几十个虚拟机

假如说一个128g的物理服务器,我们一般可能会跑啊,15个左右的虚拟机,15到20个吧。但是呢嗯,相同的硬件的情况下,我们可能会跑30个或者更多的容器

所以说一个相同的业务,你用是你要是用虚拟用虚拟机的话,可能就需要5到8个虚拟物理服务器。但是用Docker的话,三四个就够了,可以节省将近一半左右的左右的物理资源。包括它的开销更小,因为它不需要啊,类似于虚拟机的内核,所以说呢,它的硬件的占用会相对更小一些,

Docker它可以在数秒之内完成启动同样的一个JAVA服务,在公司里我们要是放在虚拟机里面启动的话。没个几十秒钟可能起不来,因为那个JAVA程序很大啊,它的那个jar包。都有几10M, 如果是用容器起的话,很快几秒钟就可以起来了,就可以起来,因为你的Docker是直接利用。宿主机的那个CPU,宿主机的CPU,所以性能会更强一些啊.

     总结就是无论你是使用虚拟机还是使用容器,我的目的就是为了运行你的应用程序,好在虚拟机上你可以运行mysql。那我在docker里面也可以跑mysql,那为什么不用doocker呢啊?包括你的虚拟机可以运行nginx或者运行什么服务,我在docker里面也可以啊,而且相同的。情况下,我的资源更占用,更少性能更快启动,速度更快。而且呃,在K8S里面做横向扩容更简单,那为什么不用Docker呢?

Docker的安装

参照官方文档进行安装,不在此文详述

Install Docker Desktop on Ubuntu | Docker Docs


Docker info参数说明

我们docker安装好之后,执行docker info命令,我们来看每个参数的含义

整体是这样

Dcoker基础_docker_10


Server:下面参数的含义

Dcoker基础_Docker_11

Containers :表示容器有几个

Running :表示运行的容器有几个

Paused :暂停中的容器个数

Stopped :停止运行的容器个数

Images :端口镜像有几个

我们在继续看

Dcoker基础_服务器_12


Server Version : Docker 的Server 版本

Storage Driver :表示存储引擎

Backing : 后端文件存储,后端文件存储指的是啊,你的磁盘分区在格式                     化的时候是什么系统呢?这个是ext4所以这个地方会显示estfs

     Supports d_type: 他是不是支持 d_type。这个d_type是镜像的分层功能                                    镜像会有好多layer,但是有一个地方一定要注意                                           docker不支持嗯ext3的分区.如果你是ext3的分区的                                      话一定起不来。设计ext 3的那些分区的特特性呢,没                                    有考虑说对docker的支持啊,但 ext 4。是可以完全                                      支持的

     Native : 表示是不是支持文件的对比 diff就是对比文件。                                            这种对比的话,主要是做这种啊,类似于你的数据在显示数字的                     时候。镜像是不能改的对象,一个镜像一旦提升为一个容器之                      后,你在容对容器里做的任何操作,它都是写在你的宿主机磁盘                    上的一个新的路径并不是直接去修改你的镜像,那这个时候就                         会用到这个Native 参数特性了啊,你写完一个新的文件,或者                      在容器里产生一个什么数据,这个数据那它会直接拷贝到宿主机                     上。

Logging Driver:  它日志的驱动,这个是以json-file的方式保存日志

Cgroup Driver : cgroup它是作为资源限制的

限制cpu的使用情况啊,内存的使用情况等等,我们会限制一个容器。最         多能使用多少CPU?最多能使用多少内存?

我们在继续看下一组

Dcoker基础_Docker_13

Plucins: 表示插件

    Volume :表示这个卷的插件是本地的,数据放在本地的目录里

    Network :表示网络类型

                   bridge 表示桥接的 host表示主机类型的网络 ,k8s用的overlay

    Log表示日志类型: 现在用的是 json-file

Swarm:表示是不是支持swam

Runtimes : 它是docker最核心的东西 runc

Init Binary :表示二进制

                 这个是初始化docker的环境的时候会用到一个二进制。去初始化                   叫docker-init,这个也是它默认的啊,

containerd version: 就是他的版本,他和Runc功能相同

在继续看下图

Dcoker基础_docker基本操作_14

runc version : 这个说的是runc的版本

Security :安全选项都是默认的。做一些审计,等一些功能,这个我们不用管


继续看下图

Dcoker基础_Docker_15

Kernel Version : 内核版本

Operating System: 系统版本

OS:系统类型是Linux

Architecture : 表示架构是64位

CPUs: 表示有CPU有几个

Toral Meory: 表示内存大小

ID :是自己生成的

Docker Root Dir :

表示这个数据路径,你的docker在产生了一些数据之后,放到什么地方?包括你的定向。也包括你的容器啊,里面产生的这种啊,日志啊,或者是一些用户访问的数据啊

Debug : Debug 模式有没有开

Registry: 默认的镜像仓库


Dcoker基础_服务器_16

Labels:

      Experimental :表示有没有开启这种扩展的这种功能,这个没有开呀。一些扩展属性没有开他那个,

       Insecure :表示 他自己的非安全的仓库,这个非安全的镜像仓库就是哎,如果是是你自己搭的啊,

这个仓库他认为是非安全的。那么这个后面我们要加上去,要不然访不了,要不然不能够啊,去下镜像必须得让那个docker信任你的仓库啊,

Live Restore Enable :

表示容器重启的时候呢,保证保持你的容器的存活

       这个功能一般都是false 一般都不开啊,我们的docker都重启了,容器肯定重启了,为什么呢?因为docker重启之后,它的ID变了。环境变量变化之后你的。容器的附近层是指向Docker的,如果不敢不重启的话,那这个附近层就乱套了你。ID就都没了,没了之后那些容器啊,就可能会产生这种僵尸进程,所以这个的话一般是FALSE


Dcoker基础_docker_17

Warning 表示,不支持交换分区

Docker 配置阿里云镜像加速

镜像加速就是下载镜像的时候,我希望他去国内下载

进入下图的网址

Dcoker基础_docker基本操作_18

可以用你的阿里云账号登录一下,会得到一个自己的镜像加速地址。在下载镜像的时候的话呢,可以。通过阿里云加速这个时候镜像下的会很快。也包括你公司里装的docker嗯,想从自己的仓库里面去下镜像。都需要去配置

Dcoker基础_Docker_19

这个地方会有个镜像加速器

    那么它会告诉你真正配置的话呢,就不会再直接往docker加了,因为那个加配置文件会越加越多。所以我们会通过同步一个配置文件的方式嗯,去保存docker的配置,

Dcoker基础_Docker_20

我们来创建这个json文件

Dcoker基础_Docker_21

写入复制好的内容

下图选中部分是镜像加速器网址

Dcoker基础_Docker_22

写入配置文件

Dcoker基础_Docker_23

你重启docker,它就会读取这个配置文件

Dcoker基础_服务器_24

那这个时候在再通过docker info去看。这个地址就生效了

Dcoker基础_docker基本操作_25

Docker镜像管理

搜索镜像

在装好docker之后啊,我们这个存储引擎也配好了。那接下来我们肯定要下载一些镜像,包括启动一些容器等等。那怎么下呢?镜像的话,你可以使用docker search去搜索,比如说我要下nginx啊,我们来搜索一下

Dcoker基础_docker_26


下载镜像

下载一个mysql 镜像

使用docker pull

Dcoker基础_docker基本操作_27

导出镜像

使用docker save

Dcoker基础_docker_28

这个镜像再导出来之后的话呢,你就可以把它拷到别的服务器,在别的服务器导入了啊,我有另外一台机器但是这个机器不能上网

这个进项怎么分发呢?就这样拷过去再scp,把这个镜像拷到172.31.6.202主机中,你可以把它拷过去。可以把它拷过去。考过去之后的话呢,再把它导进来就可以啊,导进来这种的话呢,

Dcoker基础_服务器_29

通常适合用于这种离线项目的部署啊,像外包公司啊。或者是一些公司是做这种一些第三方的开发的啊,他会定这些服务,这个服务的话呢,在公司开发好之后,他会打成镜像,打镜像之后考到客户现场再部署。都是通过这样的方式离线部署项目的


我们切换机器看拷贝过去的镜像

这个镜像拷到现场之后,

就是使用docker load。load-i。然后呢?mysql这样的话可以把它打进来。

我们在这样导入镜像就可以了

Dcoker基础_docker_30

导进来之后我我这个服务器就可以通过这个镜像去启动服务了。然后进行docker image,查看拷贝过来的镜像

Dcoker基础_docker_31

删除镜像

docker images 列出当前主机镜像

Dcoker基础_服务器_32


使用docker rmi 进行删除 7f这是是mysql ID号

Dcoker基础_服务器_33


运行容器

docker中最基本的命令就是docker run,这个也是用的最多的一个命令了。docker run运行一个容器,后面的话有些参数啊。-i是标准输入

下图是运行一个容器,我们来解释一下每个参数的含义

Dcoker基础_docker基本操作_34


docker run: 
	#运行一个容器
-it : 
	#-i 标准输入 。你可以从终端上给它输入一些嗯,一些指令啊
	#-t 给他分配一个tty
	#-d 是运行在后台
--name:
	#指定这个容器的名字。这个容器的名字名字可以不起啊,不起的话它会自己命名,
	# 而且在k8s里面我们都不会自己命名。k8s中的容器的名字是k8s自己管理的,
  所以这个--name的话呢,可能只在单机的时候才会用用得上 k8s从来不用
-p:
	#我这个镜像启动了一个容器之后,我肯定是要访问的呀。那访问的话,怎么访问呢?
  通过一个参数-p是做端口映 射,那我可以把宿主机的,比如说这个9800啊,
  9800映射到容器的80。嗯,冒号左侧是宿主机的端口,右侧是容器端口,
  9800:80 
	#那为什么这个容器我要用上80呢?因为它是nginx。你的nginx镜像,启动一个容器
   之后,它默认就会起个服务,这个服务就是80了,
	
	#这个是指的是你容器的那个端口。如果说这个nginx是你自己打的,你把这个镜像的
   端口改成了,比如说81啊,或者那个8080。那么,这个地方要求你实际的镜像
   启动一个容器中,那个容器的服务的实际的端口号必须这样子写,那么这样的话,
   你访问的时候可以访问宿主机的这个端口。那么,宿主机的iptables会把它做一个
   目的地址转换啊,转换到这个容器的这个端口。会做目的地址转换,然后呢?
	
n56-nginx: 
	#表示启动的镜像,n56-nginx是自己down下来的镜像名字

1.18.0-alpine :
	#表示镜像的Tag名

看下图这个运行这个 ready for start up 已经启动了

Dcoker基础_Docker_35


我们现在来访问一下

目前来说访问自己主机的端口80,80端口是不通的

Dcoker基础_docker_36


那你要访问的话,必须访问宿主机的9800,已经可以了

Dcoker基础_Docker_37


举报

相关推荐

0 条评论