1. linux container
用户空间能够被分割出来,能容纳运行1到多个特定的应用程序,从而能够其他用户空间中的 应用程序隔离开来。每个单独运行的用户空间称为容器。
linux 内核提供一种机制让用户空间必备其支持的资源,在内核级就支持虚拟机制。使在内核空间支持的用户空间就不止一个。
2.发展史
1. 2000 BSD jail
2. 2001 linux vserver
CGROUPS NAMESPACES LXC
docker 运行机制:一个用户空间专用于运行一个进程及其子进程,如果进程出现问题,就回收。
启动一个容器就启动一个进程。每个进程都有自己单独的用户空间
docker 建立镜像仓库。分层实现。容器给运维带来的是噩梦,给开发带来的是大一统。
docker 只解决单个容器运行,k8s 解决了上万个容器一起运行。
3.什么是docker
docker 不是容器的实现,是容器技术的前端工具,让容器更容易实现
容器需要容器引擎:早期docker使用lxc和cgroups.lxc是早期技术。之后过河拆桥,研发了libcontainer.
4.docker的架构
docker是cs 架构,s端称为docker-daemon .他要提供两套环境,1.docker 运行时环境 2.docker 本地镜像存储环境 (特殊文件系统,aufs(代码太差,文件系统一直没有运用到内核,所以不支持,需要打补丁,rhel不支持,ubantu支持。rhel另外的一个实现dm,性能差。所以centos支持了overlayfs),)客户端与服务端通过http 通信。
在dockr 中一个具体的镜像就是一个对象。容器,image 都是一种数据格式 。向容器对应格式填充一些数据。那就是容器对象
启动过程:客户端创建容器,把dockerdaemon支持容器的格式进行赋值,容器启动
5.部署安装docker
docs.docker.com #官方文档地址
Install Docker Engine on CentOS | Docker Documentation #官方安装指导文档
1.卸载旧版本
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
2.增加仓库,#建议在aliyun 进行添加仓库
sudo yum install -y yum-utils sudo yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo
3.安装并增加国内镜像加速器
yum install docker-ce
/etc/docker/daemon.json 添加如下内容
{
"registry-mirrors": [
"https://registry.docker-cn.com"
]
}
systemctl restart docker
docker info #查看详细信息
images:
镜像名就是仓库的名字就叫mysql, 那么怎么标识镜像。每一个镜像的标识符叫做镜像标签
docker 运行状态图
命令:
镜像类命令
docker search redis #搜索reids 镜像
docker pull redis:4-alphine #拉取镜像
docker image ls #查看镜像
docker image inspect redis:4-alpine #查看镜像的详细信息
镜像说明:
对于docker来讲,有一个专门的位置来放镜像,并且为特殊格式。Graph driver (aufs overlay2 表现为宿主机上的一个目录 ,在本地文件系统之上的二级文件系统)
[root@web1 ~]# ls /var/lib/docker/image/
overlay2
可以在docker info 的storage Driver 中字段可以查看到相关信息。建议一级文件系统使用xfs.我们对象都放在对应地方存储空间当中了,以redis 镜像为例,redis 低下可能是alpine.向上是我们运行的redis 应用程序。这两个在我们存储目录中是不变的。当我们需要启动一个容器。直接把这两层联合挂载起来。当我们目标运行在这个目录之外的容器文件系统,并且容器底层在附加一层。他把附件的一层和那两层叠加起来形成容器内部的可访问的文件系统接口,其中底下两层可读。写操作只能在最上一层。
联合挂载:先挂第一层,把第二层叠上来,第二层没有,第一层有,在第二层能看见第一层。两层都有,二层就覆盖一层
挂载的三个镜像层,改某个文件则使用cow机制,写时复制
容器类命令
docker run -it --name c1 ubuntu:14.04 /bin/bash #运行一个容器
docker container ps / docker ps
docker ps -a
-rm docker 停止将立即删除
docker container rm c1 #删除已经停止的容器,正在运行的容器不能删除
docker run -d --name c1 ubuntu:14.04 #-d 后台运行此容器
docker container exec -it redis /bin/sh #运行正在运行的名称为redis 的容器
docker container exec redis netstat -ln #不进入,运行一次就退出
docker stop redis #在容器外停止容器
以上命令为运行一个nginx容器,并且用sh替代他默认的cmd.停止后立即删除
如果把一个守护进程运行在一个容器中。而且作为id号为1的进程时。此进程必须运行在前台
docker container logs redis #查看容器内日志
docker 日志是直接发往控制台,发往终端。而没有记录在文件中,便于收集
docker container stats redis #查看资源占用情况
docker container top redis
ctrl p 之后ctrl q 脱离这个终端然后继续运行。例如ubantu 的镜像,docker attach c1 #恢复回去
仓库:
docker hub:
镜像仓库
自动构建
制作镜像
上传到镜像仓库
带alphine会很小,这是容器系统发行版
docker run ----先创建并且立即启动
启动一个容器后宿主机就会多一个docker0的桥
docker ps -a
探测网页的几个方式
elinks -dump 172.25.101.101
wget -O - -q 172.25.101.101
curl 172.25.101.101