公司内部一直在使用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. 查看cpu核的相关信息

    查看CPU信息(型号) cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 80 Intel(R) Xeon(R) CPU E7-4820 v3 ...

  2. git 版本控制中回溯到某个历史版本

    1.git log 查看之前的版本号 2. git reset --hard 版本号 3.git push -f -u origin 分支 恢复上一个版本是: git reset --hard HEA ...

  3. laravel 提交空字符串会被转成null解决方法

    在app\Http\Kernel.php文件夹中,注释全局中间件: \Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull:: ...

  4. c# 基础类型探索

    一.前言 本章节主要是探索 C# 的基本类型,一直以来我本人常用都是 int .double.bool.decimal.string 这五个类型,其对其它类型没有认真了解过.只是以前在学习的时候背了些 ...

  5. 一个栈的入栈序列为ABCDEF,则不可能的出栈序列是

    技术之瞳 阿里巴巴技术笔试心得习题2.65:  一个栈的入栈序列为ABCDEF,则不可能的出栈序列是(D)  A.DEFCBA B.DCEFBA C.FEDCBA  D.FECDBA E.ABCDEF ...

  6. 使用gomod后,导入模块与编译要注意的事项

    问题:在使用go mod后,执行编译会报错: Cannot load xxx: cannot find module providing package xxx 目录结构如下: J:. │ └─src ...

  7. 定时任务-SQL Server代理 作业

    创建一个sqlserver作业 sqlserver的作业的功能更加偏向于数据库,处理数据,迁移等.当然也可以调用接口(存储过程调用接口  https://www.cnblogs.com/cynchan ...

  8. java抽象类及接口

    Java抽象类: 抽象类特点:抽象类除了不能实例化对象之外,类的其它功能依然存在,成员变量.成员方法和构造方法的访问方式和普通类一样. 由于抽象类不能实例化对象,所以抽象类必须被extends [抽象 ...

  9. JDK1.8 的 HashMap 源码之注意事项

    文章目录 链表变树 树形结构与Comparable,性能极致与降低 链表与树之间转换的阈值 英语渣靠着翻译插件,大概翻译的,难免有错误之处,注意甄别: 链表变树 This map usually ac ...

  10. python 之 前端开发(form标签、单选框、多选框、file上传文件、按钮、label标签、下拉列表、textarea标签、fieldset标签、table标签)

    11.25 form标签 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&q ...