docker入门(利用docker部署web应用)

更新:随手写的一篇博客能收获这么多赞真是挺开心的,不过现在博主很忙,博主本人主要也是从事Java方向对docker暂时没有更深的理解了,写这个目的也是为了自己复习,恕不能对出现问题的同学进行答疑了,当然如果哪里写的有问题还是可以提一下。

---------------------------------------------------------------------------------------------------------------------------------------------------------

前言:本课程是在慕课网上学习 第一个docker化的java应用 课程时所做的笔记,供本人复习之用

目录

第一章 什么是docker

1.1 docker的发展史

1.2 docker国内应用史

1.3 什么是Docker

第二章 了解docker

2.1 docker思想

2.1.1 集装箱

2.1.2 标准化

2.1.3 隔离

2.2 docker解决的问题

2.2.1 系统环境不一致

2.2.2 系统好卡,哪个哥们又写死循环了

2.2.3 双11来了,服务器撑不住了

第三章 走进docker

3.1 镜像

3.2 容器

3.3 仓库

第四章 centos下docker安装

第五章 docker初体验

5.1 docker基本命令

5.2 docker运行镜像流程

第六章 docker运行nginx

6.1 运行nginx镜像

6.2 docker网络

6.2.1 网络介绍

6.2.2 实际访问端口

第七章 docker部署第一个java web应用

7.1 制作自己的镜像

7.2 运行自己的镜像


第一章 什么是docker

1.1 docker的发展史

2010年几个年轻人成立了一个做PAAS平台的公司dotCloud.起初公司发展的不错,不但拿到过一些融资,还获得了美国著名孵化器YCombinator的支持,后来微软谷歌亚马逊这样的大厂商也纷纷加入PAAS平台,竞争十分激烈,dotCloud举步维艰.

2013年可能是公司发展的不是很好,工程师又不想自己的努力付之东流,于是他们决定将他们的核心技术开源.这项技术就是docker.当时docker的功能就是将linux容器中的应用代码打包,可以轻松的在服务器之间进行迁移.

无心插柳柳成荫,docker技术风靡全球,于是dotCloud公司改名为docker Inc,并全面投入到docker的开发之中.

2014.6 Docker发布了第一个版本 Docker1.0

2014.7 获得C轮融资 $4000W

2015.4 获得D轮融资 $9500W

至今已经发布到docker 

1.2 docker国内应用史

 

 

 

由此看出,不管开发测试还是运维,绝大多数人都应该会接触到docker.所以学docker还是很有必要的.

 

1.3 什么是Docker

docker是一个用来装应用的容器,就像杯子可以装水,笔筒可以放笔,书包可以放书,可以把hello word放在docker中,可以把网站放入docker中,可以把任何想得到的程序放在docker中.

官方解释:

 

第二章 了解docker

2.1 docker思想

2.1.1 集装箱

没有集装箱之前运输货物,东西零散容易丢失,有了集装箱之后货物不容易丢失,我们可以把货物想象成程序,目前我们要把程序部署到一台新的机器上,可能会启动不起来,比如少一些配置文件什么的或者少了什么数据,有了docker的集装箱可以保证我们的程序不管运行在哪不会缺东西.

2.1.2 标准化

1. 运输方式

docker运输东西有一个超级码头,任何地方需要货物都由鲸鱼先送到超级码头,然后再由鲸鱼从超级码头把货物送到目的地去.对应的技术来说,比如我们要把台式机的应用部署到笔记本上,我们可能选择用QQ发过去或者用U盘拷过去,docker就标准化了这个过程,我们只需在台式机上执行一个docker命令,把鲸鱼派过来,把程序送到超级码头去,再在笔记本上执行一个docker命令,然后由鲸鱼把程序从超级码头送到笔记本上去.

2. 存储方式

当我们把程序存储到笔记本上时,我们需要一个目录,且我们要记住这个目录,因为下次我们可能还要修改,有了docker之后我们就不用记住了程序在哪里了,我们使用的时候只需要一条命令就行了.

3. API接口

docker提供了一系列rest api的接口,包含了对docker也就是对我们的应用的一个启动停止查看删除等等,如当我们要启动tomcat时我们要执行startup命令,当我们要停止时要执行shutdown命令,如果不是tomcat,我们可能还需要一些别的命令.有了docker我们记docker的命令就可以对其进行操作.

2.1.3 隔离

我们在使用虚拟机时有自己的cpu,硬盘,内存,完全感觉不到外面主机的存在,docker也差不多,不过它更轻量,我们创建虚拟机可能要几分钟,但是docker只需要一秒.最底层的技术时linux一种内核的限制机制,叫做LXC,LXC是一种轻量级的容器虚拟化技术.最大效率的隔离了进程和资源.通过cgroup,namespace等限制,隔离进程组所使用的物理资源,比如CPU,MEMORY等等,这个机制在7,8年前已经加入到linux内核了,直到2013年docker出世的时候才火起来,大家可能奇怪为什么这么好的技术埋没这么多年都没人发现呢?英雄造时势,时势造英雄,如果没有云计算,敏捷开发,高频度的弹性伸缩需求,没有IT行业这么多年长足的发展,也就没有docker.

2.2 docker解决的问题

2.2.1 系统环境不一致

开发:我本地没问题.运维:服务器没问题. 这个问题就变成了皮球.

如果一个应用要正常的启动起来需要什么?比如java web应用.

需要一个操作系统,操作系统之上要jdk,tomcat,我们的代码,配置文件.

操作系统的改变可能会导致我们的应用开不起来,比如我们调用了某些系统命令.

jdk版本也可能导致程序的运行失败.比如class文件需要1.7编译,我们装了个1.6的jdk.

tomcat版本也能导致失败,比如旧的版本一些配置在新版本中不再支持.

代码的话就比如应用了C盘,D盘的一个文件,或者是用了系统的一些环境编码.

配置的话我们可能少了某个配置文件等等.

下面docker来了,它把操作系统,jdk,tomcat,代码,配置全部放到集装箱里.再打包放到鲸鱼上,由鲸鱼给我们送到服务器上,在我的机器上怎么运行,在别的机器上也怎么运行.不会有任何的问题.一句话就是docker解决了运行环境不一致所带来的问题.

2.2.2 系统好卡,哪个哥们又写死循环了

如果有根别人共用服务器的同学可能有这样的体会,莫名其妙发现自己的程序挂了,一查原因要不是内存不够了,要不是硬盘满了,还有就是发现某个服务变慢了,甚至敲终端都比较卡,但是linux本身就是一个多用户的操作系统本身就可以供多个用户使用,docker的隔离性可以解决这个问题,就算别人的程序还是死循环疯狂吃CPU,还是封装疯狂打日志把硬盘占满,还是内存泄漏,把内存占满,都不会导致我们的程序运行错误.因为docker在启动的时候就限定好了,它最大使用的CPU硬盘,如果超过了,就会杀掉对应进程.

2.2.3 双11来了,服务器撑不住了

大部分系统业务量并不是每天都比较平均的,特别是一些电商系统,每天总有那么几天业务量是平时的几倍甚至几十倍,如果按双11的规模去准备服务器那么对于平时的规模来说又是极大的浪费,所以就在节日前临时扩展机器,过完节再把多余的节点下线,这就给运维带来了非常大的工作量,一到过节就在各个机器上部署各种各样的服务,我们启动程序需要java,tocmat等等,并且还可能起不来还要调试,这是非常恶心的工作,有了docker一切都变得美好了,只要点一下服务器就可以从10台变成100台甚至1000,1W台.都是分分钟的事情.

为什么会这么快呢?都是用标准的方式把我们的程序运过来,下载过来,再用标准的方式把它运行起来,就可以做到只要在每台机器上都执行一两条命令,就可以让程序正常跑起来,并且不用担心有问题.


第三章 走进docker

镜像就是上面说的集装箱,仓库就是超级码头,容器就是我们运行程序的地方.docker运行程序的过程就是去仓库把镜像拉到本地,然后用一条命令把镜像运行起来变成容器.

build:构建,就是构建镜像.

ship:运输,运输镜像,从仓库和主机运输.

run:运行的镜像就是一个容器.

build,ship,run和镜像,仓库,容器是一一对应的.

评论 151
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值