公司内部一直在使用Docker进行服务的部署和应用的升级,从开始使用Docker一直到线上的部署以及一些基础服务的开发本人都有参与,而且自己的网站也是在Docker的基础之上进行构建的,想想也需要总结下,才能更好的使用这个工具,本篇就先进行一些简单的基础说明以便新人了解

简介

Docker 是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似iPhone的app),更重要的是容器性能开销极低。

简单理解,像是在我们自己的windows笔记本中安装虚拟机VM,在虚拟机上安装一个linux操作系统,然后我们将tomcat服务部署在这个虚拟机中的linux系统之上运行,大部分人应该搞过这种模式吧。类比Docker,Docker相当于VM,但是又有所不同,安装了Docker之后,我们同样也可以安装一个linux操作系统,管理都是通过Docker来进行,和VM有很多相似之处。

文字说明看看就好,实际操作起来你才能明白

安装

以centOS为例,其他各个平台均有对应使用说明,自行查找,这里还是以公司常用的linux内核服务器来作说明。

目前,CentOS 仅发行版本中的内核支持 Docker。Docker 运行在 CentOS 7 上,要求系统为64位、系统内核版本为 3.10 以上。Docker 运行在 CentOS-6.5 或更高的版本的 CentOS 上,要求系统为64位、系统内核版本为 2.6.32-431 或者更高版本。

查看下centOS7内核版本

[root@45cd851533f6 /]# uname -r
3.10.0-693.2.2.el7.x86_64

安装Docker CE(社区免费版)

[root@45cd851533f6 /]# uname -r
3.10.0-693.2.2.el7.x86_64

切换到root用户下操作,最简单的方式是使用yum安装,这里推荐这种方式,没安装yum的先安装yum

移除原有的旧版本

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

添加软件源信息:

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

更新 yum 缓存:

yum makecache fast

安装 Docker-ce:

yum -y install docker-ce

启动 Docker 后台服务

systemctl start docker

测试运行 hello-world

docker run hello-world

名词说明

Docker 镜像(Images):Docker 镜像是用于创建 Docker 容器的模板。

Docker 容器(Container):容器是独立运行的一个或一组应用。

有点抽象,我简单说明下,首先,镜像可以当成VM虚拟机上的一个已经打包好的操作系统,不同的是这个已经打包好的操作系统中可以放置好各种我们想放的东西,比如,公司的应用服务,tomcat应用,我可以将运行tomcat应用服务的linux系统(包括所有东西)全部打包成镜像保存下来。而容器就是运行的镜像,我打包好的操作系统(包含应用服务等等),我现在需要应用提供服务,我就可以将镜像运行起来,你可以理解成在VM中启动了一个linux操作系统,之前部署好的tomcat服务也在里面,这样就可以直接对外提供服务

简单使用

这里演示一个常用的操作来帮助初学者理解,比如我需要一个tomcat8的运行环境,先不管应用服务部署部分,如何搞定呢?如果是以前,测试环境肯定需要安装JDK8的环境,再下载Tomcat,然后修改配置文件等等操作,然后启动Tomcat,OK,那么Docker环境下如何做呢?

拉取镜像

添加上版本号,不添加默认latest,最新版本

docker pull tomcat:8.5-jre8

查看镜像

docker images

运行镜像

这里我用的是镜像id

docker run --name test -d 3639174793ba

查看容器

docker ps -a

至此,看到Up状态时就已经成功启动了一个Tomcat环境的容器,当然,这里端口没做映射,所以不能访问,如果需要访问,添加上参数-p 8080:8080,将宿主机端口映射到容器端口,就可以访问了。

更多命令请参考官网:https://www.docker.com/

总结

本篇文章只是简单介绍下Docker以及一些基础使用,便于初学者理解这是个什么技术,目前公司内部已经大量使用Docker技术,能明显感觉到有很多优点:

  • 隔离机制,容器之间互不影响,其中一个容器宕机,其他容器不会受到干扰
  • 资源利用最大化,以往每台机器上部署服务有限,资源会浪费,Docker容器可以最大化利用机器资源
  • 提升效率,部署应用直接拉取镜像部署即可,不用在基础环境上耗费大量人力物力,目前运维结合k8s使用更是将效率提升到一个新水平
  • 自动化发布,通过gitlab CI和发布系统打通直接进行镜像发布,速度非常快,而且也不会出现代码差异化

对于我自己而言,也能明显感觉到Docker这种技术带来的巨大变化,本地搭建新的测试环境也不用在物理机上安装各种各样头疼的环境依赖,直接随用随拉,用完直接删除,目前个人网站上也是用的Docker,帮助屏蔽掉许多重复操作,很好用,个人认为服务端开发人员应该都要去学习和使用Docker,能帮助方便而快速的进行开发工作

Docker那些事儿之初识Docker的更多相关文章

  1. Docker 学习应用篇之一: 初识Docker

    Docker 自从2013年以来就非常的火热,无论是从github上的代码活跃度,还是Redhat在RHE6.5中集成对Docker的支持,等等.第一次接触Docker,还是老师给我们介绍的. 1.初 ...

  2. Docker+.Net Core 的那些事儿-2.创建Docker镜像

    1.从store.docker.com获取.net core镜像 docker pull microsoft/dotnet 2.创建一个.net core项目,并发布 在上篇文章结尾建立的工作目录下, ...

  3. Docker 第一篇--初识docker

    已经多年不写博客, 看完<晓松奇谈>最后一期猛然觉醒, 决定仔细梳理下自己这几年的知识脉络. 既然决定写, 那么首先就从最近2年热门的开源项目Docker开始.Docker 这两年在国内很 ...

  4. 初识Docker和Windows Server容器

    概览 伴随着Windows Server 2016 Technical Preview 3 (TP3)版本的发布,微软首次提供了Windows平台下地原生容器.它集成了Docker对Windows S ...

  5. 初识docker

    什么是docker Docker 最初是 dotCloud 公司创始人 Solomon Hykes 在法国期间发起的一个公司内部项目,于 2013 年 3 月以 Apache 2.0 授权协议开源,主 ...

  6. 初识Docker和安装

    什么是Docker Docker的构想是要实现“Build,Ship and Run Any App,Anywhere”,即通过对应用的封装(Packaging).分发(Distribution).部 ...

  7. Docker实战系列一:初识Docker for Windows

    windows下安装Docker官网教程Install Docker for Windows Docker配置官网教程Get started with Docker for Windows

  8. Docker那些事儿之镜像创建

    之前已经了解了docker的基本使用方式,简单的上手,也能让大部分人了解到这个技术的使用方法,今天继续说明docker如何构建自己所需要的镜像,开发人员掌握使用基础即可,有兴趣的可以自行深入研究 前言 ...

  9. 初识 docker

    一.安装Docker 我使用的是腾讯云上的centos 7. docker -v 查看是否已经安装有docker 如果有 systemctl stop docker 停止docker服务 查看当前版本 ...

随机推荐

  1. ztree通过id获取节点对象

    var treeObj = $.fn.zTree.getZTreeObj("treeId"); var node = treeObj.getNodeByParam("id ...

  2. 史上最全最新java面试题合集二(附答案)

    下面小编整理了本套java面试题全集,分享给大家,希望对大家的java学习和就业面试有所帮助. 51.类ExampleA继承Exception,类ExampleB继承ExampleA. 有如下代码片断 ...

  3. React Hooks中父组件中调用子组件方法

    React Hooks中父组件中调用子组件方法 使用到的hooks-- useImperativeHandle,useRef /* child子组件 */ // https://reactjs.org ...

  4. gulp做的前端代码压缩报错,揭示具体错误 信息

    用gulp做的前端代码压缩,今天在打包的时候发现打包出错了.报的错误是--unable to minify JavaScript.但是至于为什么会不能打包,表示很困惑,然后通过一番搜索,最后得出了问题 ...

  5. sqlserver exists 与 in 的区别

    使用 EXISTS 方式 select * from A  a where EXISTS(select b.mainInfoId from B b  where b.mainInfoId=a.main ...

  6. [v]Windows下Git安装指南

    参考<Git权威指南>安装整理,图书配套网址参见[1] 1. Cygwin下安装配置Git 1. 在Windows下安装配置Git有2种不同的方案 (1)msysGit, (2)Cygwi ...

  7. 【转载】Intellij IDEA神器居然还有这些小技巧

    概述Intellij IDEA真是越用越觉得它强大,它总是在我们写代码的时候,不时给我们来个小惊喜.出于对Intellij IDEA的喜爱,我决定写一个与其相关的专栏或者系列,把一些好用的Intell ...

  8. C# 泛型集合排序

    Student sModel = new Student(); List<Student > list = new List<Student >(); list= list.O ...

  9. 对于vue中axios拦截器简单封装

    axios.interceptors.response.use( response => { // 如果返回的状态码为200,说明接口请求成功,可以正常拿到数据 // 否则的话抛出错误 if ( ...

  10. 读取普通java web项目下的WEB-INF目录下的配置文件(application.xml,xx.properties等配置文件)

    一.在Java web工程WEB-INF下创建weixin.properties属性文件 weixin.properties属性文件里内容如下: 二.创建PropertiesUtils.java测试类 ...