Docker从入门到DevOps,看完这个系列就够了(一)

Stella981
• 阅读 705

Docker从入门到DevOps,看完这个系列就够了(一)

文章索引

Docker从入门到DevOps系列目录

  • Docker从入门到DevOps| 第一篇:DevOps工程的基石 —— Docker
  • Docker从入门到DevOps| 第二篇:Docker常用命令 —— 镜像与容器操作
  • Docker从入门到DevOps| 第三篇:Docker镜像封装以及提交镜像至阿里云镜像库
  • Docker从入门到DevOps| 第四篇:用Docker部署一个基于SpringBoot + vue 前后端分离的应用
  • Docker从入门到DevOps| 第五篇:一键部署你的应用 —— docker-compose初体验
  • Docker从入门到DevOps| 第六篇:初探DevOps思想,DevOps利器walle介绍
  • Docker从入门到DevOps| 第七篇:Docker + walle + SpringBoot + Git实现项目的DevOps(一)
  • Docker从入门到DevOps| 第八篇:Docker + walle + SpringBoot + Git实现项目的DevOps(二)
  • Docker从入门到DevOps| 第九篇:Docker + walle + SpringBoot + Git实现项目的DevOps(三)
  • Docker从入门到DevOps| 第十篇:初探Docker、Kubernetes与微服务思想

前言

  1. 本系列适合想了解Docker和DevOps的同学,学完你将可以熟练使用Docker,熟练使用DevOps思想部署你的项目
  2. 本系列的每一行代码都是确保可用的,请放心使用。
  3. 本系列所有用到的软件将免费提供下载。
  4. 学习本系列,最快的方法是先动手将软件安装好,并简单使用一下,然后再回头来看这篇文章,效果更佳。

什么是Docker?

在讲解Docker具体的概念前,我们先来单刀直入的定义下Docker:

  1. Docker是一个软件,英文单词意为集装箱,是一种成熟的轻量级类虚拟机技术。
  2. 每一个Docker容器可以看做一个单独分配有cpu、内存、硬盘等设备的小虚拟机。
  3. 要初步入门Docker,你需要了解它的几个术语:镜像库镜像容器

有使用过VMware的同学一定会对「虚拟机」,「镜像」等词非常熟悉,如果你装过windows系统,你也一定见过windows的iso镜像。如果你都听说过,那么恭喜你已经差不多入门了,Docker在这方面跟VMware是类似的,他们都是一款基于指定格式镜像的虚拟机软件。

其实刚入门的朋友可以把Docker看做一款轻量的虚拟机技术,但实际上Docker并不是虚拟机,想深入了解Docker与VMware的区别,可以看另一篇文章Docker和VMware有什么区别?,这个话题就点到即止。

如果你没有使用过VMware也没关系,请看下图:

Docker从入门到DevOps,看完这个系列就够了(一)

可以看到,一台搭载Linux系统(比如CentOS系统)并拥有一定配置的服务器,通过Docker引擎在系统中启动了多个Docker容器,每个容器都被自动分配了一定的配置,它们都可以看做一个独立的CentOS系统,这就是Docker —— 一款轻量级的类虚拟机软件。

相信你已经对Docker软件有了大概的了解,下面就来说下Docker软件的一些术语:

  1. 镜像(Image):类似于windows系统镜像。是封装好的Linux系统镜像。
  2. 容器(Container):基于镜像启动的容器,类似linux系统环境,作用是运行和隔离应用。如果你学习过Java或者面向对象编程,那镜像可以比作一个类,而容器就是该类的一个具体对象。
  3. 镜像仓库(Repository):类似Git代码仓库,Docker也有属于自己的镜像库,用来在线存储所有用户上传的镜像。用户可以方便的搜索想要的镜像,并通过Docker命令下载到本地。

目前Docker官方的镜像仓库网址是:https://hub.docker.com,但是需要梯子,不然很慢很慢,下一章我们会解决这个问题。

为什么要用Docker?

跟上一节一样,我们也先简单说一下为什么要用Docker:

  1. 如果你部署了很多应用在CentOS系统中,Docker能帮你把它做成镜像,让你在任何其他服务器复制该CentOS系统状态,实现集群环境下的系统低成本快速迁移。
  2. 镜像是Docker的灵魂,在国内外都有大量的镜像库供你使用,无论你要安装什么样的服务器(比如Nginx,Redis,数据库,消息队列等常用组件的服务器),已经有人替你安装好了并打包成镜像了,你无需再次重复复杂的安装过程,只需到镜像库找相关镜像即可
  3. 给业界提供了新一代的虚拟化技术,Docker与云的结合,让云空间得到更充分的利用。不仅解决了硬件管理的问题,也改变了虚拟化的方式。

如果上面几点还不足以让你感受到使用Docker带来的好处,那我们可能还得从行业的痛点开始讲起。

  • 开发和运维之间因为环境不同而导致的矛盾,“我本地环境没有这个问题”。
  • 软件更新发布及部署低效,过程繁琐且需要人工介入,可能还会产生大量文档。
  • 环境一致性难以保证,不同环境之间迁移成本太高。

而有了Docker则可以很大程度上解决上述问题,因为Docker的核心是构建镜像,甚至可以做到Build Once, Run Anywhere(一次构建,多处运行),事实上目前流行的DevOps方案,绝大部分都是基于Docker,可以说Docker是现代DevOps工程部署方案的基石

Docker快速安装及使用

为了节省您宝贵的时间,请用主流的CentOS系统安装Docker。Docker目前仅支持CentOS 7以上的64位版本,使用命令

uname -r

查看你CentOS的内核版本,Docker 要求 CentOS 系统的内核版本高于 3.10。

如果您没有符合上述要求的CentOS环境,请点击下载VMWare虚拟机以及CentOS7镜像,并按文章指引安装。

如果您的系统就绪,可以按照下面6个步骤安装以及运行Docker。

  1. 卸载旧版本

如果没有安装过Docker,可以略过这一步。如果已安装过Docker,请卸载它们以及相关的依赖项。复制以下命令并执行即可。

sudo yum remove docker  docker-common docker-selinux docker-engine
  1. 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的。

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

  2. 设置yum源,使用以下命令来设置稳定的仓库。

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

  3. 用yum安装docker。

    sudo yum install -y docker-ce docker-ce-cli containerd.io

  4. Docker 安装完默认未启动,通过以下命令启动Docker。

    sudo systemctl start docker

  5. 通过运行 hello-world 镜像来验证是否正确安装了 Docker。

    sudo docker run hello-world

如图所示,出现Hello from Docker!则表示Docker安装成功。

Docker从入门到DevOps,看完这个系列就够了(一)

下面简单介绍一下docker run hello-world命令:

  • hello-world代表一个镜像。
  • docker run [imageName] 表示用Docker引擎来对目标镜像启动一个容器。如果你本地没有该镜像,Docker会帮你从官方镜像库下载到本地。
  1. 查看用hello-world镜像生成的容器,用该命令可以查看所有在Docker引擎运行的容器:

    docker ps -a

Docker从入门到DevOps,看完这个系列就够了(一)

如图所示,CONTAINER ID表示用指定镜像生成的容器在Docker引擎里的唯一容器ID。IMAGE表示该容器基于哪个镜像。

  1. 查看已经下载到本地的镜像。使用命令:

    docker images

Docker从入门到DevOps,看完这个系列就够了(一)

如图所示,REPOSITORY字段表示镜像名,IMAGE ID表示镜像在Docker引擎里面的唯一镜像ID。在第7步的容器信息IMAGE字段跟镜像信息的REPOSITORY字段是对应的关系。

看完相信你已经对Docker有了一定的了解,下一章将会具体讲解Docker的常用命令。

版权声明

本文采用 CC BY 3.0 CN协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。如转载至微信公众号,请在文末添加作者公众号二维码。

感恩有你

我会不定期发布系列技术文章,如果您觉得我的文章有帮助,可以关注下我哦。

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
3个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Docker从入门到DevOps,看完这个系列就够了(三)
!(https://img.hacpai.com/bing/20180127.jpg?imageView2/1/w/960/h/540/interlace/1/q/100)文章索引Docker从入门到DevOps系列目录Docker从入门到DevOps|第一篇:DevOps工程的基石——DockerDocke
Stella981 Stella981
3年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
9个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这