资讯专栏INFORMATION COLUMN

为什么要用docker?

Bryan / 2118人阅读

摘要:那容器和镜像有什么关系网上说是类和对象的关系,没错,但是这样的比喻没什么实际卵用。针对这个问题,项目组决定把开发环境迁移到中,在测试环境中测试无误后,把镜像打包发布到正式环境中,解决了环境不同导致的问题。

本文旨在用最通俗的语言讲述最枯燥的基本知识

最近Docker突然火得不得了,到处都是谈论Docker的声音,相信大家和小编一样的心情,看这个东西有点高大上,但尝试去阅读Docker文章时又发现概念很模糊、不接地气、难以理解、无从下手...于是三天打鱼两天晒网,最终不了了之,反正公司也没要求用这玩意儿,不费劲了...

这不,当前几天项目要求快速上线并且部署多台服务器环境时,小编一台一台服务器的yum install、vim、restart...想屎的心都有,那时小编心里想要是有一个这么一个U盘,能把整个环境一台一台的Ctrl+V过去,那该多好啊。那时脑子一下子闪过一个念头:Docker不就是我想拥有的那个U盘吗。

怀着这样的一个念头,小编花了一些时间去查阅Docker相关的书籍、看视频、逛论坛,刚开始学习时非常难受,搞不懂什么是容器什么是镜像什么是鲸鱼船...而涉及到一些原理底层的知识,书籍里的那些概念比代码都能懂,小编硬啃了一段时间并且实操了几次之后,再回过头来,才豁然开朗。念及许多想要学Docker却苦于难以入门的开发者们,正在学习却很挣扎的初学者们,故而把小编这段时间的学习成果,以一个初学者的角度,遵循循序渐进的原则,编成一份通俗易懂的文章,希望能以此引导入门,早日成Docker大神。

文章提纲:

什么是Docker

Docker对我们有什么用处

Docker安装和使用

彩蛋

1. 什么是Docker

什么是docker?恐怕90%的人脑子一闪而过的都是那张图:一条鲸鱼背上扛着一堆箱子,图片下方是大大的“docker”。
docker是什么?
是鲸鱼?
还是一堆箱子?
或者说是载着箱子的鲸鱼?
....

这里小编不做解释,先引用一下官方的解释:
Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
顾名思义,docker是一个容器引擎,容器且不说,什么是引擎?
我们知道:
汽车的引擎是发动机,有了发动起,汽车才能跑起来
游戏需要游戏引擎(如Unity3D..),基于引擎的开发,能让游戏动起来。
如官言,docker也是一种引擎,基于这个引擎,开发者能让他们开发的应用处于一个有隔离性的、可移植性的容器中,以便于发布于各种机器中而无需考虑兼容性问题。
因此就不难解释,为什么docker的logo是一条装着一堆箱子的鲸鱼
这是因为:docker扮演的是图中鲸鱼的角色,而鲸鱼之上的集装箱就是一个个容器,容器中是我们开发的应用程序(不仅限于web应用),每个容器都有自己独立的环境(环境设置、网络、文件系统...),互不干扰。而每个箱子,又可以打包成一个新的镜像,放到其它服务器的docker环境中直接运行,不再需要重复安装程序运行环境。

上面的解释插入了两个生疏的概念:

镜像

容器

我们先讲容器
容器,顾名思义:就是装东西的器皿,在docker中,容器就是装载我们的应用程序的器皿,在docker的logo中,容器就是一个个箱子。我们知道,运行JavaWeb应用程序需要有Tomcat,那么我们就需要创建一个Tomcat的容器,才能把我们的程序放进去运行。

那么,容器哪里来的呢

我们知道,给电脑安装Windows系统需要有Windows镜像,因此给docker安装容器也是需要镜像的,所以,通俗一点,镜像就类似于我们日常中的安装软件,甚至说是操作系统镜像更为形象点。

那容器和镜像有什么关系?

网上说是类和对象的关系,没错,但是这样的比喻没什么实际卵用。

我们知道:要运行一个web程序,需要有个Tomcat环境,需要Tomcat环境,那就下载一个Tomcat解压出来,然后把web程序放入Tomcat的webapps中启动即可,

那么在docker中要运行一个web程序,就需要有Tomcat容器,需要Tomcat容器,就得去下载Tomcat镜像(也可以自己构建),把镜像pull下来之后,运行起来,就是一个Tomcat容器,此时把web程序至于Tomcat挂载的数据目录webapps中既可以运行。

所以docker中,容器和镜像的关系更像是一种动静的关系,也就是说,存于仓库中的镜像是一个死的软件,而运行起来的容器则像是一个正在运行的程序(进程)。

2.Docker有什么用

对docker有了清晰的了解之后,我们心里可能在想:
这玩儿对我有什么用?
我在哪里能用得上?
怎么用才对?

这里引用几个案例来让大家体会体会。

1.案例一

前几天,公司一批服务器就要到期了,由于服务器是15年购买的,硬件的性能远比现在新出的云主机低,因此决定把所有服务器都换成新一代服务器,但是小编整准备动手迁移服务器时,内心一阵阵崩溃感涌上心头,仔细一算,每台服务器都要做同样的事情:

安装jdk、Tomcat、nginx

配置jdk环境变量和系统变量

配置Tomcat

配置nginx

安装项目所需的视频解码组件

导入项目所需的一些特殊字体

后来决定用docker部署的办法,在每台服务器都把docker安装之后,只需要在其中一台服务器中把Tomcat镜像从镜像仓库拉取下来,把这些配置都设置好,做成一个自己的镜像上传到镜像仓库中,之后在其他几台服务器都下载自己做的镜像,运行于docker中,把代码上传,就万事大吉了。

案例二

前不久的圣诞活动中,公司临时的活动方案在程序员的加班加点中终于上线,但是一上线之后发现推广海报中的中文名字乱码,领导问责测试人员怎么没做好测试,测试很委屈的说我已经测试无数遍并且测试报告都提交了,解决了所有问题才上线的;没办法只能让服务器同事查看正式服务器中的tomcat配置,发现原来 tomcat用了默认编码方式:iso8859-1,而测试环境中是UTF-8。针对这个问题,项目组决定把开发环境迁移到docker中,在测试环境中测试无误后,把镜像打包发布到正式环境中,解决了环境不同导致的问题。

3. docker的安装

感知到docker对我们开发者的好处之后,相信大家也跃跃欲试了吧,下面
就Linux centOS(版本大于等于7.0)系统进行演示docker的安装步骤:

1.删除可能存在的旧版本
sudo yum remove docker 
                  docker-client 
                  docker-client-latest 
                  docker-common 
                  docker-latest 
                  docker-latest-logrotate 
                  docker-logrotate 
                  docker-selinux 
                  docker-engine-selinux 
                  docker-engine

安装一些必备工具:

yum install -y yum-utils device-mapper-persistent-data lvm2

添加Docker源:

yum-config-manager 
    --add-repo 
    https://download.docker.com/linux/centos/docker-ce.repo

更新yum缓存

yum makecache fast

安装

yum install docker-ce
6.创建docker用户

温馨提示:以下操作不是必备,但是为了养成一个Linux用户的使用的良好习惯,小编不建议直接使用root操作,因此创建一个用户用来操作docker。

useradd docker_manager

docker_manager是用户名,可以根据喜好起名,创建完用户之后,设置密码

passwd docker_manager  

docker_manager_wkt

会提示输入密码和确认密码,按照提示操作即可

配置docker用户的权限

visudo

visudo是配置用户权限的文件,在命令行中输入visudo回车之后,会进入文件操作,找到“# %wheel ALL=(ALL) NOPASSWD: ALL”这一行,把前面的“#”去掉,保存文件

授权

usermod -aG wheel,docker docker_manager

启动 Docker CE

sudo systemctl enable docker
sudo systemctl start docker

此时在命令行中输入“docker info”之后,能够展示docker相关信息,就表示docker安装成功。

docker info

镜像加速:

编辑daemon.json文件(首次安装daemon.json是个新文件,不要惊讶)

vim /etc/docker/daemon.json

加入以下内容:

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ]
}

保存,sudo systemctl restart docker重启即可。

4.彩蛋

上面针对docker使用了一种比较通俗诙谐的语言来讲述,也是为了方便读者能容易的解读和理解,理解并且成功安装docker之后,你们就会想方设法的要把自己的web项目部署到docker了,这我没说错吧,大家可以网上查找一些资料去学习这一块,当然也可以选择:

关!注!我!

下篇文章我会对docker网络、数据卷、常用操作命令和创建自己的docker镜像、上传镜像等做一个全面的解答,之后会docker部署web项目的流程、以及运行Redis、MongoDB、nginx等常用软件做一些例子讲解


觉得本文对你有帮助?请分享给更多人
关注「编程无界」,提升装逼技能

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/28064.html

相关文章

  • docker中用Tomcat运行web项目

    摘要:重新执行看控制台的输出可以看到已经在运行,代表所用镜像以及镜像版本,显示的是。把文件夹挂载成功之后,此时我们把项目丢到宿主机中的下,重启容器后,再用访问,就会展示我们的项目的内容了。到这里,中用运行项目的工作已经完成。 本文旨在用最通俗的语言讲述最枯燥的基本知识 上一篇文章《为什么要用docker》已经讲述了什么是docker以及我们要用docker的原因,并且讲解了如何安装docke...

    vpants 评论0 收藏0
  • Docker+Jenkins+Nodejs+Git+Webhook自动部署

    1.准备环境 一台有网络的Linux 服务器 Docker rpm安装包,依赖包 libcgroup jdk1.7 OR 1.8环境下载 Jenkins WAR包下载 NodeJs 源码包下载 依赖下载地址: https://pkgs.org/download/ https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/ 2.安装D...

    tuomao 评论0 收藏0
  • 【 全干货 】5 分钟带你看懂 Docker

    摘要:本文从定义,作用,技术架构,安装和使用等全方位带你看懂。如图中左边红框中和右边的红框中都唯一表示为同一个镜像。最后,于开发者而言提供了一种开发环境的管理办法,与测试人员而言保证了环境的同步,于运维人员提供了可移植的标准化部署流程。 作者丨唐文广:腾讯工程师,负责无线研发部地图测试。 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成、自动交付、自动部署...

    Edison 评论0 收藏0
  • 写给docker新手的文章

    摘要:为什么要用对开发者来说启动速度快传统虚拟机需要数分钟的启动时间秒秒钟启动。开发者只需要代码到版本管理即可,接下来的自动测试,自动构建,自动部署都交给吧更轻松的扩展。 1. 前言 相见恨晚用来形容我对docker的热爱再合适不过了,自从用了docker,开发环境也不安装了,系统想换就换了,部署更是一键部署,再也不用担心在这台机器上跑的好好的,其它机器有问题了... 写这篇文章,也是为do...

    svtter 评论0 收藏0
  • 【 全干货 】5 分钟带你看懂 Docker

    摘要:本文从定义,作用,技术架构,安装和使用等全方位带你看懂。最后,于开发者而言提供了一种开发环境的管理办法,与测试人员而言保证了环境的同步,于运维人员提供了可移植的标准化部署流程。显示上图内容就表明安装完成。 作者丨唐文广:腾讯工程师,负责无线研发部地图测试。 导语:Docker,近两年才流行起来的超轻量级虚拟机,它可以让你轻松完成持续集成、自动交付、自动部署,并且实现开发环境、测试环...

    lavnFan 评论0 收藏0

发表评论

0条评论

Bryan

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<