Docker 零基础从入门到使用

诺!这只可爱的小鲸鱼就是docker了!

文章目录

Docker 是什么?
                Docker 能干什么?
                    先来个需求
                    有Docker组 VS 无Dokcer组
                Docker 入门
                结尾语

Docker 是什么?

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上( 摘自百度 )。
Docker 能干什么?

在讲 Docker 能干什么之前,我们不妨先看看没有 Docker 和有Docker分别是个什么样子的?
先来个需求

某公司需要开发一个管理系统,由于业务数据量庞大,需要对每个模块进行独立化。

比如:将订单管理抽出为一个单独的系统,支付管理抽出为一个单独的系统,会员管理也抽为一个单独的系统,以此类推等等。

那么,要实现用户下单支付这个逻辑,那么首先需要调用会员管理的相关接口进行登录,调用订单管理的相关借口进行下单,调用支付管理进行支付。这几个模块共同工作才构成了我们一个下单支付的功能。这就是我们常说的分布式微服务系统。

他和传统的单一模式的区别就是:将整个项目进行了模块划分,以前老一辈项目都是将会员,订单,支付等系统都集合在一个项目中,这样十分不利于后期项目的扩展。
有Docker组 VS 无Dokcer组

为了方便叙述,我们将有无使用Docker分为 有Docker组和无Docker组,让他们开始PK。

第 1 回合:比服务器资源占用量( 资源就是金钱,没啥好说的 )
    无 Docker 组:购买了3台服务器,将开发好的三套系统分别往一台服务器上进行部署。
    有 Docker 组:购买了1台服务器,将开发好的三套系统分别进行 Docker 封装,都部署到这台服务器上。
    砖家点评:无Docker组多买了2台服务器,造成了金钱浪费,有Docker组胜出。

第 2 回合:比项目启动速度( 时间就是金钱,也没啥好说的 )
    无 Docker 组:启动1个服务前前后后花了10秒,则3个启动完毕则花了30秒。
    有 Docker 组:启动1个服务只靠一个命令,花费1秒,那么3个就只需要3秒。
    砖家点评:无Docker组花了30秒,有Docker 组只花了3秒,有Docker组再次胜出。

第3个回合:比项目迁移( 服务器升级啊,机房变更啊,反正就是需要换服务器了 )
    无Docker组:嗒嗒嗒,又重新在新服务器上安装了一大波软件,然后测试,总算迁移成功了,耗时大半天。
    无Docker组:把每个服务的Docker镜像拷贝过去,不用安装任何软件,又一个命令在新服务器上启动成功,耗时2分钟。
    砖家点评:这么显而易见的结果,还要我来点评?我太难了!

经过上面几个回合的较量,Docker 的优点相信你或多或少已经知道一些了,我也就不总结了,当然Docker的优点远远不止这些,等你们日后学会了,自己去看相关文档摸索,本文只带萌新入门Docker。
Docker 入门

下面以实际的例子,改造为 Docker 项目。下面所有操作都是在 Linux 上操作的,请各位同学注意,要是没有Linux, 要么自己花钱买个服务器,要么自己安个虚拟机,个人建议搞我们这行的,还是有必要买个服务器,1年也就几百块,买来想怎么玩儿就怎么玩儿,主要是能学到技术,多好。

(1)Docker 安装

yum -y install docker

输入语句执行后,就可以看到 Docker 它正在下载了,下面 19% 是下载进度。

当你看到下图的这个Complete,就表示 Docker 已经下载安装好了。

(2) 查看Docker版本
是否真的已经安装好了呢?我们可以通过以下命令查看Docker的版本。

docker version


此时,我们可以看到 Docker 的版本号为 1.13.1,表示真的已经安装上了。

(3) 启动Docker

 service docker start


(4) 打包项目到服务器

现在 Docker 已经启动成功了,我们来实战一下,我们先将Eclipse中的项目打成jar包放到Linux上。

(5) 创建Dockerfile

在我们刚刚的项目jar包下同级目录下,创建Dockerfile文件,这个文件是玩转Docker的核心文件哦。

touch Dockerfile


现在这个Dockerfile还是一纸空文,我们需要将我们的项目 jar 包写进去。
编辑Dockerfile文件,内容如下(注意滴3行第一个是你的jar包名):

FROM java:8
    VOLUME /tmp
    ADD com.sunnyzyq-0.1.jar app.jar
    RUN bash -c ‘touch /app.jar’
    EXPOSE 80
    ENTRYPOINT [“java”,"-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]

不想在Linux上打字的可以把文件拿出来编辑,然后放回去。

内容解释:
这里他有个镜像名词,不懂没关系,看完后面就懂了,先记住这个名词就是。

FROM :表示用哪个基础镜像去构建新的镜像,上面的java:8, 也就是jdk1.8。
    ADD :表示叠加什么镜像到上面的基础镜像中。我们现在就叠加当前目录下的 web-1.0.1.jar 到基础镜像中。
    EXPOSE:表示对外暴露的端口,我使用的是80。
    RUN bash -c ‘touch /app.jar’ :使用 shell编程,执行一个 touch 命令,更新文件的访问和修改时间 -c 如果文件不存在,则不要进行创建。具体参考liunx 的 touch 命令和shell编程。
    ENTRYPOINT :入口点, 表示容器运行后默认执行的命令。

(6) 拉取基础镜像 java8

docker pull java:8

上面Dockerfile说得很清楚,我们的程序需要一个基础镜像Java8,我这里由于昨天已经下载好了,所以他会提示更新,你们如果没有下载 java8 的镜像,请静等下载。

(7) 构建程序镜像
现在 java8 的基础镜像有了,就可以创建我们的程序镜像了,就是执行刚刚那个Dockerfile文件。

docker build -t xxx .
    注意:xxx 为新镜像名字,随便取,别忘了最后有个点。

可以我们程序的镜像已经构建成功了,并生成了一个930858c62738的镜像ID。

(8) 查看镜像

docker images

可以看到刚刚的创建的镜像,以及我们之前下载的jave8镜像(这里还可以看到,由于我刚刚创建的镜像和昨天创建的镜像虽然名字不一样,但其他数据都一样,这说明两个镜像底层都是指的同一个)。

(9) 停止网站项目
为了给大家有个明显的感受,我用自己的网站做实验,这一步你们看下就好,不用做什么。

下面这个是我项目的网址界面,现在还在运行。

现在我要停止他,准备并改为 docker 的方式启动。

可以看到,我的网址已经成功的被停掉了,OK,我们继续下一步,继续走完我们未完成的路。

(10) 创建容器并运行

镜像我们已经有了,但最后能让项目运行起来的是容器。如何理解容器与镜像的关系呢?
镜像可以理解为一个Java类,而容器可以理解为Java类的实例。
类只有一个,但可以new出千千万万个实例对象。
所以,镜像只是一个可以生成容器的东西,而容器才能让程序运行起来。

那么,现在我们就让我们用刚创建的镜像创建一个容器,并让他运行起来。

docker run --name 容器名 -d -p 内部端口:外部端口 镜像名
    如: docker run --name sunnyzyq -d -p 80:80 sunnzyq-docker-test

命令解释:

容器名:我这里取的名字为 sunnyzyq
    -d: 后台运行容器,并且返回容器完整ID
    -p: 是用于指定端口的。
    内部端口:项目程序的端口
    外部端口:网站域名的端口

(11) 查看运行的容器

docker ps

这样可以看到我们刚运行容器的详细信息。

docker ps -a

这样可以看到所有的docker下的相关容器,其他几个是我昨天创建的容器。

(12) 再次访问网站

再次访问网站,可以看到网站又可以访问了,这次是docker方式启动的。

(13)Docker 仓库
我们的 Docker镜像,还可以上传到Docker仓库 Docker Hub 里,只要注册一个账号密码,就能上传上去。
到时,如果你想要在其他服务器上运行你的项目,只需要从Docker hub里下载下来,重新生成容器,不用安装任何软件就可以运行了,因为需要的相关环境,你都整合到Docker镜像里了。

结尾语
好了!Docker的相关介绍和初步使用就到这里了!
祝各位自己私下继续深入学习,以后都是Docker大神!

原文地址:https://www.cnblogs.com/it-chen/p/11692245.html

时间: 2024-10-06 00:16:53

Docker 零基础从入门到使用的相关文章

C#消息队列(MQ)零基础从入门到实战演练

一.课程介绍 如果您从工作中之听过但未有接触过消息对队列(MQ),如果你接触过一点关于MQ的知识,如果没有这么的多如果的话......,那么阿笨将通过本次<C#消息队列零基础从入门到实战演练>分享课让您对消息队列有一个实质性的了解和认识,达到实际的灵活贯通和运用.本次分享课您将学习到以下知识点: 1.微软MSMQ的基本使用技能以及MSMQ在WCF技术中的运用. 2.企业级RabbitMQ消息队列的两种消费模式(生产消费和发布订阅)的介绍和使用. 3.如何实现RabbitMQ客户端(Client

零基础快速入门web学习路线(含视频教程)

下面小编专门为广大web学习爱好者汇总了一条完整的自学线路:零基础快速入门web学习路线(含视频教程)(绝对纯干货)适合初学者的最新WEB前端学习路线汇总! 在当下来说web前端开发工程师可谓是高福利.高薪水的职业了.所以现在学习web前端开发的技术人员也是日益增多了,但是在学习web前端开发中盲目的去学习而没有一个完整的思路和学习路线也是不行的. 成为一个合格的web前端开发工程师的具备什么条件? 熟练的掌握HTML.CSS.JS.JQ等最基本的技术. 现在,只掌握这些已经远远不够了.无论是开

零基础小白入门Java免费视频教程推荐—小猿圈

Java语言作为世界上使用最多的开发语言,企业庞大的需求量让每年进入Java开发领域的人不减反增.对于零基础小白来讲如何学习Java开发语言是入门的第一个难题.本文小猿圈主要给零基础小白入门Java开发技术推荐一个靠谱的Java免费视频教程. 零基础小白入门Java免费视频教程推荐-小猿圈 关于Java基础入门视频教程的选择,网上有各种各样的解说,也有各式各样的视频教程,那么我们究竟应该如何选择Java免费视频教程呢?如何才能挑选到合适自己的Java基础入门视频教程呢? 许多想通过观看Java视

小D课堂 - 零基础入门SpringBoot2.X到实战_第1节零基础快速入门SpringBoot2.0_1、SpringBoot2.x课程介绍和高手系列知识点

1 ======================1.零基础快速入门SpringBoot2.0 5节课 =========================== 1.SpringBoot2.x课程全套介绍和高手系列知识点     简介:介绍SpringBoot2.x课程大纲章节         java基础,jdk环境,maven基础 2.SpringBoot2.x依赖环境和版本新特性说明 简介:讲解新版本依赖环境和springboot2新特性概述 1.依赖版本jdk8以上, Springboot2

零基础如何入门Python

编程零基础如何学习Python 如果你是零基础,注意是零基础,想入门编程的话,我推荐你学Python.虽然国内基本上是以C语言作为入门教学,但在麻省理工等国外大学都是以Python作为编程入门教学的. 那么如何学习Python呢? 第一步:先把刀磨好 俗话说得好,磨刀不误砍柴工,这个你不得不信,反正我信了.那么怎么磨刀呢?首先,百度一下Python,对Python有一个大概的了解,然后去官方网站下载一个Python,你最好先下载Python2.7版本,学到最后在去看Python3版本,这符合Py

零基础如何入门数据分析

作者:炼己者 欢迎大家访问 我的简书 以及 我的博客 本博客所有内容以学习.研究和分享为主,如需转载,请联系本人,标明作者和出处,并且是非商业用途,谢谢! ------ 摘要: 本文主要是基于我自己的学习路径,和大家分享如何系统的学习数据分析. 我们来看一下数据分析要掌握的技能: Excel(各种骚操作要掌握,比如VBA:会做透视表:各种公式) python,一些机器学习原理 Mysql 统计学知识 接下来分享资源 1.Excel,力推王佩丰,讲的是真的好,手把手教你 跟王佩丰学Excel视频教

salesforce 零基础开发入门学习(一)Salesforce功能介绍,IDE配置以及资源下载

https://www.cnblogs.com/zero-zyq/p/5275134.html 目前国内已经有很多公司做salesforce,但是国内相关的资料确是少之又少.上个月末跳槽去了新公司,主要做的就是salesforce,不过当时想要看一些相关资料确实比较难.为了避免想要零基础学习的人少走一点弯路,所以整理一下这几天学到的简单的东西,包括登录salesforce后如何操作,如何下载配置IDE等简单入门操作. 一)给大家一些链接方便学习,查找和提问. 1)salesforce开发者官网:

Python 零基础 快速入门 趣味教程 (咪博士 海龟绘图 turtle) 2. 变量

大家在中学就已经学过变量的概念了.例如:我们令 x = 100,则可以推出 x*2 = 200 试试下面这段 Python 代码 1 import turtle 2 3 turtle.shape("turtle") 4 x = 100 5 turtle.forward(x) 6 turtle.left(45) 7 turtle.forward(2*x) 8 9 turtle.exitonclick() 运行上面的代码,小海龟将画出下面的图案 x = 100 声明了变量 x,并将它赋值为

Kubernetes零基础快速入门!初学者必看!

起源 Kubernetes 源自于 google 内部的服务编排系统 - borg,诞生于2014年.它汲取了google 十五年生产环境的经验积累,并融合了社区优秀的idea和实践经验. 名字 Kubernetes 这个名字,起源于古希腊,是舵手的意思,所以它的 logo 即像一张渔网又像一个罗盘,谷歌选择这个名字还有一个深意:既然docker把自己比作一只鲸鱼,驮着集装箱,在大海上遨游,google 就要用Kubernetes去掌握大航海时代的话语权,去捕获和指引着这条鲸鱼按照主人设定的路线