一、Docker出现背景
docker追求的问题/目标是什么?
云计算兴起后,服务器硬件扩展非常便利,软件服务部署成为了瓶颈,docker趁势而兴。
环境配置是十分的麻烦,每一个机器都要部署环境(集群Redis、ES、Hadoop...) 费时费力。
二、Docker的历史
2010年,几个搞it的年轻人,就在美国成立了一家公司 dotCloud,做一些 pass 的云计算服务!LXC有关的容器技术。
他们将自己的技术 容器化技术 命名就是Docker!!
因为公司经营不下去,开放源代码
在容器技术开发出来之前,我们都是使用虚拟机技术!
虚拟机:在window中装一个Vmware,通过这个软件我们可以虚拟出来一台或者多台电脑!笨重!
虚拟机也是属于虚拟化技术,Docker容器技术,也是一种虚拟化技术!
Docker 是基于Go语言开发的!开源项目!
Docker的文档是超级详细的
三、docker能干嘛
1、更快速的交付和部署
传统:一堆帮助文档,安装程序
docker:打包镜像发布测试,一键运行。
2、更便捷的升级和扩缩容
使用了Docker之后,我们部署应用就和搭积木一样!
项目打包为一个镜像,扩展 服务器A!服务器B
3、更简单的系统运维
在容器化之后,我们的开发,测试环境都是高度一致的
4、更高效的计算资源利用
Docker是内核级别的虚拟化,可以在一个物理机上可以运行很多的容器实例!服务器的性能可以被压榨到极致。
四、Docker安装
镜像:image
docker镜像就好比是一个模版,可以通过这个模版来创建容器服务,tomcat镜像====》run =====>tomcat01(提供服务)
通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)
容器:container
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建
启动、停止、删除、基本命令!
目前就可以把这个容器理解为就是一个简单的Linux系统。
仓库:repository
仓库就是存放镜像的地方!
仓库分为公有仓库和私有仓库!
Docker Hub (默认是国外的)
阿里云。。。都有容器服务器(配置镜像加速!)
(购买阿里云)
docker run hello-world
配置阿里云镜像加速:共四步
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json << -'EOF'
{
"registry-mirrors":["https://qiyb9988.mirror.aliyun.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
五、底层原理
Docker是怎么工作的?
Docker 是一个Client-Server结构的系统,Docker的守护进程运行在主机上,通过socket从客户端访问!
DockerServer 接收到Docker-Client的指令,就会执行这个命令!
Docker为什么比虚拟机块?
1、Docker有着比虚拟机更少的抽象层
2、Docker利用的是宿主机的内核,vm需要的是Guest OS.
所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导,虚拟机是加载 Guest OS,分钟级别的,
而docker是利用宿主机的操作系统,省略了这个复杂的过程,秒级!
六、Docker常用命令
1、帮助命令
docker version 显示docker版本信息 docker info 显示docker的系统信息,包括镜像和容器的数量 docker --help 帮助命令 帮助文档命令:https://docs.docker.com/engine/reference/commandline/dockerd/
2、镜像命令
docker images
解释:
REPOSITORY 镜像的仓库源
TAG 镜像的标签
IMAGE ID 镜像的id
CREATED 镜像的创建时间
SIZE 镜像的大小
#可选项
-a --all 列出所有镜像
-q --quiet 只显示镜像的id
docker images
docker search mysql 搜索镜像
# 可选项 通过收藏来过滤
--filter=STARS=3000
docker pull mysql 下载最新的mysql
docker pull mysql:5.7
docker rmi -f d1165f221234 删除镜像 根据镜像id来删除
3、容器命令
说明:我们有了镜像才可以创建容器,linux,下载一个centos镜像来测试学习
docker pull centos
新建容器,并启动
docker run [可选参数] image
#参数说明
--name="Name" 容器名字 tomcat01 tomcat02 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p 随机指定端口
docker ps