docker学习
Docker体系结构
containerd:是一个简单的守护进程,使用runc管理容器
Shim:只负责管理一个容器
runC:是一个轻量级的工具,只能用来运行容器
内部组件
namespaces:
命名空间,linux内核提供的一种资源隔离的机制,如进程,网络,挂载点等资源
CGroup:
控制组,linux内核提供的一种限制进程资源的机制,例如cpu,内存等资源
unionFS
联合文件系统,支持将不同位置的目录挂载到同一虚拟文件系统,形成一种分层的模型。
虚拟机与容器的区别
infrastructure:计算机硬件
Hypervisor:虚拟机与操作系统的中间,承上启下,可以配置多个cpu,作为资源调度
vm:虚拟机是文件系统和库文件
container:容器,共享宿主机的系统
启动时间
docker秒启动,kvm分钟级启动
轻量级
容器是M为单位,占用资源小,部署更快速,虚拟机以G为单位,
性能
容器共享宿主机内核,性能接近无机器
开销大,性能低
安全性
知识进程隔离,稳定性不如虚拟机
应用场景
场景一:节省项目环境部署时间
场景二:环境一致性,可移植性
场景三:持续集成
场景四:微服务
场景五:弹性伸缩
小结:
安装
第二章镜像管理
镜像
daemon.json:docker跨平台的配置文件
镜像与容器联系
overlay2:存储驱动
ubuntu:默认aufs;
deviceapper早期版本,性能差;
overlay2:现在一般用overlay2,docker自主研发,性能最好,支持文件系统恶心他,sfs
镜像管理命令
容器管理
创建一个容器:bs
查看当前进程的容器:
docker container ls
查看当前容器的详情信息:
docker container inspect 3d9fe986d8fd
将Docker主机数据挂载到容器
volumes
volume指令:
docker volume --help
创建卷
docker volume create nginx-vol
打开卷:
docker volume inspect nginx-vol
-v形式不建议使用
数据共享,多个服务器可以共用一个数据卷,
如果不指定数据卷的话,会默认创建一个数据卷,并随机生成一个命名卷和匿名卷
通过卷创建容器:
docker run -d -it --name=nginx-test --mount src=nginx-vol,dst=/usr/share/nginx/html nginx
dst:挂载点
src:数据卷
进入容器命令:
docker exec -it nginx-test bash
查看:默认页
在数据卷添加数据:
另一边也可以看得到
删除我所有创建的容器:
docker rm -f $(docker ps -q -a)
容器删除后数据卷还在,现在引入数据命令:并暴露端口号,用于测试
docker run -d -it --name=nginx-test -p 88:80 --mount src=nginx-vo1,dst=/usr/share/nginx/html nginx
Bind Mounts
搭建LNMP网站平台
第六章Dockerfile
dockerfile指令:
构建java网站环境镜像