docker入门

docker入门(基于慕课网教程)

  • 解决的问题:快速的持续集成、服务得弹性伸缩、部署简单、解放运维、为企业节省了机器资源,docker已经被好多公司大规模得使用,京东、腾讯、阿里都大规模使用docker。
  • 领域:开发、测试、运维必备
  • 什么是docker

  历史:2010 dotCloud PAAS;2013 docker开源;2014.6 docker1.0:2014.7 C轮 4000刀融资;2015.4 D轮 9500刀;至今 docker1.13 

  什么是docker:docker是一个用来装应用得容器,就像杯子可以装水,笔筒可以放笔,可以把Hello World放入其中,可以把网站放入其中,可以将任何想拿到得程序放入其中。官网介绍:。docker公司开发,开源,托管在github。跨平台,支持windows、linux、mac。

  • 理解docker

   Logo:

     思想:集装箱-保证货物不会丢失,完整性。将货物看成程序,如果想把程序放到另一台机器运行,可能会发生少配置文件、数据等错误,并且大部分是人为的错误,有了docker保证程序不管放在哪都不会缺东西;标准化-三个方面。运输方式:docker运行程序有一个超级码头,任何地方运输货物都由鲸鱼先送到超级码头,然后由鲸鱼将货物从超级码头送至目的地。对于程序来说,如果我们想将程序从台式机发送到笔记本上,可以通过qq、u盘等方式。使用docker就标准化了此过程,只需要在台式机执行docker命令,将鲸鱼派过来,将程序送到超级码头去,然后在笔记本上执行docker命令,让鲸鱼把程序从超级码头送到笔记本上;存储方式:以前将程序copy到笔记本上需要制定目录,还可能需要记住该目录。有了docker,不需要关心程序存放位置,要运行或者停止得时候只需要执行docker命令即可;API接口:docker提供了一系列rest接口,包含对应用的控制启动、停止、查看、删除等。以前如果在Tomcat运行程序需要执行Tomcat启动停止命令,如果使用其它容器就得执行其它命令,有了接口标准化只需要执行同样的命令就可以执行所有的应用。隔离:使用虚拟机时,有自己得CPU、硬盘、可用内存,完全感觉不到外面主机存在。docker与之相似,不过是更加轻量,可以实现快速得创建、销毁,比如创建虚拟机可能需要几分钟,创建docker可能只需要几秒。最底层技术是linux的内核限制机制-LXC,是种轻量级得容器虚拟化技术,最大效率得隔离了进程与资源,除了CGroup和NameSpace等限制,隔离进程主辅使用的资源如CPU、Memery、IO等。docker就像时势造英雄,如果没有云计算、没有敏捷开发、没有高频度得弹性伸缩需求、没有IT这么多年得发展就没有docker。

  

    docker解决的问题程序换个地方就不能运行了?开发说运行没问题,运维说服务器运行正常。想一下,一个java web运行依赖哪些东西呢?首先是系统得操作系统,然后是JDK、Tomcat、代码、配置文件。操作系统变了,若是程序调用了系统某些命令换了一个操作系统,命令调用就会失败,程序就运行不起来。JDK、Tomcat版本不一致都可能导致程序运行失败。代码就更有可能,比如说代码引用D盘一个文件。配置也一样,少了配置文件或者某些配置跟系统相关,一样会导致运行程序失败。docker出现了,它将操作系统、JDK、配置等放于集装箱里,在打包放到鲸鱼上,由鲸鱼送到服务器上,在机器上怎么运行,在服务器上就会怎么运行。docker解决了运行环境不一致所带来得问题;系统好卡,哪个哥们又写死循环了?当于别人公用服务器时莫名其妙发现自己得系统挂了,原因:内存满了、硬盘不够了。服务变慢了敲终端都卡?怎么办?用docker就解决这个问题。因为docker启动时就限制了最大CPU、内存、硬盘等,超过就杀掉。双11来了,服务器撑不住了?按平时访问两准备服务器11撑不住,按双11准备服务器平时极大浪费。所以只能在双11扩展机器,过完节将多余服务下线,这给运维带来极大工作量-需要在机器不熟各种服务,还可能起不来,需要调试。有了docker一切就很简单了,从10台服务器变成1000台10000台只需要点点鼠标,分分钟得事。总结一下就是docker标准化让快速拓展、弹性伸缩变得简单。

  • 走进docker

   docker技术核心:三个核心词汇:镜像(集装箱)、仓库(超级码头)、容器(运行程序得地方);docker运行程序的过程:去仓库将镜像拉到本地,然后用命令将镜像运行起来,变成容器;上图中build、ship、run对应镜像、仓库、容器。

   docker镜像(image):本质上,镜像就是一系列得文件(运行程序文件、应用环境文件);docker文件文件的存储:linux的存储技术UnionFS-联合文件系统(是种分层的文件系统,可以将不同得目录挂到同一个虚拟文件系统下)。docker镜像利用这种分层的概念进行文件存储,最底层是操作系统引导,上面一层是一个具体的linux操作系统,再上面是相关的软件,除了最上面都是只读的,docker加载完之后可以看作同一个目录,相当于只有一个文件系统。

linux文件存储docker文件存储

   docker容器:容器本质是一个进程,为了便于理解可以将容器想象为一个虚拟机。继续用上图,只有最上层可读可写,程序运行是需要修改文件,会把文件复制到最上层再进行修改,当应用读取问件时会先在最顶层进行查找。由于容器可以修改,镜像不可修改就导致同一个镜像可以生成多个容器进行独立运行。

   docker仓库:镜像的传输-先把镜像传到仓库,再由目的地将镜像从仓库里拉过去。中央服务器提供docker一个地址去访问它,docker自己提供这个服务,地址-hub.docker.com(很慢),我们可以使用c.163.com

 

 

 

 

  • docker初体验

   第一个docker镜像:拉取镜像命令-docker pull [OPTIONS] NAME[:TAG]。NAME表示拉取镜像得名称,[:TAG]可选的,表示版本,不加默认[:latest]表示最新版本,[OPTIONS]表示拉取得一些参数;查看本机镜像-docker images [OPTIONS]  [[REPOSITORY] [:TAG]],只有当本地镜像非常多的时候才需要后面选项。拉取示例:docker pull hello-world,没有加地址默认去docker官方仓库。

     第一个docker容器:运行-docker run [OPTIONS] IMAGE [:TAG] [COMMAND] [ARG...],COMMAND表示要运行起来执行的命令,ARG表示执行命令需要得参数,docker运行步骤:1)docker客户端连接daemon。2)daemon从docker仓库拉取镜像。3)daemon从镜像创建一个新的可执行的容器,产生当前可读输出。4)daemon将输出流给到客户端,然后发送到终端。流程:

 流程

  • docker运行nginx静态网站

   运行nginx镜像三个知识-持久运行的容器、前台&后台运行、进入容器内部。docker ps-查看正在运行的容器。docker [COMMAND] --help-查看运行命令得参数。docker run -d IMAGE-后台运行。docker exec -it [ID] bash-进入容器内部,如同进入一个新的电脑。witch nginx-查看nginx位置。exit-退出容器,回到主机。

   docker网络:Bridge(容器内的端口需要在主机上访问到,这种技术就是端口映射。docker可以指定把容器内的某端口可以在容器所在主机得某个端口它俩做一个映射,当访问主机的这个端口时就是在访问容器内这个端口)、Host(不会获取独立的netname workspace,与主机使用一个,此时容器不会虚拟自己的网卡,配置自己的ip)、NONE(没有网络,不会与外界通信)。docker默认得是Bridge方式通信。举个启动Ngnix的例子:docker run -d -p 8080:80 IMAGE(8080为主机端口,80为容器端口)。检查端口是否启动:netstat -na|grep 8080。

  • 第一个java web应用
概念:(1)Dockerfile:告诉docker怎样制作镜像,制作镜像的每一步操作是什么(2)docker build:该命令执行Dockerfile里描述的每件事

  制作自己的镜像:(1)写Dockerfile:vi Dockerfile;

  (2)docker build -t jpress:lastest.(-t,指定名字与版本.代表当前目录);

    运行自己得镜像:运行-docker run -d -p 8888:8080 jpress

只有把命运掌握在自己手中,从今天起开始努力,即使暂时看不到希望,也要相信自己。因为比你牛几倍的人,依然在努力。
原文地址:https://www.cnblogs.com/freesky168/p/14358277.html