docker基本管理

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

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

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占用的磁盘空间

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

相关推荐
zyu672 小时前
03-Docker存储和网络
网络·docker·容器
牛奔3 小时前
Docker Compose 两种安装与使用方式详解(适用于 Docker 19.03 版本)
运维·docker·云原生·容器·eureka
青州从事5219 小时前
20260108【mac】【brew】【docker】安装
macos·docker·eureka
菜鸟思维10 小时前
优化NextJs 项目的Docker 镜像 从3.62G 优化到 296.85M
docker
怣疯knight11 小时前
Docker Desktop 4.55.0版本安装成功教程
windows·docker
东方佑11 小时前
使用Docker Compose一键部署OnlyOffice:完整指南与配置解析
运维·docker·容器
赵文宇(温玉)12 小时前
Docker的价值、特点、创新与关键技术
运维·docker·容器
Coder码匠13 小时前
Docker Compose 部署 Spring Boot 应用完全指南
spring boot·docker·容器
可爱又迷人的反派角色“yang”14 小时前
k8s(二)
linux·运维·docker·云原生·容器·kubernetes·云计算
计算机小手14 小时前
内网穿透系列十六:使用 wg-easy 快速搭建基于 wireguard 的虚拟局域网,支持Docker部署
经验分享·网络协议·docker·开源软件