51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 1648|回复: 2
打印 上一主题 下一主题

Docker虚拟化实战:解放你的双手

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2018-3-8 16:12:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
前言

在我们每次在云上面搭建自己服务的时候,是不是每次都得先去apt-get 或者 yum我们的一下必要的
组件,如果这个时候,我们想从腾讯云换成阿里云了怎么办?难道还要再次apt-get,yum一下吗?在
docker没有出来之前,好像就是这个样子滴。至少我是这样,每次换个云都会这么搞,现在docker
出现了,这一次是真的解放了我的双手!!!!

什么是Docker

在一台服务器上同时运行一百个虚拟机,估计这个服务器是天价级别,不知道现在造出来没有,但
是在服务器上运行一千个Docker容器,这已经是现实了。
Docker是基于G语言实现的云开源项目,出生于2013年初。Docker自开源后收到了很多的关注和讨
论,最初他的发起者的公司是dotCloud后面也改了名字叫Docker Inc。Docker项目目前已加入了Lin
ux基金会,遵循Apache 2.0协议.
基本所有的主流系统都支持Docker,包括在windows和mac下也都推出了Boot2Docker,Docker的主
要目标是达到对应用组件级别的一次封装,到处运行,类似我们的java一次编译到处运行,也就是
说只要你安装了docker,我们就可以使用我们的docker镜像。这里的应用组件代表很多,可以使web
应用,也可以是数据库服务,也可以是操作系统或编译器。而且在Docker社区中有很多镜像,基本
很多时候直接可以拿来使用,在进行一次封装即可。

Docker和虚拟机比较

1.Docker容器启动很快,启动和停止都可以在秒级实现,这比我们那些虚拟机快很多。
2.Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
3.Docker操作是非常的简单,用过Git的人相信学习这个是非常快,学习成本很低。
4.Docker通过Dockerfile可以完成一键部署,这是虚拟机不能完成的。

传统的虚拟机,每启动一个,都会为那个单独分配独占的内存,磁盘等资源,但是对于Docker来说
只需要启动N个隔离的容器,并将应用放到容器中,并且在Docker中有挂载这个功能,本地主机可以
和容器共享同一文件夹或者文件,这也是虚拟机没有的。
虚拟机
      虚拟机

docker
      docker
上图展示两个的具体差别:
docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在do
cker容器上的程序直接使用的都是实际物理机的硬件资源。每个传统的虚拟机都会有一个自己的独立os。

实战

这里不会介绍基本知识,只介绍我在实战中怎么使用,全程使用Dockfile快速构建。

首先docker自带的镜像源,那个速度在国内简直太慢了,这个时候就需要国内的镜像源,我一般使
用两个国内的源,一个是阿里云hub,另外一个是daocloud,如果你是使用阿里云的服务器使用阿里
云hub的加速源,速度真的是无敌。
这里给大家搭建一个以tomcat7和jdk1.7为基础的docker,这两个东西请自行去网上下载压缩包
我这里使用的是阿里云的服务器,首先我们需要去阿里云:https://dev.aliyun.com/search.html
搜索ubuntu
支持mirro加速的不要选,那个速度很慢,直接选支持阿里云内网加速,然后选择一个ubuntu14.04,
在docker中输入下面命令:
docker pull registry.cn-hangzhou.aliyuncs.com/docker/ubuntu14.04
这样我们的虚拟机上面就会有一个这样的镜像了可以使用docker images查看是否有:
然后我们使用如下命令
  1. mkdir tomcat_ubuntu
  2. cd tomcat_ubuntu
  3. touch Dockerfile run.sh
  4. ##然后把之前的压缩都cp进来
  5. vim Dockerfile


  6. ##继承我们之前的某一个镜像,这里是继承ubuntu:14.04也就是我们刚才下的
  7. FROM ubuntu:14.04
  8. ##作者信息
  9. MAINTAINER lz from lclizhao.cn
  10. ##环境变量设置为非交互式
  11. ENV DEBIAN_FRONTEND noninteractive
  12. ##设置时区
  13. RUN echo "Asia/Shanghai" > /etc/timezone && \
  14.         dpkg-reconfigure -f noninteractive tzdata
  15. ##执行apt-get命令
  16. RUN apt-get install -yq --no-install-recommends wget pwgen ca-certificates && \
  17.     apt-get clean && \
  18.     rm -rf /var/lib/apt/lists/*
  19. ##设置tomcat和java的环境变量
  20. ENV CATALINA_HOME /tomcat
  21. ENV JAVA_HOME /jdk
  22. ##添加本地内容到镜像中
  23. ADD tomcat7 /tomcat
  24. ADD jdk /jdk
  25. ADD run.sh /run.sh
  26. RUN chmod +x /*.sh
  27. RUN chmod +x /tomcat/bin/*.sh
  28. ##开放端口
  29. EXPOSE 8080
  30. ##启动容器时我们执行run.sh
  31. CMD ["/run.sh"]

  32. ##上面完成后编辑我们的run.sh
  33. vim run.sh
  34. exec ${CATALINA_HOME}/bin/catalina.sh run
复制代码
上面的步骤完成以后,我们就可以生成我们的镜像了

sudo docker build -t tomcat7:java7 .
1
上面的意思是创建一个名字是tomcat7,标签名字是Java7的镜像,最后有一个.,代表当前执行当前目
录下以及当前子目录下的Dockerfile。
这样我们就生成了镜像了,输入命令

sudo docker images
1
就可以看见会出现我们所需要的,既然镜像有了,下面就是容器了我们可以使用

docker run -d --name tomcat -p 80:8080 -v /webapp:/tomcat/webapps tomcat7:java7
1
上面的意思是后台运行一个名字叫tomcat的容器,映射端口为80到8080的容器,并且挂载了webapps
到容器的webapps,在真正的开发工程也可以使用-v让tomcat7的日志文件都挂载出来。
这时候我们需要添加我们的web应用怎么办,我们直接把war导入webapp,然后进入容器的tomcat重启

docker exec -it d39 /bin/bash
1
上面的d39是我们docker ps过后看到的id值。这样可以进入我们的容器然后让tomcat重启。我们就可
以使用正常服务了。

容器转移

上面我们已经开始正常使用了,这个时候我们需要更换云服务器怎么办,我们再也不需要像以前一样
如此麻烦了,只要几个命令即可

sudo docker export d39 >tomcat_ubuntu.tar
1
意思是将d39容器导入到tomcat_ubuntu.tar这样就可以传输到其他底仓了
在其他地方地方可以使用

cat tomcat_ubuntu.tar | sudo docker import -tomcat/ubuntu:java7
1
这样也就导入进来了,又可以继续使用,完全不需要像我们以前那样辛苦的操作了


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?(注-册)加入51Testing

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-11-16 17:50 , Processed in 0.069516 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

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