docker的基本管理和概念
docker是什么:开源的应用容器引擎.基于go语言开发的,运行在linux系统当中的开源的轻量级的“虚拟机”
docker的容器技术可以在一台主机上轻松的为任何应用创建一个轻量级的,可移植的,自给自足的容器
docker的宿主机是linux,集装箱可以理解为相互隔离的容器(组件,应用程序APP),每个容器都是一个独立的应用程序
docker的设计宗旨:build,ship and run any app,anywhere
封装好的现成的一个程序,只需要部署即可使用
ship and run any app:一次封装完成之后的程序,可以在任何环境运行
anywhere:任意宿主机
一次封装,到处运行
封装,发布,部署,运行,维护,运行,销毁
可以一整套的方式管理应用程序的生命周期
docker为什么受欢迎?
1、灵活,再复杂的应用也可以实现容器化
2、轻量级,小型的,不完整的,最小化封装的程序,与宿主机共享一个内核
3、可互换,可以随时的升级,更新
4、便携式,本地可以构建,在云平台上也可以实现部署。(在任何地方运行)
5、可扩展,自动分发容器副本
6、可堆叠,在宿主机上可以创建不同版本的同一容器,也可以是多个相同版本的同一容器
linux的命令空间namespace。是一种内核的特性,允许将一组系统资源隔离,在一个命名空间中的进程在系统当中可以拥有独立的资源
docker只能支持64位系统
lowerDir:底层目录,docker的底层文件系统。是一个或者多个镜像文件的根文件系统
UpperDir:可写层,可以在容器运行时,在容器内进行写操作。实现容器的可写性
MergeDir:合并目录,lowerdir和upperDir合并起来,就是容器的文件系统,用户看到的也就是这个合并的视图
WorkDir:工作目录,处理文件系统的变更,当在容器内进行写操作时,overlayfs使用workdir来追踪文件的变更
docker安装完毕之后,服务端和客户端都在一起,都运行在一台机器上
怎么实现系统资源的隔离,隔离点有哪些?
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的容器就是基于镜像运行起来的实例,可以启动,可以停止,也可以删除。每一个容器都是相互隔离的,互不可见
仓库:保存镜像,所有的镜像都是从仓库当中拉去的,可以有两种,一是公有仓库,二是私有仓库。镜像都是从仓库中拉去的,镜像也保存在仓库之中
下载到了本地:镜像 容器 日志 /var/lib/docker 宿主机中
docker与虚拟机之间的区别:
特性: docker 虚拟机
启动速度 秒级 分钟级
计算能力损耗 几乎无 损耗50%
性能 接近于原生系统 弱于原生系统
系统支持量 上千个 硬件系统来看(几十个)
隔离性 资源隔离 完全隔离
安全性 安全性差 安全性高
docker安装:
systemctl stop firewalld
setenforce 0
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-utils:提供了 yum-config-manager 工具。
device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,
它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
docker-ce就是docker的社区版,面向开发者和小型团队以及个人使用,是免费的
docker-ce-cli就是提供docker的命令行工具
contarnerd.io就是负责管理容器的生命周期,创建,运行,停止,继续,销毁
yum install -y docker-ce docker-ce-cli containerd.io
重启服务,开机自启服务
docker的镜像进行操作:
docker search 镜像的名称
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx official build of nginx 19319 [OK]
name:镜像的名称
DESCRIPTION:描述信息
STARS:点赞数量
OFFICIAL:官方镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 5d0da3dc9764 2 years ago 231MB
REPOSITORY:镜像所属的仓库
TAG:标签,可以理解为版本,标记一个仓库中的不同镜像
IMAGE ID:镜像的唯一标识,标识不重复
CREATED:镜像的创建时间
SIZE:镜像的大小
一个镜像有多个标签,删除时,只是删除标签,只删除最后一个,删除的就是镜像本身
如果镜像已经备容器使用,要先停止容器,再删除容器,最后删除镜像
导出的容器还是一个镜像,必须要run create才能成为容器
已经配置好的导出的容器镜像,可以直接使用(我们都是用的开发已经设置,配置好的容器镜像)
docker的特性:即使再创建过程中报错,容器还是会被创建,但是这个容器不可用
导入镜像,或者导入容器镜像,如果和已有标签重复,导入的镜像或者容器镜像,tag这一项就会变成none
docker:就是一个轻量级的虚拟机,宿主机是linux
docker 镜像 容器 仓库
docker search:搜索
docker pull nginx:1.22.0:获取镜像
docker images:查看镜像
docker rmi -f:强制删除镜像(删除了正在运行的容器的镜像,对容器会有影响吗?)
docker tag nginx:1.22.0(在镜像中已有标签)nginx:guoqi(给她新的标签)硬链接(复制了源镜像)
docker save -o /opt/nginx.tar(一般用XXX.tar)nginx:1.22.0(这个镜像要已存在)
docker load -i xxx.tar:导入容器
docker push pplok1230/nginx:guoqi(pplok1230: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 容器名/容器ID:/etc/nginx/nginx.conf /opt
docker cp /opt/123.txt 容器名/容器ID:/etc/nginx/nginx.conf
docker rm:删除容器
docker rm -f
docker images:查看镜像
docker inspect (镜像id):查看镜像的详细信息
docker rmi 5d0da3dc9764:删除整个镜像
docker pull
docker ps:查看正在运行的容器
docker ps -a:查看所有正在运行的容器
docker create it centos:7 /bin/bash
-i:让容器开启标准输入,接受用户的输入命令
-t:给这个容器分配一个终端,这是一个虚拟的伪终端
-it:形成一个宿主机的和容器形成一个可以交互shell命令行
-d:可以让创建的容器以守护进程在后台进行,容器所运行的程序不会结束
如何在获取镜像的时候,获取速度加快
登录这个网站:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台
每个人的配置镜像加速器都不一样,大家复制自己的就好了,不要加sudo,一行一行敲就行了
docker pull centos:获取centos镜像
1、docker如何实现资源隔离
6个命名空间
2、docker的核心组件,作用是什么
镜像
容器
仓库
3、如何获取centos8的镜像,获取之后如何给这个镜像改一个标签并且查看镜像
4、创建一个容器,基于获取的centos8镜像,名字叫test1,在后台持续运行,查看正在运行的容器