docker
应用部署方式
传统企业应用构建
应用被直接部署在操作系统之上,并且操作系统直接安装于硬件之上
应用被操作系统绑定
操作系统被硬件绑定
缺点
- 部署非常慢
- 成本非常高
- 资源浪费
- 难于迁移和扩展
- 被限定硬件厂商
虚拟化应用部署
应用被直接部署在操作系统之上,操作系统安装于虚拟硬件之上,虚拟硬件依赖硬件
应用被操作系统绑定
操作系统被封装于文件中,可以在硬件设备之间自由的传播
优点
- 隔离分区
- 文件封装
- 资源池
- 易扩展
- 易上云
缺点
- 资源浪费
- 启动速度慢
- 迁移过程慢
- 不能适应SOA架构
容器部署应用
在容器引擎中运行容器,在独立的容器中运行应用
应用与容器捆绑
容器只依赖于容器引擎
容器不与操作系统和硬件绑定
docker与虚拟机的区别


docker的特性
- 进程号隔离,在容器中的PID会和宿主机的PID有一个映射关系,每个容器都是进程号隔离的。
- 文件隔离,每个容器都有一个独立的文件夹,存放文件系统。
- 网络隔离,每个容器都有一个独立的虚拟网卡。
- 环境变量隔离,每个容器的环境变量都是独立的。
- 容器的生命周期跟随主命令,命令执行结束,就Exit,命令执行结束包括(正常,非正常,阻塞)都是算结束
docker常用命令
镜像相关
docker search nginx: #搜索nginx相关镜像
由于search使用不了
所以可以在https://hub.docker.com/search上搜索然后直接pull它
pull命令是可以用的
docker pull nginx:1.20 #下载镜像,如果不指定版本则默认下载latest最新的,但是查看镜像时也会显示latest,以后更新了它不是最新版也显示latest容易让人误判,建议直接指定版本
docker images # 查看镜像
docker rmi nginx:1.20||id # 删除本地镜像
容器相关
docker ps # 查看存活的容器
docker ps -a # 查看所有的容器
docker ps -l # 查看最新的容器
docker ps -q # 查看所有容器的id
docker ps -qa # 查看所有存活容器的id
docker run rockylinux:9.3 # 启动容器,默认容器的命令时/bin/bash
docker run -it rockylinux:9.3 #-it打开一个控制台交互界面,如果遇到阻塞不会退出
dockers run -d centos:7 ping -c 5 qq.com # -d的意思时挂后台,比如这个例子就不会把ping的结果显示出来
docker run --rm centos:7 ping -c 10 qq.com # --rm 当容器运行结束的时候,自动删除
docker run -p 8080:80 nginx:1.20 # -p 8080:80 将容器的80端口映射到主机的8080端口上
docker run -P ngixn:1.20 # 将容器建议开放的端口映射到随机端口
docker run --net=host # 开放容器需要的端口给容器
docker run -v <主机上的目录>:<容器里的目录> # 挂载主机里的文件到容器中
docker run --name "容器名" # 修改容器的名字
docker rm 容器id # 删除容器
docker rm -f `docker ps -qa` #删除所有的容器
docker logs 容器名||容器id # 查看容器运行日志,比如前面那个ping的结果就可以在这里看到
docker stats <容器ID> # 查看容器资源占用
docker attach <容器ID> #进入容器的主任务 ctrl p+q即可以离开容器,但是不关闭容器
docker start <容器ID> #启动一个已经退出的容器
docker stop <容器ID> #给容器发出退出指令
docker kill <容器ID> #强制结束容器(有数据丢失的风险)
docker exec -it <容器ID>bash #进入容器,并且进入到bash中
docker port <容器ID> # 查看容器的映射端口
docker inspect <容器ID> # 查看容器的详细信息
docker export f299f501774c > hangger_server.tar 将镜像导出为文件
docker攻防
docker逃逸。。。
暂没时间研究