1,概述
虚拟化技术:容器(应用层)、虚拟机(软件层)
docker:隔离,镜像占用资源小,秒级
vm:GB级
docker基于Go语言开发的
2,docker基础
2.1,架构
图1 架构图
镜像(image):
docker镜像就像一个模板,例如:redis镜像》run》redis容器(对外提供服务)
一个镜像可以创建多个容器!!!
容器(container):
利用容器技术独立运行一个或者一组应用,通过镜像创建
启动、停止、删除
仓库(repository):类似github、gitlab代码仓库
存放镜像的地方:公有仓库和私有仓库
2.2,安装docker
图2 查看自己的服务器内核情况
图3 通过数据库
# 1,先删除老版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 2,设置仓库
sudo apt-get update
sudo apt-get install \
ca-certificates \
curl \
gnupg \
lsb-release
# 3,直接进入阿里云docker加速镜像设置国内的镜像地址(https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors)
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://g8kfoxhi.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 4,安装docker
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io
# 5,查看是否安装成功(执行hello-world程序)
docker search hello-world
docker pull hello-world
docker run hello-world
# 其他 docker的资源路径
/var/lib/docker
# 如果想要协助该资源则可以直接
rm -rf /var/lib/docker
2.3,docker hello-world启动流程
图4 docker镜像启动流程
2.4,底层原理
docker是怎么工作?
docker是一个Client-Server结构的系统,docker的守护进程运行在主机上。通过socket从客户端访问!
图5 docker底层
docker为什么比虚拟机快?
1,docker只在应用层进行抽象
2,docker(秒级别)利用的是宿主机的内核,vm(分钟级别)需要Guest OS
所以说,新建一个容器的时候,docker不需要像虚拟机那样重新加载一个操作系统内核,避免引导!
图6 虚拟机与docker架构区别
图7 docker与虚拟机的性能差异
备注:当前docker也支持全平台
2.5,docker常用命令
帮助命令
docker version # 显示版本
docker info # 系统信息
docker [命令] --help # 帮忙命令
镜像命令
docker images # 查看所有镜像
REPOSITORY
搜索
docker search [namelike]
Options:
-f, --filter filter Filter output based on conditions provided
--format string Pretty-print search using a Go template
--limit int Max number of search results (default 25)
--no-trunc Don't truncate output
下载
docker pull [name] # 如果不写tag,默认就是latest
Usage: docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Pull an image or a repository from a registry
Options:
-a, --all-tags Download all tagged images in the repository
--disable-content-trust Skip image verification (default true)
--platform string Set platform if server is multi-platform capable
-q, --quiet Suppress verbose output
例如:
docker pull mysql
docker pull docker.io/library/mysql:latest # 等价
删除镜像
docker rmi -f ${docker images -qa} # 删除所有
docker rmi -f [镜像id 镜像id ...] # 删除单个或多个
3,
4,
参考链接:
https://docs.docker.com/get-started/overview/