Docker 零基础从入门到使用

Docker 零基础从入门到使用

大家好,又见面了,我是全栈君。

Docker 是什么?

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

Docker 能干什么?

在讲 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 入门

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

(1)Docker 安装

yum -y install docker

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

Docker 零基础从入门到使用

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

Docker 零基础从入门到使用

(2) 查看Docker版本

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

docker version

Docker 零基础从入门到使用

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

(3) 启动Docker

service docker start

Docker 零基础从入门到使用

(4) 打包项目到服务器

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

Docker 零基础从入门到使用

(5) 创建Dockerfile

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

touch Dockerfile

Docker 零基础从入门到使用

现在这个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上打字的可以把文件拿出来编辑,然后放回去。

Docker 零基础从入门到使用

内容解释:

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

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 的镜像,请静等下载。

Docker 零基础从入门到使用

(7) 构建程序镜像 

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

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

Docker 零基础从入门到使用

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

(8) 查看镜像

docker images

可以看到刚刚的创建的镜像,以及我们之前下载的jave8镜像(这里还可以看到,由于我刚刚创建的

镜像和昨天创建的镜像虽然名字不一样,但其他数据都一样,这说明两个镜像底层都是指的同一个)。

Docker 零基础从入门到使用

(9) 停止网站项目

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

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

Docker 零基础从入门到使用

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

Docker 零基础从入门到使用

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

Docker 零基础从入门到使用

(10) 创建容器并运行

镜像我们已经有了,但最后能让项目运行起来的是容器。如何理解容器与镜像的关系呢?

镜像可以理解为一个Java类,而容器可以理解为Java类的实例。

类只有一个,但可以new出千千万万个实例对象。

所以,镜像只是一个可以生成容器的东西,而容器才能让程序运行起来。

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

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

命令解释:

容器名:我这里取的名字为 sunnyzyq

-d: 后台运行容器,并且返回容器完整ID

-p: 是用于指定端口的。

内部端口:项目程序的端口

外部端口:网站域名的端口

Docker 零基础从入门到使用

(11) 查看运行的容器

docker ps

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

Docker 零基础从入门到使用

docker ps -a

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

Docker 零基础从入门到使用

(12) 再次访问网站

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

Docker 零基础从入门到使用

(13)Docker 仓库 

我们的 Docker镜像,还可以上传到Docker仓库 Docker Hub 里,只要注册一个账号密码,就能上传上去。

到时,如果你想要在其他服务器上运行你的项目,只需要从Docker hub里下载下来,重新生成容器,不用安装任何软件就可以运行了,因为需要的相关环境,你都整合到Docker镜像里了。

来源:https://blog.csdn.net/sunnyzyq/article/details/101222410

相关教程:Docker核心技术

获取方式:进入公众号回复关键字:Docker核心技术

—————————-分隔线——————————

往期精彩回顾:

1. IT视频资源分享列表

2.上海市32岁PHP程序员兼技术专家兼管理者对12年职业生涯的9个生活感悟

3.Pycharm+django2.2+python3.6+MySQL实现简单的考试报名系统

4.Swoole来实现实时异步任务队列

5.MySQL最常用分组聚合函数

6.免费获取Git GO Java视频教程

7.免费获取PHP相关视频资源

8.全面解读PHP面试

Docker 零基础从入门到使用

(扫码关注,获得更多知识讲解)

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/112062.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 解决docker端口映射无法访问问题的方法_为什么有的网页无法访问

    解决docker端口映射无法访问问题的方法_为什么有的网页无法访问https://cloud.tencent.com/developer/article/1768097https://blog.csdn.net/li_101357/article/details/78415461

    2022年10月17日
  • docker 实战—部署tomcat\weblogic集群 (二)

    docker 实战—部署tomcat\weblogic集群 (二)

  • docker停止运行中的容器(docker关闭容器)

    问题描述:centos启动一个容器添加了-d参数,但是dockerps或者dockerps-a查看却已经退出了shell>dockerrun-dcentosa44b2b88559b68a2221c9574490a0e708bff49d88ca21f9e59d3eb245c7c0547shell>dockerps退出原因1、docker容器运行必须有一…

  • docker修改mysql配置

    docker修改mysql配置Docker修改MySQL配置作者:YoungJ前言:大部分程序员在刚使用docker时,按照教程迅速的就装完了mysql,在使用的过程中出现各种问题:比如中文乱码、com.mysql.jdbc.PacketTooBigException:Packetforqueryistoolarge(1053>1024).等等,最简单的方式通过sql去设置,但每次重启又还原了,…

  • docker打包镜像到本地_如何从虚拟机导出镜像

    docker打包镜像到本地_如何从虚拟机导出镜像引言当我们在测试环境(本文特指docker容器)部署好自己得服务得时候,想在生产环境上部署我们得服务,又害怕环境不一样导致服务不能运行,那么这个时候就可以把我们得容器导出为镜像,然后再把镜像导出为压缩包,接下来把压缩包复制到我们的生产环境,然后在生产环境把压缩包导入为镜像,最后使用此镜像开一个容器,然后在容器内打开我们的服务,那么我们的服务就可以正常运行啦!环境简介系统环境:ubuntu18.04如果要在新的服务器使用我们的镜像,那么需要新的服务器和你测试环境的服务器的底层系统一致,即如果你测试环

  • docker安装rabbitmq镜像

    docker安装rabbitmq镜像1.dockerps查看正在运行的镜像/服务2.在docker容器中安装rabbitmqdockerrun-d–rm–namerabbitmq-p5672:5672-p15672:15672rabbitmq:3-management第1次执行,因为本地没有rabbitmq的镜像,会从仓库下载镜像并安装2.1参数说明rabbitmq:3:表示镜像的名字,其中3表示版本3…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号