Docker基础知识介绍
本节内容
一 Docker概述 |
Docker是什么
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,
然后发布到任何流行的Linux机器上,也可以实现虚拟化
通俗理解:
- Docker容器将软件以及它运行安装所需的一切文件打包到一起,这就保证了不管是在什么样的运行环境,总是能以相同的方式运行,
就好像Java虚拟机一样,“一次编写,到处运行”,而Docker是“一次构建,到处运行”
- 2. 可以理解为虚拟机的升级版,但比虚拟机更灵活、性能更高、更轻便、启动速度更快
Dcoker组件
Docker Client:向docker服务器进程发起请求,如:创建、停止、销毁容器等操作,就是docker服务端的远程控制器,docker 命令
Docker Server 服务器进程:处理所有docker的请求,管理所有容器
Docker Registry 镜像仓库:镜像存储的中央仓库
大部分情况下,Docker 服务端和客户端运行在一台机器上
镜像、容器、仓库的概念
- 镜像可以用来创建Docker容器。一个镜像可以包含一个完整的操作系统环境和用户需要的其他应用程序。
在docker hub里面有大量现成的镜像提供下载。docker的镜像是只读的,一个镜像可以创建多个容器
容器是来开发、运行应用。每个容器都是相互隔离的、保证安全的平台
仓库是集中存放镜像文件的场所,每个镜像文件有不同的标签(tag)。最大的公开仓库是DockerHub,存放了数量庞大的镜像供用户下载,
国内的公开仓库包括DockerPool
Docker导图
二 Docker的安装 |
"""
CentOS7 64位
安装一个干净的CentOS 7 64位虚拟机 yum upgrade -y
yum install net-tools -y
yum install gcc zlib-devel openssl-devel gcc+ gcc-c++ openssl perl lrzsz wget -y
关闭SELINUX=disabled vim /etc/selinux/config yum install docker -y
chkconfig docker on
service docker start
docker run hello-world
docker version
"""
版本信息
三 Docker基本使用 |
下载镜像
docker seach tomcat # 搜素官方镜像库
docker pull docker.io/tomcat # 下载镜像, 完整镜像名字,或者通过image_id
docker images # 查看本地镜像
docker rmi docker.io/tomcat # 删除镜像, 完整镜像名字,或者通过image_id,选项-f 强制删除
运行镜像 - 容器
docker run -p 8081:8080 docker.io/tomcat # 把tomcat的8080映射到8081
http://192.167.254.250:8081
docker ps # 查看运行的容器
docker stop container_id # 停止容器
部署应用程序到docker
cd /opt/www
docker run -v /opt/www:/usr/local/tomcat/webapps/www -p 8080:8081 docker.io/tomcat
利用dockerfile创建自己的镜像
vi Dockerfile 这个也是在上面的目录中创建,内容如下:
#命令必须大写,执行顺序从上到下顺序进行
#指定一个镜像的名字,如果本地存在则可以直接使用该镜像,如果本地不存在会从Docker仓库自动下载,后续的所有指令都是基于该镜像进行
FROM docker.io/darksheer/centos #告诉Docker创建该镜像人的名字、邮箱
MAINTAINER Jonathan <nining1314@gmail.com> #ADD是将外部文件copy到镜像里
ADD ./apache-tomcat-7.0.70.tar.gz /root
ADD ./jdk-7u80-linux-x64.tar.gz /root #ENV是在镜像中设置环境变量
ENV JAVA_HOME /root/jdk1.7.0_80
ENV PATH $JAVA_HOME/bin:$PATH #RUN是在镜像中运行此命令
#RUN yum -y upgrade #容器指定的端口号
EXPOSE 8080 #启动容器的时候执行设定的命令
ENTRYPOINT /root/apache-tomcat-7.0.70/bin/startup.sh && tail -F /root/apache-tomcat-7.0.70/logs/catalina.out
docker build -t jonathantomcat . # . 表示当前目录找 Dockerfile
docker images # 查看是否创建完成
提交镜像到docker hub
1. 官网注册账号 https://www.docker.com
2. docker push 已经构建好的镜像全称
四 Docker相关命令汇总 |
五 Docker概念理解 |
Docker 通俗理解
1、集装箱标准化,互不影响,大货轮统一运走。云计算好比大货轮,Docker就是就是集装箱。
2、虚拟机开销比较高,Docker开销比较小。
3、Docker是容器,容器放应用。
4、Docker的logo来解释,鲸鱼和集装箱。
大鲸鱼(或者货轮)就是操作系统,把要交付的应用程序看成是各种货物。
原本要将各种尺寸、不同形状的货物放到大鲸鱼上,你得为每件货物考虑怎么安放(就是应用程序的配置环境),
还得考虑货物和货物是否能叠起来(应用程序的依赖环境是否会冲突)。
现在使用了集装箱(容器)把每件货物都放在集装箱里,这样大鲸鱼可以用同样的方式安放、堆叠集装箱
Docker就是这整套机制。
5、苹果上的app,linux上的docker
6、自如单间租房,就是docker,不仅能做资源隔离,还规范化系统化了(repo/image),所有房间(container)统一装修和家具,
你交钱签约就能享受一个相对独立的生活环境(environment)了,你自己的东西在你屋子里随便摆,都可以的;
对中介来说,你当下不过就是个正在running的instance,的当你gameover了以后,这个房间他还可以以很小的代价租给别人run,效率颇高。
7、同一个容器贯穿开发、测试、生产和交付四个环节
基于虚拟机的虚拟化和基于容器的虚拟化
非正式的说,虚拟化是通过软件手段对计算机硬件资源镜像、整合、管理和再分配的一种技术。 最常用的是基于虚拟机(Hypervisor-based)的虚拟化,经过40年发展,基于虚拟机的虚拟化技术已经比较成熟,它通过一个软件层的封装, 提供和物理硬件相同的输入输出表现,实现了操作系统和计算机硬件的解耦,将OS和计算机从1对1变成了多对多(实际上是1对多)的关系。 该软件层称为虚拟机管理器(VMM/Hypervisor),它可以直接运行在裸机上,也可以运行在操作系统上。 这样方案有一个缺陷,在虚拟机上运行了一个完整的操作系统(GueseOS),在其下执行的还有虚拟化层和宿主操作系统,一定比直接在物理机上 运行相同的服务性能差。而且有GuestOS的存在,虚拟机镜像往往有几个G到几十个G,占用的存储空间大,便携性差,迁移时通信代价大, 不便于集群管理。另外另外每次想用使用更多硬件资源,需要启动一台新的虚拟机,要等待GuestOS启动,可能需要几十秒到几分钟不等。 这些问题都是GuestOS带来的,虚拟化层的技术再怎么进步也无法解决这几个问题。 实际使用场景中,我们使用虚拟化技术其实是为了按需分配资源来完成服务的部署和使用,同时对服务所依赖的环境进行隔离,不被其他服务 感知或干扰。为此启动一个GuestOS并不是必须的,为什么不考虑让多个虚拟机公用一个操作系统内核,只隔离开服务运行环境,同时控制 服务使用的系统资源呢? 容器是没有GuestOS的轻量级"虚拟机",多个容器共享一个OS内核,容器中包含需要部署的应用和它依赖的系统环境,容器大小通常只有几十 到几百MB,由于共享操作系统内核,所以容器依赖于底层的操作系统,各个操作系统大都有自己的容器技术和容器工具。 Docker是一个Linux容器管理工具,随着Docker的兴起,Linux容器技术也是当下最时兴的容器虚拟化技术。Linux容器工具有很多,OpenVZ、 LXC、Docker、Rocker、Lmctfy等等,大都是基于Linux内核提供的两个机制:Cgroups(实现资源按需分配)和Namespace(实现任务隔离) 由于使用的技术完全不同,容器和虚拟机也有很多不同的地方: 最直观的区别就是容器比虚拟机明显更轻量级,对宿主机操作系统而言,容器就跟一个进程差不多。 因此容器有着更快的启动速度(秒级甚至更快),更高密度的存储和使用(镜像小)、更方便的集群管理等优点。 同时由于没有GuestOS存在,在容器中运行应用和直接在宿主机上几乎没有性能损失,比虚拟机明显性能上有优势。 还有一点是虚拟机技术已经发展了很多年,虚拟机和虚拟化层间的接口、虚拟机镜像格式等都已经标准化了, 相应的管理工具、分布式集群管理工具都有比较完善的解决方案,而容器最近几年才兴起,配套技术和标准还在完善中。 此外虚拟机由于有GuestOS存在,可以和宿主机运行不同OS,而容器只能支持和宿主机内核相同的操作系统。 而且虚拟机由于有VMM的存在,虚拟机之间、虚拟机和宿主机之间隔离性很好,而容器之间公用宿主机的内核,共享系统调用和一些底层的库,隔离性相对较差。 容器现有两个比较大的缺点(隔离性不够强,依赖操作系统)
更多信息请参考
http://edu.51cto.com/course/10535.html
Docker基础知识介绍的更多相关文章
- Docker03 Docker基础知识、Docker实战
1 Docker基础知识 1.1 什么是Docker Docker是一个可以装应用的容器,就像杯子可以装水.书包可以装书一样:docker官网 Docker是Docker公司开发的,并开源到GitHu ...
- Nginx基础知识介绍
Nginx基础知识介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx概述 Nginx是免费的.开源的.高性能的HTTP和正向/反向代理服务器.邮件代理服务器.以及T ...
- TCP_Wrappers基础知识介绍
1. TCP_Wrappers基础知识介绍 TCP_Wrappers是在 Solaris, HP_UX以及 Linux中广泛流行的免费软件.它被设计为一个介于外来服务请求和系统服务回应的中间处理软件. ...
- Swift Playgrounds for mac基础知识介绍
Swift Playgrounds是一款适用于iPad和Mac的革命性应用程序,它使Swift学习变得互动而有趣.它不需要编码知识,因此非常适合刚开始的学生.使用Swift解决难题,以掌握基本知识.S ...
- WPF Step By Step -基础知识介绍
回顾 上一篇我们介绍了WPF基本的知识.并且介绍了WPF与winform传统的cs桌面应用编程模式上的变化,这篇,我们将会对WPF的一些基础的知识做一个简单的介绍,关于这些基础知识更深入的应用则在后续 ...
- docker 基础知识分享ppt
给团队做的docker基础分享ppt, 见下面的附件. https://files.cnblogs.com/files/harrychinese/docker_intro.pptx
- python基础----基础知识介绍
一 编程语言的划分 编译型:将代码一次性全部编译成二进制,然后运行. 缺点:开发效率低,不能跨平台(windows与linux) 优点:执行效率高 代表语言:c语言 解释型:当程序开始运 ...
- android开发学习---linux下开发环境的搭建&& android基础知识介绍
一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...
- Docker基础知识及入门
什么是Docker? Docker是由dotcloud公司使用golang语言进行开发的,基于Linux内核的 cgroup,namespace,以及OverlayFS类的Union FS等技术,对进 ...
随机推荐
- 2019-04-28——Django学习
1.Django: Python Web应用开发框架,Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后 ...
- 100-days: twenty-one
Title: Not so fantastic(<口>极好的,棒的): can Japan end its love affair(喜爱,热爱) with plastic(塑料)? A : ...
- 学习日记--用Vector(向量)实现动态数组
Vector的使用方法: 能在添加元素时增加长度的数组称为动态数组或可变长数组.相对地,必须事先指定长度,只能容纳一定数量元素的数组称为静态数组.下面分享一下如何借助STL(标准模板库)中的Vecto ...
- Ubuntu ROS
设置你的sources.list 将电脑设置为接受来自packages.ros.org的软件 sudo sh -c 'echo "deb http://packages.ros.org/ro ...
- dwr去除默认错误弹窗
在开发中,我实在不希望dwr弹出alter,只需要打印错误日志就可以,客户端不需要alert出error或者a server error has occurred. 这样的提示,更不需要alert出堆 ...
- UML图之时序图
时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的.顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序.时序图中包括的建模元素主要有:角色(Actor) ...
- 解析ReentrantLock实现原理
在Java中通常实现锁有两种方式,一种是synchronized关键字,另一种是Lock(Lock的实现主要有ReentrantLock.ReadLock和WriteLock).synchronize ...
- 机器学习入门-BP神经网络模型及梯度下降法-2017年9月5日14:58:16
BP(Back Propagation)网络是1985年由Rumelhart和McCelland为首的科学家小组提出,是一种按误差逆传播算法训练的多层前馈网络,是目前应用最广泛的神经网络模型之一. B ...
- IDEA 上 Tigase8.0 源代码编译运行
Tigase交流群 :310790965 一些小伙伴们经常问Tigase8 check下来的源代码怎么跑起来,因为我不能及时一 一回答,所以还是写个博文来演示一下吧,一般针对新手而言,老手的话,就跳过 ...
- linux 7安装telnet,设置telnet自启动,使用root telnet登录
1.安装启动服务 # yum install telnet-server # yum install xinetd # systemctl enable xinetd.service # system ...