docker基本管理

docker是什么:开源的应用容器引擎。基于go语言开发的。主要是运行在linux系统当中的开源的轻量级的“虚拟机”。

docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的,可移植的,自给自足的容器

docker基本管理_第1张图片

docker大的宿主机是linux系统。集装箱可以理解为相互隔离的容器(组件,应用程序APP)每个容器都是一个独立的应用程序

docker的设计宗旨:build,ship,and run any app anywhere

build:封装好的程序,只要部署即可使用。一次封装

ship and run any app:一次封装完成之后的app,可以在任何环境运行

anywhere:任意宿主机

一次封装,到处运行

封装,发布,部署,运行,维护,运行,销毁

可以一整套的方式管理应用程序的生命周期

docker为什么受欢迎

1、随时随地随处都可以用,灵活 ,再复杂的应用也可以实现容器化

2、轻量级,小型的,不完整的,最小化封装的程序,与宿主机共享内核

3、可互换性,可以随时的升级更新

4、便携式,本地可以构建,在云平台上也可以实现部署,在任何地方运行

5、可拓展,自动分发容器副本。

6、可堆叠,在一个宿主机上可以创建不同版本的同一容器,也可以是多个相同版本的同一容器

linux的命令空间

namespace 是一种内核的特性。允许将一组系统资源隔离,在一个命名空间中的进程在系统当中可以拥有独立的资源。

namespace的六项隔离措施:

1、UTS(命名空间) 系统调用参数:CLONE_NEWUTS,隔离内容:主机与域名,在UTS这个命名空间当中创建进程,进程可以看到自己的主机名和域名,与其他进程分割开

2、IPC 系统调用参数:CLONE_NEWIPC,隔离内容:信号量,消息队列,共享内存,在IPC这个命名空间之中,进程可以拥有一个独立的进程间通信资源。

3、PID 系统调用参数:CLONE_NEWPID,隔离内容:每个进程都有自己独立的进程号空间

4、network 系统调用参数:CLONE_NEWNET 隔离内容:网络设备,网络栈,以及端口

每个进程都有一个自己独立的网络资源。端口号。

5、mount 系统调用的参数:CLONE_NEWNS 隔离内容:挂载点,在mount这个命名空间之中,每个进程或者设备都有自己的文件系统挂载点,相互之间互不干扰

6、user CLONE_NEWUSER, 隔离不同的用户和用户组。

基于这六个隔离项,实现了容器和容器之间,以及容器和宿主机之间

docker的核心组件:

镜像:是docker的基础,最小单位,类似于虚拟机的ISO文件,一个镜像就是一个可执行的包,包里面包含了运行这个程序的所有内容(代码,配置文件,环境变量)

docker镜像也是一个压缩包,不是一个解压的文件,是一个环境部署的脚本,甚至包含了完整的操作系统

容器:docker的容器就是基于镜像运行起来的实例,可以启动,停止,删除,每一个容器都是相互隔离的,互不可见。

仓库:保存镜像,所有的镜像都是从仓库中拉取的,可以有两种,一个是公有仓库,一个是私有仓库

docker与虚拟机之间的区别:

特性

docker

虚拟机

启动速度

秒级

分钟级

计算能力损耗

几乎无

损耗50%

性能

接近于原生系统

弱于原生系统

系统支持量

磁盘足够上千个

硬件系统来看(几十个)

隔离性

资源隔离

完全隔离

安全性

安全性差

安全性高

docker安装完毕之后,客户端和服务端都在一起,都运行在一台机器上

overlay2:docker使用的文件系统驱动

overlayFS:overlay file system :联合文件系统,用于适配宿主机的文件系统,可以自动识别

lowerDir

upperDir

MergeDir

worDie

1、docker的镜像进行操作

docker search 镜像名称

lowerDir:底层目录,docker的底层文件系统。是一个或者多个镜像文件的根文件系统

UpperDir:可写层:可以在容器运行时,在容器内进行写操作,实现容器的可写性

MergerDir:合并目录:lowerdir和upperDir合并起来,就是容器的文件系统,用户看到的也就是这个合并的视图

workDir:工作目录:处理文件系统的变更,当在容器内进行写操作时,overlayfs使用workdir来追踪文件系统的变更

一个镜像如果有多个标签,删除时,只是删除镜像,只剩最后一个,删除的就是镜像本身

如果镜像已经被容器使用,要先停止容器,再删除容器,最后再删除镜像。

docker create -it centoss:7 /bin/bash

-i:让容器开启标准输入,接受用户的输入命令

-t:给这个容器分配一个终端,一个虚拟的伪终端

-it:形成一个宿主机和容器之间形成一个可以交互shell命令行

-d:可以让创建的容器以守护进程在后台运行,容器所运行的程序

docker 镜像 三大核心

镜像 容器 仓库

docker search 搜索

docker pull nginx:版本号 获取镜像

docker images 查看系统内的镜像

docker rmi 删除镜像 如正在运行 可加 -f 强制删除 (删除了正在运行容器的镜像对容器会有影响么)

docker tag nginx:1.22.0(在镜像中已有标签) nginx:guoqi(给他新的标签)硬连接(复制了镜像)

docker save-o /opt/nginx.tar (一般用xxx.tar) 这个镜像要已存在

docker load -i xxx.tar

docker push pplok1230/nginix:guoqi

pplok:1230:dockerhup的用户名 镜像名称和标签

docker容器

-i

-t

-d

-itd:表示后台运行指定程序,而且创建一个交互式的shell,用户输入操作命令

docker run -itd nginx:1.22.0 --name test1 /bin/bash

如果容器中没有可执行命令,容器创建完成之后将会立刻退出

docker exec -it 容器名/容器ID

docker ps 只显示正在运行的容器

docker ps -a 显示所有容器 ,包括没有运行的容器

docker export -o guoqi.tar 容器名/容器id

docker import guoqi.tar --nginx:guoqi(尽量不要重复标签名)

docker cp 容器名/容器 ip:/etc/nginx/nginx.conf

docker的资源控制:

对容器使用宿主机的资源进行限制

CPU 内存 磁盘I/O

docker使用linux自带的功能cgroup

control grouos 是linux内核系统提供的一种可以限制,记录,隔离进程所使用的物理资源的机制

docker借助这个机制,来实现资源的控制

cgroup 本身是提供将进程进行分组化管理的功能和接口的基础结构,分配控制的机制来实现资源控制

host:容器和宿主机共用一个网络命名空间

container容器和容器之间共用一个网络命令空间

其他的资源依然是隔离的

1、CPU资源控制:

linux通过CFS(completely Fair Scheduler 完全公平调度器),来调度各个进程对cpu的使用。CFS的调度100ms

我们也可以自定义容器的调度周期。以及在这个周期时间之内各个容器能够使用CPU的调度时间

--cpu-period 设置容器调度cpu的周期

--cpu-quota 设置在每个周期内,容器可以使用cpu时间

可以配置使用

CFS周期的有效范围:1ms -1s --cpu-period 1000-1000000

容器使用cpu的配额时间必须大于1ms --cpu-quota的值,必须是>=1000

cat cpu.cfs_period_us

100000

CFS调度周期的长度,微妙,在每个周期内,容器可以使用指定比例的CPU时间

设置容器占用cpu的权重比:需要多个容器才能生效

--cpu-shares 指定容器占用cpu份额高。模式权重1024.设置的值只能是1024的倍数

--cpu-shares是给每个容器使用cpu设置了相对的权重,权重高的,可以使用cpu的资源更多

磁盘I/O配置:

限制容器在磁盘上的读速度

oflag=direct

在使用dd获取空字符集是从文件系统的缓存当中输入,速度是比较快的,禁用文件系统缓存,直接把数据写入磁盘,可以更真实的测试设备的性能,模拟直接写入

清理docker占用的磁盘空间

删除创建容器时的缓存,以及无用的数据卷

你可能感兴趣的:(docker)