docker 学习总结
1、什么是docker
Docker是一个开源的引擎,可以轻松的为任何应用创建一个轻量级的、可移植的、自给自足的容器。开发者在笔记本上编译测试通过的容器可以批量地在生产环境中部署。
Docker是实现轻量级的操作系统虚拟化解决方案。 Docker的基础是Linux 容器(LXC)等技术。
docker常用场景
web应用的自动化打包和发布;
自动化测试和持续集成、发布;
在服务型环境中部署和调整数据库或其他的后台应用;
2、docker和虚拟机的不同之处
Docker 扩展了 Linux 容器,利用了 LXC、cgroups 和 Linux 自己的内核,通过一个高层次的 API 为进程单独提供了一个轻量级的虚拟环境。和传统的虚拟机不同的是,一个Docker容器并不包含一个单独的操作系统,而是基于已有的基础设施中操作系统提供的功能来运行的。Docker会像一个可移植的容器引擎那样工作。它把应用程序及所有程序的依赖环境打包到一个虚拟容器中。docker容器是在操作系统层面上实现虚拟化,直接复用本地主机的操作系统,而传统方式则是在硬件层面实现。
所以docker相比虚拟机有以下优势:启动速度快(磁盘占用空间小,采用了分层技术,构建的镜像大小,只有自身的大小)、资源利用率高(docker容器共享的宿主机的内核,没有操作的进程消耗)、性能开销小,大大地降低了环境配置管理的复杂度,提高了产品的应用部署效率,可以做到“一次配置,到处运行”。
3、docker 操作结构
Docker是一个C/S架构,分为:
Docker Client: Docker的客户端
Docker Server: Docker daemon的主要组成部分,接收用户通过Docker Client 发送的请求,并按照相应的路由规则实现路由分发
Docker Registry: Registry是Docker镜像的中央存储仓库(pull/push)通过Docker pull命令可以把Registry上的docker镜像,下载到服务器本地,通过docker push命令可以把服务器本地的docker镜像,上传到Registry上
4、docker基本概念
Dockerfile --用户使用 Dockerfile 可以创建自定义的镜像
镜像(Image)--Docker 镜像就是一个只读的模板,用来创建 Docker 容器
容器(Container)--Docker 利用容器来运行应用,容器是从镜像创建的运行实例。它可以被启动、开始、停止、删除。每个容器都是相互隔离的、保证安全的平台。容器可看做一个简易版的 Linux 环境(包括用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序。仓库(Repository)--仓库是集中存放镜像文件的场所,概念和git类似。
Dockerfile 是软件的原材料,Docker 镜像是软件的交付品,而 Docker 容器则可以认为是软件的运行态。从应用软件的角度来看,
Dockerfile、Docker 镜像与 Docker 容器分别代表软件的三个不同阶段,Dockerfile 面向开发,Docker 镜像成为交付标准,
Docker 容器则涉及部署与运维,三者缺一不可,合力充当 Docker 体系的基石。简单来讲,Dockerfile构建出Docker镜像,通过Docker镜像运行Docker容器。
5、docker底层实现
1、namespace(命名空间),是属于linux内核的一个强大的特性,docker使用该特性保证每个docker容器都有自己单独的名字空间,
运行在其中的应用都像是在独立的操作系统中运行一样。名字空间保证了容器之间彼此互不影响。
包括pid 命名空间(隔离不同用户的进程)、net 命名空间(隔离各容器的网络配置)、ipc 命名空间(隔离各容器的进程交互)
mnt 命名空间(隔离文件目录结构)、user 命名空间(保证每个容器可以有不同的用户和组 id)
2、cgroups(控制组),是 Linux 内核的一个特性,主要用来对共享资源进行隔离、限制、审计等。
docker利用linux的cgroups控制分配到各容器的资源,避免当多个容器同时运行时的对系统资源的竞争。
3、联合文件系统,是一种分层、轻量级并且高性能的文件系统,它支持 对文件系统的修改作为一次提交来一层层的叠加,
同时可以将不同目录挂载到同一个虚拟文件系统下。联合文件系统是 Docker 镜像的基础。镜像可以通过分层来进行继承,基于基础镜像(没有父镜像),可以制作各种具体的应用镜像。
另外,不同 Docker 容器就可以共享一些基础的文件系统层,同时再加上自己独有的改动层,大大提高了存储的效率。
docker采用联合文件系统为每一个成员目录设定只读、读写和写出权限,同时利用分层概念,
对只读权限的分支可以逻辑上进行增量地修改(不影响只读部分的)。
4、网络实现,docker利用了 Linux 上的网络名字空间和虚拟网络设备来实现其网络结构。Docker 中的网络接口默认都是虚拟的接口。
分为四种网络模式:
①、bridge模式,是docker的默认网络模式。通过在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
②、Host模式,容器将不会获得一个独立的网络命名空间,而是和宿主机共用一个网络命名空间。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。
③、Container模式,指定新创建的容器和已经存在的一个容器共享一个网络命名空间,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。
④、None模式,Docker容器拥有自己的网络命名空间,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等
6、常用命令
docker version--查看docker版本信息
docker info --查看docker环境信息
docker run --运行镜像得到容器实例
docker images --查看镜像信息
docker ps --查看容器信息
docker stop --停止容器
docker exec --进入一个后台运行的容器
docke restart --重启容器
docker pull/push--下载/上传docker镜像
docker rm --删除容器
...
如:运行一个tomcat镜像,并通过宿主机58080端口对外公开tomcat应用,同时,将宿主机的/root/webapps/和/root/logs/目录挂载到容器中,
可用于便捷操作tomcat应用和监控tomcat日志文件
docker run -d -p 58080:8080 -v /root/webapps/:/opt/tomcat/webapps/
-v /root/logs/:/opt/tomcat/logs --name cat_1 superzhan/mytomcat /root/run.sh