1,什么是docker
Docker是基于Go语言实现的开源容器项目,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,
并发布和应用到任意平台中。直接基于Linux内核,支持各种语言,它比VM虚拟机更加轻量。
Docker用途 和tomcat的区别:
两者不是同一种类型。
1、docker 是容器,tomcat是jsp应用服务器( Tomcat是一个开放源代码、运行servlet和JSP Web应用软件的基于Java的Web应用软件容器。Tomcat Server是根据servlet和JSP规范进行执行的)
2、tomcat可以安装在物理机上,虚拟机上,也可以安装在Docker上。所以从这个角度讲,Docker也可以看做是一种超轻量化的虚拟机。
3、Docker可以安装在物理机,虚拟机上,但不知道Docker上面是否可以再安装Docker,我觉得理论上应该可以。
4、Docker作为超轻量级的平台,可以整体移植,这也是它流行的其中一个原因。
Docker 提供轻量的虚拟化,你能够从Docker获得一个额外抽象层,你能够在单台机器上运行多个Docker微容器,而每个微容器里都有一个微服务或独立应用,例如你可以将Tomcat运行在一个Docker,而MySQL运行在另外一个Docker,两者可以运行在同一个服务器,或多个服务器上。未来可能每个应用都要Docker化。
见:https://www.cnblogs.com/panchanggui/p/10691308.html
2, Docker容器特点
-
启动速度
启动虚拟机需要先启动虚拟机的操作系统,再启动应用,这个过程非常慢;而启动 Docker 相当于启动宿主操作系统上的一个进程。 -
占用资源
虚拟机是一个完整的操作系统,需要占用大量的磁盘、内存和 CPU 资源,一台机器只能开启几十个的虚拟机;而 Docker 只是一个进程,只需要将应用以及相关的组件打包,在运行时占用很少的资源,一台机器可以开启成千上万个 Docker。 -
部署快
生产或者开发环境共用一套或者几套docker环境地址,可通过控制部署流程的执行脚本部署代码。
例如:
git clone https://github.com/my-project
sh ./my-build-boot.sh (执行启动程序shell) -
隔离性好
往往我们一台机器上可能需要跑多个服务, 而多个服务运行环境各不相同,甚至两个或者多个应用有依赖冲突,docker可以将它们很好的分离。 -
安全性:
同一台机器的多个服务中,其中一个报警,不影响其它docker中任务的正常运行。
镜像与容器:
镜像是一种静态的结构,可以看成面向对象里面的类,而容器是镜像的一个实例。
镜像包含着容器运行时所需要的代码以及其它组件,它是一种分层结构,每一层都是只读的(read-only layers)。构建镜像时,会一层一层构建,前一层是后一层的基础。镜像的这种分层存储结构很适合镜像的复用以及定制。
构建容器时,通过在镜像的基础上添加一个可写层(writable layer),用来保存着容器运行过程中的修改。
3, Docker的三个概念
- 镜像(Image):
类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。 - 容器(Container):
类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。 - 仓库(Repository):
类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别: 注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。
参考:http://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html
image和容器 区分:
1,image 文件生成的容器实例,本身也是一个文件,称为容器文件。
2,也就是说,一旦容器生成,就会同时存在两个文件: image文件和容器文件。
3,而且关闭容器并不会删除容器文件,只是容器停止运行而已
此处摘用菜鸟教程一句话:镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等
4, Docker的仓库
Docker Hub 有两种仓库:
一种是用户仓库,一种是顶层仓库。
用户仓库是由开发人员自己创建的,顶层仓库是由Docker Hub 内部人员管理。
用户仓库的命名由两部分构成,如 cxuan/ubuntu
用户名 例如 : cxuan; 仓库名 例如 : ubuntu
- 顶层仓库的命名就比较严谨,如 ubuntu 仓库。顶层仓库由 Docker 公司和选定的优质基础镜像厂商来管理,用户可以基于这些镜像构建自己的镜像。
5.拉取镜像
- https://hub.docker.com/ 注册
- Docker login
- docker images
把本地镜像打标签,dockerzqh 为你注册的用户名,dockerzqh/hellos为仓库名,v6为标签名 - docker tag hello-world dockerzqh/hellos:v6
- docker pull dockerzqh/hellos:v6 上传镜像(为开源的 私有的要钱)
- docker tag hello-world dockerzqh/hellos:v6
参考 https://blog.csdn.net/a350301941/article/details/96329331
6. 实操:搭建docker (以centOS为例)
(一步步搭建简单docker 包括上传镜像拉去镜像)
安装:curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
启动:service docker start (检测是否启动:ps -ef|grep docker)
搜索镜像:docker search [option] keyword
比如:docker search mysql docker search java docker search python
下拉镜像:docker pull centos
初始化镜像并进入docker容器: docker run -it ubuntu:latest(REPOSITORY: TAG) /bin/bash
查看已经创建的容器:docker container ls --all
查看启动的容器:docker container ls
停止的容器进行启动:docker start 55ca9501f265
进入已启动的docker容器: docker attach eef0b9b9fdca [conatinerId]
退出容器:exit
退出容器但又不想让容器停止:Ctrl+P+Q
终止容器运行: docker container kill [containerID]
删除 image 文件: docker image rm [imageName]
实操截图:
希望大家有所收获,谢谢!