本节内容

1.  Docker概述

2.  Docker的安装

3.  Docker基本使用

4.  Docker相关命令汇总

5.  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概念理解 

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基础知识介绍的更多相关文章

  1. Docker03 Docker基础知识、Docker实战

    1 Docker基础知识 1.1 什么是Docker Docker是一个可以装应用的容器,就像杯子可以装水.书包可以装书一样:docker官网 Docker是Docker公司开发的,并开源到GitHu ...

  2. Nginx基础知识介绍

    Nginx基础知识介绍 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.Nginx概述 Nginx是免费的.开源的.高性能的HTTP和正向/反向代理服务器.邮件代理服务器.以及T ...

  3. TCP_Wrappers基础知识介绍

    1. TCP_Wrappers基础知识介绍 TCP_Wrappers是在 Solaris, HP_UX以及 Linux中广泛流行的免费软件.它被设计为一个介于外来服务请求和系统服务回应的中间处理软件. ...

  4. Swift Playgrounds for mac基础知识介绍

    Swift Playgrounds是一款适用于iPad和Mac的革命性应用程序,它使Swift学习变得互动而有趣.它不需要编码知识,因此非常适合刚开始的学生.使用Swift解决难题,以掌握基本知识.S ...

  5. WPF Step By Step -基础知识介绍

    回顾 上一篇我们介绍了WPF基本的知识.并且介绍了WPF与winform传统的cs桌面应用编程模式上的变化,这篇,我们将会对WPF的一些基础的知识做一个简单的介绍,关于这些基础知识更深入的应用则在后续 ...

  6. docker 基础知识分享ppt

    给团队做的docker基础分享ppt, 见下面的附件. https://files.cnblogs.com/files/harrychinese/docker_intro.pptx

  7. python基础----基础知识介绍

    一  编程语言的划分       编译型:将代码一次性全部编译成二进制,然后运行. 缺点:开发效率低,不能跨平台(windows与linux) 优点:执行效率高 代表语言:c语言 解释型:当程序开始运 ...

  8. android开发学习---linux下开发环境的搭建&& android基础知识介绍

    一.配置所需开发环境 1.基本环境配置 JDK 5或以上版本(仅有JRE不够) (http://www.oracle.com/technetwork/java/javase/downloads/ind ...

  9. Docker基础知识及入门

    什么是Docker? Docker是由dotcloud公司使用golang语言进行开发的,基于Linux内核的 cgroup,namespace,以及OverlayFS类的Union FS等技术,对进 ...

随机推荐

  1. Centos 7下网卡bonding配置之mode4

    一.bonding技术 bonding(绑定)是一种linux系统下的网卡绑定技术,可以把服务器上n个物理网卡在系统内部抽象(绑定)成一个逻辑上的网卡,能够提升网络吞吐量.实现网络冗余.负载等功能,有 ...

  2. Spring+Quartz集群环境下定时调度的解决方案

    集群环境可能出现的问题 在上一篇博客我们介绍了如何在自己的项目中从无到有的添加了Quartz定时调度引擎,其实就是一个Quartz 和Spring的整合过程,很容易实现,但是我们现在企业中项目通常都是 ...

  3. C# Task.Run 和 Task.Factory.StartNew 区别

    Task.Run 是在 dotnet framework 4.5 之后才可以使用,但是 Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制.可以认 ...

  4. jquery 全选、反选、获取值、背景行、隔行变色和鼠标略过变色变色全特效

    好久没有写东西了,当然不是没东西可写,只是没有时间写.今天抽出点时间来把我最近使用的一些 Javascript 特效的东西贴出来,供自己或者别人查询使用.最近我在做一个新的 B/S 系统,由于没有专门 ...

  5. HDU2034

    #include <bits/stdc++.h> using namespace std; int main() { int n,m,val; set<int>::iterat ...

  6. php + mysql 存入表情 【如何转义emoji表情,让它可以存入utf8的数据库】

    方法1:base_encode64 这种方法是可以,但是旧数据没有经过encode操作,取数据的时候如果统一进行decode的话,旧数据会丢失的. 1 方法2:urlencode 这个似乎可以,对没有 ...

  7. Linux 查看网络状态工具

    1. iftop 效果如下图: 界面上面显示的是类似刻度尺的刻度范围,为显示流量图形的长条作标尺用的. 中间的<= =>这两个左右箭头,表示的是流量的方向. TX:发送流量RX:接收流量T ...

  8. springboot无法加载oracle驱动终极解决

    .ctrl+shirt+s .找到 Maven: com.oracle:ojdbc6: .找到classes 下的路径C:\Users\Administrator\.m2\repository\com ...

  9. out与ref以及可空类型用法的用法

    1.ref的用法:传递结构 public class A { public int X{get;set;} } public static void changeA(ref A a) { a.X=2 ...

  10. java 基本原则

    开闭原则:当应用的需求改变时,在不修改软件实体的源代码或者二进制代码的前提下,可以扩展模块的功能,使其满足新的需求. 可以通过“抽象约束.封装变化”来实现开闭原则,即通过接口或者抽象类为软件实体定义一 ...