一、docker是什么
- 是一个开源的应用容器引擎,基于go语言开发并遵循了apache2.0协议开源
- 是在Linux容器里运行应用的开源工具
- 是一种轻量级的“虚拟机”
- Docker 的容器技术可以在一台主机上轻松为任何应用创建一个轻量级的、可移植的、自给自足的容器
总结
是go语言开发的开源的容器引擎
是一种轻量级的“虚拟机”
是可以实现容器应用的一次封装,到处运行
Docker的logo
- Docker的Logo设计成蓝色蓝鲸,拖着很多的集装箱
- 鲸鱼可以看作是宿主机,集装箱可以理解成相互隔离的容器,每个集装箱内都有自己的应用程序
Docker的设计宗旨
Docker的设计宗旨:Build,Ship and Run Any App,Anywhere
- 即通过对于应用程序的封装、发布、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”的目的,这里的组件,既可以是一个应用,也可以是一套服务,甚至是一个完整的操作系统
- docker是创建容器的工具,应用运行在容器中,每个容器都有一致的运行环境,所以可以在任何主机中运行。即实现“一次封装,到处运行的目的”
1.1容器的特点
容器化越来越受欢迎,因为容器是:
- 灵活:即使是最复杂的应用也可以集装箱化。
- 轻量级:容器利用并分享主机内核
- 可互换:可以即使部署更新和升级
- 便携式:可以在本机构建,部署到云,并在任何地方运行
- 可扩展:可以增加并自动分发容器副本
- 可堆叠:可以垂直和及时堆叠服务
1.2 docker 容器和 虚拟机的区别
| docker容器 | 虚拟机 |
|---|---|
| 共享宿主机内核 | 拥有独立的操作系统 |
| 启动速度快,秒级 | 分钟级 |
| 性能接近原生,几乎无损耗 | 通过hypervisor对主机进行虚拟访问,会多占用一些资源,性能弱于容器,最多损耗百分之五十 |
| 单机容量 成百上千个 | 几十个 |
| 通过namespace隔离,通过cgroup资源限制 | 完全隔离 |
cgroup:代表容器能够使用的资源的上限
namesapce:实现资源隔离
一个容器可以当作一个进程
| namespace | 系统调用参数 | 隔离内容 |
|---|---|---|
| UTS | CLONE_NEWUTS | 主机名与域名 |
| IPC | CLONE_NEWWIPC | 信息量、消息队列和共享内存 |
| PID | CLONE_NEWPID | 进程编号 |
| NETWORK | CLONE_NEWNET | 网络设备、网络栈、端口等 |
| MOUNT | CLONE_NEWNS | 挂载点(文件系统) |
| USER | CLONE_NEWUSER | 用户和用户组(3.8以后的内核才支持) |
物理机 裸金属
虚拟机 VMware Workstation(个人版) VMware Sphere+ESXI(企业级) KVM(基于linux系统内核创建的虚拟机) OpenStack(基于KVM创建的虚拟机) 公有云/专有云/混合云
容器 docker podman rocket containerd
容器编排 K8S docker swarm
1.3 docker的三大核心
镜像:创建容器的基础,就是一个可执行的压缩包,是一个只读模板,包含运行应用程序所需要的所有资源(代码、运行时间、库、环境变量、配置文件)
容器:基于镜像创建的运行实例,它可以被启动、删除和停止,所创建的每一个容器间相互隔离,互补可见的
仓库:用于集中存放镜像的地方,可分为共有仓库和私有仓库,Docker的的镜像、容器、日志等内容都默认存储在/var/lib/docker目录下
1.4 docker的安装
#关闭防火墙和selinux
systemctl stop firewalld.service
setenforce 0
#安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
--------------------------------------------------------------------------------------------
#yum-utils:提供了 yum-config-manager 工具。
#device mapper: 是Linux内核中支持逻辑卷管理的通用设备映射机制,
它为实现用于存储资源管理的块设备驱动提供了一个高度模块化的内核架构。
#device mapper存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
--------------------------------------------------------------------------------------------
#设置阿里云镜像源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#安装 Docker-CE并设置为开机自动启动
yum install -y docker-ce #docker-ce-cli、containerd.io 会作为依赖包被安装
systemctl start docker.service
systemctl enable docker.service
二、docker的镜像管理命令
2.1搜索镜像
docker search 关键字 (镜像名称或者关键字)
2.2下载镜像
格式: docker pull 镜像名称[:标签]
docker pull nginx 下载镜像文件
2.3 查看本地有哪些镜像
镜像下载后存放在 /var/lib/docker
#查看下载到本地的所有镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 88736fe82739 2 days ago 142MB
#注释:
REPOSITORY:镜像属于的仓库;
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小;
#镜像下载后存放在 /var/lib/docker
#查看下载的镜像文件信息
cat /var/lib/docker/image/overlay2/repositories.json
docker images
docker images -q 查看所有镜像的id号
2.4 为本地镜像添加新的标签
docker tag 原仓库名/原镜像名:源标签 新仓库吗/新镜像名:新标签
2.5 删除镜像
1.删除镜像名:标签
docker rmi 镜像名:标签
2.删除镜像id 多个镜像的话需要加-f
docker rmi -f 镜像ID
3.批量删除镜像
docker rmi $(docker images -q)
2.6 保存镜像到本机中
格式:docker save -o 存储文件名 存储的镜像
docker save -o mynginx.tar nginx:latest #打包镜像命名为mynginx.tar存在当前目录下
ls -lh
2.7 镜像载入到镜像库中
格式:
docker load < 存出的文件
或者
docker load -i 存出的文件
2.8 将镜像上传到官方仓库
docker tag nginx:latest huli/nginx #添加新的标签,在镜像名称前加上仓库名,huli为仓库名称
docker login #登录公共仓库
Username: #账号
password: #密码
docker push huli/nginx #上传镜像
docker search huli #搜索huli仓库中的镜像
docker pull huli/nginx #下载huli仓库中的镜像
