设为首页 收藏本站
查看: 1604|回复: 1

[经验分享] 第一个Docker化的Java应用

[复制链接]
累计签到:5 天
连续签到:1 天
发表于 2017-12-7 07:05:42 | 显示全部楼层 |阅读模式
  Docker自从诞生以来就一直备受追捧,学习Docker是一件很炫酷、很有意思的事情。我希望通过这篇文章能够让大家快速地入门Docker,并有一些学习成果来激发自己的学习兴趣。我也只是一个在Docker这条巨鲸上玩耍的小孩,全文如有不明确、不正确的地方,还请斧正。


Docker简介

思想


  • 集装箱
  • 标准化

  • 运输方式
  • 存储方式
  • API接口


  • 隔离
Docker镜像
  所谓镜像就是程序运行的环境的只读版本。其包含了所有程序的依赖软件和配置。构建镜像的过程有些类似于在常规部署当中装系统、配环境的过程。注意,镜像是只读的,因此在构建镜像过程中不应该放入需要频繁修改的文件和配置。比如我们自行开发的应用程序可能需要不断的升级,则不适合放入镜像中。


  • 镜像的分层
  镜像是分层的。任何镜像都是基于一个基本镜像(如:linux某个版本的内核)逐步构建而成。镜像是只读的,在构建自定义镜像的过程中,每一步安装和配置都是在上一个镜像的基础上叠加一层形成新的镜像的过程。


  • 获取基础镜像
  可以从Docker Hub上下载自己需要的基础镜像,其中包含大量的官方镜像。具体使用方法可参照Docker命令一节。

Docker容器
  容器是镜像本身和叠加于镜像之上的一个读写层。应用程序仅能运行于容器之中。应用程序在容器中对系统所做的修改将仅体现在读写层,而并不会影响到其下面的镜像层。值得注意的是,一个容器的存储空间是受限的。所以并不适合将应用程序的持久化功能放入容器当中。可以通过挂载外部路径的方式将持久化数据保存在容器以外。

Docker仓库

Ubuntu上安装Docker
  Docker的基础是Linux容器技术,因此学习Docker最好是使用Linux。这里推荐64位Ubuntu系统。
  在Ubuntu中只需要运行一行命令即可实现Docker的安装:
  

sudo apt-get install docker.io  

  运行完后,可以在终端输入docker看到下面的界面证明我们安装成功了(注:提示权限问题就添加sudo,下文同):
DSC0000.png

  从上图可以看到,Docker的命令并不多,只有三十几个。例如我们可以输入docker info来查看我们安装的Docker信息:
DSC0001.png


  运行容器
  安装好之后,我们就可以来开始Docker之旅了,
  我们现在的Docker还是一个”裸”Docker,上面没有容器,等一下,什么是容器?所谓容器就是Docker中用来运行应用的,Docker的容器很轻量级,但功能却强悍的很。也没有镜像。镜像?镜像简单理解就是容器的只读版本,用来方便存储与交流。此时,我们可以通过官方提供给我们的镜像来进行学习。比如我们想在Docker中运行一个Ubuntu系统,很简单,Docker中得pull命令是用来获取镜像的,执行下面的命令,就会从官方仓库里获取nginx版本的镜像:
  

docker pull nginx:14.04  

  images命令用来查看本机Docker中存在哪些镜像,运行 docker images就会看到我们刚才获取的Ubuntu14.04系统:
DSC0002.png

  现在,我们把刚刚的镜像运行起来,运行起来的镜像就叫做容器了,容器是可读写的,这样我们就可以在容器里做很多有意思的事情了。run 命令就是将镜像运行起来的,运行:
  

docker run -it ubuntu:14.04  

  仔细看,你会发现终端交互的用户名变掉了,说明我们进入到了容器的内部,效果如下:
DSC0003.png

  现在我们所做的任何操作都是针对于目前容器而言的,不会影响到原来的系统,例如,我们在里面安装下nginx服务器,运行如下命令:
  

sudo apt-get install -y nginx  

  完成后执行nginx -v就会发现我们已经将nginx安装成功:
DSC0004.png


  将容器转化为镜像
  在上一小节中,我们已经在容器里安装好了nginx,接下来我们希望将这个容器内容保存下来,这样我们下次就无需再次安装了。这就是Docker中将容器转换为镜像的技术。
  如果您还在刚刚的安装了nginx的终端里,执行exit退出此终端,回到系统本身的终端:
DSC0005.png

    ps命令可以查看我们当前都运行了哪些容器,加上-a参数后就表示运行过哪些容器,因为我们刚刚已经退出了安装nginx的容器,因此我现在想查看它的话,需要使用-a参数,执行如下命令:
  

docker ps -a  

  此时,就会显示出我们刚刚运行的容器,并且Docker会很贴心的随机给每个容器都起个Names方便标示。效果如下:
DSC0006.png

    commit命令用来将容器转化为镜像,运行下面的命令,我们可以讲刚刚的容器转换为镜像:
  

sudo docker commit -m "Added nginx from ubuntu14.04" -a "saymagic" 79c761f627f3 saymagic/ubuntu-nginx:v1  

  其中,-m参数用来来指定提交的说明信息;-a可以指定用户信息的;79c761f627f3代表的是容器的id;saymagic/ubuntu-nginx:v1指定目标镜像的用户名、仓库名和tag 信息。创建成功后会返回这个镜像的ID信息。注意的是,你一定要将saymagic改为你自己的用户名。因为下文还会用到此用户名。
DSC0007.png

  这是我们再次使用docker images命令就会发现此时多出了一个我们刚刚创建的镜像:
DSC0008.png

  此时,如果运行 docker run -it saymagic/ubuntu-nginx:v1就会是一个已经安装了nginx的容器:
DSC0009.png


  存储镜像
  我们刚刚已经创建了自己的第一个镜像,尽管它很简单,但这已经非常棒了,现在,我们希望它能够被更多的人使用到,此时,我们就需要将这个镜像上传到镜像仓库,Docker的官方Docker Hub应该是目前最大的Docker镜像中心,所以,我们就将我们的镜像上传到Docker Hub。
  首先,我们需要成为Docker Hub的用户,前往 https://hub.docker.com/ 进行注册。需要注意的是,为了方便下面的操作,你需要将你的用户名设为和我刚刚在上文提到的自定义用户名相同,例如我的刚刚将镜像的名字命名为是saymagic/ubuntu-nginx:v2,所以我的用户名为saymagic、注册完成后记住用户名、密码、邮箱。
    login默认是用来登陆Docker Hub的,因此,输入如下命令来尝试登陆Docker Hub:
  

docker login  

  此时,就会输出交互,让我们输入Username、Password、Email,成功输入我们刚才注册的信息后就会返回Login Success提示:
DSC00010.png

  运行命令:
  

docker push saymagic/ubuntu-nginx:v1  

  这就是我们为什么将刚刚的镜像命名为saymagic/ubuntu-nginx:v1的原因,如果你上面步骤都操作正确的正确的话,是会得到下面的内容:
DSC00011.png

  此时,不出意外的话,我们的镜像已经被上传到Docker Hub上面了,去Docker Hub上面看看:
DSC00012.png

  果然,我们在Docker Hub上有了我们的第一个镜像,此时,其它的用户就可以通过命令docker pull saymagic/ubuntu-nginx来直接获取一个安装了nginx的ubuntu系统了。不信?那就自己实践一下吧!

  Dockerfile使用
  通过上面的学习,我们掌握了如何创建镜像、获取镜像、上传镜像、运行容器等等内容。有了上面的知识,我们来次实战。
  我们刚刚使用了commit命令创建了一个安装nginx的镜像,但其实Docker创建镜像的命令还有build,``build命令可以通过指定一个Dockerfile文件来实现将镜像创建过程自动化。Dockerfile文件有着特定的编写规则,但语法都还比较容易理解。这次我们不仅使用Dockerfile文件来创建一个像上文一样安装nginx的ubuntu镜像,DockFile可以很轻松的完成这个问题。首先将新建一个名字为www的文件夹,文件夹下面可以放一些HTML网页,
  在www的同级目录下新建一个名为Dockerfile的文件,将DockerFile文件改写如下:
  

from hub.c.163.com/library/tomcat  

  
MAINTAINER lijiaqi sev7e0@163.com
  

  
COPY jpress.war /usr/local/tomcat/webapps
  

  我来整体的解释下这个Dockerfile文件,第一行是用来声明我们的镜像是基于什么构建的,这里我们指定为tomcat,第二行的作用在于告诉别人你的大名。第三行和第四行的RUN命令用来在容器内部的shell里执行命令。不理解没关系,因为这都是固定的语法,感兴趣可以多看相关内容。此时我们通过build命令来构建镜像,运行:
  

docker build -t="jpress:latest" .  

  注意,最后的.表示Dockerfile在当前目录,也可指定其它目录。此时,再次运行docker images就会看到刚刚生成的镜像:
DSC00013.png

  现在我们就可以运行刚刚的镜像了,和前面运行稍有不同,此时我们需要对外指定80端口,该行为通过-p参数指定,运行:
  

docker run -d -p 8888:8080 jpress  

  此时,终端会卡住,这是正常的,因为Docker的思想是每个容器最好只开一个线程做一件事,此时我们打开了服务器,所以终端卡住也没关系(当然是有办法来解决这个问题,但这里不做介绍)。现在我们可以通过浏览器访问localhost查看效果,如果是虚拟主机则需输入主机ip地址,然后就能看到了如下的页面:
DSC00014.png

  
接下来拉取MySQL镜像
  

dcoker pull hub.c.163.com/library/mysql:latest  

  接下来运行MySQL镜像
  
DSC00015.png
  
DSC00016.png
  重启Dcoker服务
  
DSC00017.png
  
DSC00018.png
  
到此为止 我的第一个Dcoker化的Java应用 已经完成

  写在最后
  Docker能做的事情远不止这些,更多有意思的事情还请读者慢慢用心去发现。
  
引用:http://kb.cnblogs.com/page/536115/

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-421535-1-1.html 上篇帖子: win7 docker 挂载共享目录 下篇帖子: Docker集群管理(三)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表