前言

        最近笔者在做的一个微服务项目中需要使用到Docker,而作者之前从未接触到这一方面的技术,所以接下来的内容,我将以一个初学者的角度,为大家呈现关于Docker的学习内容。本篇,我们需要完成的目标有:


  • 清楚Docker为什么会出现
  • 知晓什么是Docker
  • 完成Docker的安装,卸载
  • 了解Docket的底层原理
  • 对比Docker和虚拟机技术的差异

零基础学Docker【1】 | 一文带你快速了解并上手Docker_微服务

申明

        部分内容来源于网上资源,如若侵犯到您的权益,请联系作者第一时间删除

Docker为什么会出现

        一款产品从开发到上线,从操作系统,到运行环境,再到应用配置。作为开发+运维之间的协助我们需要关心的问题很多,这也是很多互联网公司不得不面对的问题。特别是各种版本的迭代之后,不同版本环境的兼容,对运维人员都是考验

        Docker之所以发展如此迅速,也是因为它给出了一个标准化的解决方案。

        环境配置如此麻烦,换一台机器,就要重新来一次,费力费时。很多人想到,能不能从根本上解决问题,软件可以带环境安装 ? 也就是说,安装的时候,把原始环境一模一样的复制过来。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作,在你的电脑上运行失败”的问题。

        之前在服务器配置一个应用的运行环境,要安装各种软件,就拿某谷的电商项目为例,Java/Tomcat/Mysql/JDBC驱动包等,安装和配置这些东西有多麻烦就不必多说了。它还不能跨平台。假设我们是在Windows上安装的这些环境,到了Linux又得重新安装。况且就算不跨操作系统,换另一台同样的操作系统的服务器,要移植应用也是非常的麻烦的。

        传统上认为,软件编码开发/测试结束以后,所产出的结果即是程序或是能够编译执行的二进制字节码(以Java为例)。而为了让这些程序可以顺利执行,开发团队也得准备完整的部署文件,让运维团队得以部署应用程式,开发需要清楚的告诉运维部署团队,用的全部配置文件+所有软件环境。不过,即便如此,仍然常常发生部署失败的情况。Docker镜像的设计,使得Docker得以打破过去【程序即应用】的观念。透过镜像(images)将作业系统核心除外,运作应用程式所需要的系统环境,由下而上打包,达到应用程式跨平台间的无缝接轨运作。

什么是Docker

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

零基础学Docker【1】 | 一文带你快速了解并上手Docker_云计算/大数据_02

        Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

Docker的安装

Docker的基本组成

零基础学Docker【1】 | 一文带你快速了解并上手Docker_运维_03

镜像(image):

        docker镜像就好比是一个目标,可以通过这个目标来创建容器服务。例如现在有一个tomcat的镜像,我们需要通过run命令将其运行起来,启动的服务就是一个个容器,其中一个容器的名字我们就可以称作是tomcat01…我们通过一个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。

容器(container):

        Docker利用容器技术,独立运行一个或者一组应用,通过镜像来创建的。

        容器最基本的使用,包含启动,停止,删除。

        我们暂且可以把这个容器理解成就是一个简易的Linux系统。

仓库(repository):

        仓库就是存放镜像的地方

        仓库类似于Git,分为公有仓库和私有仓库

        其中官方仓库 Docker Hub是国外的,而国内很多公司,像阿里云,华为云…都有自己的容器服务,Docker默认使用的是国外的仓库,我们在国内访问就很慢,所以我们在学习的时候就需要配置镜像加速!


安装Docker


环境准备


        如果我们想要安装最新的Docker,可以参考官方文档​​https://docs.docker.com/​

        上面已经声明:


  1. Linux要求内核3.0以上
  2. CentOS 需要是7版本的

零基础学Docker【1】 | 一文带你快速了解并上手Docker_云计算/大数据_04

        那具体如何查看CentOS系统的内核呢

[root@localhost docker]# uname -r
3.10.0-1127.el7.x86_64

        查看系统版本信息

[root@localhost docker]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"

CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"


安装


        帮助与开发文档:​ ​https://docs.docker.com/engine/install/​​

1、如果安装过旧版本的docker请先卸载

yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine

2、需要的安装包

yum install -y yum-utils

3、设置镜像的仓库

yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#上述方法默认是从国外的,不推荐

#推荐使用国内的,阿里云docker镜像
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

4、更新yum软件包索引(可选)

yum makecache fast

5、安装docker相关的

        需要注意,docker-ce 社区版 而ee是企业版。这里我们使用社区版即可。

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

6、启动docker

# 启动docker
systemctl start docker

        如果我们想要设置为开机自启的话

# 设置为开机自启
systemctl enable docker

7、测试是否安装成功

[root@localhost docker]# docker version
Client: Docker Engine - Community
Version: 19.03.13
API version: 1.40
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:03:45 2020
OS/Arch: linux/amd64
Experimental: false

Server: Docker Engine - Community
Engine:
Version: 19.03.13
API version: 1.40 (minimum version 1.12)
Go version: go1.13.15
Git commit: 4484c46d9d
Built: Wed Sep 16 17:02:21 2020
OS/Arch: linux/amd64
Experimental: false
containerd:
Version: 1.3.7
GitCommit: 8fba4e9a7d01810a393d5d25a3621dc101981175
runc:
Version: 1.0.0-rc10
GitCommit: dc9208a3303feef5b3839f4323d9beb36df0a9dd
docker-init:
Version: 0.18.0
GitCommit: fec3683

8、测试运行一个helloworld镜像

[root@localhost docker]# docker run hello-world

        当看到出现 Hello from Docker! 说明我们第一个测试镜像就运行成功了。至于标黄的部分是什么意思,这里卖个关子,下文会讲解到,注意留意哟~

零基础学Docker【1】 | 一文带你快速了解并上手Docker_云计算/大数据_05

9、查看已经下载的镜像

[root@localhost docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 10 months ago 13.3kB

10、docker 的卸载(了解)

        这个仅做了解学习,当我们需要卸载docker,需要按照下面的步骤执行。

1. 卸载Docker Engine,CLI和Containerd软件包
yum remove docker-ce docker-ce-cli containerd.io
2. 删除资源
rm -rf /var/lib/docker

11、配置阿里云镜像加速

        上文我们谈到过,docker的镜像仓库默认访问的是国外的官方库,所以为了提速,我们这里配置阿里云的镜像进行加速。

         登录阿里云

​ ​https://cr.console.aliyun.com/​​

        搜索 “ 容器镜像服务 ”

零基础学Docker【1】 | 一文带你快速了解并上手Docker_Docker_06

        根据提示,配置镜像加速器

零基础学Docker【1】 | 一文带你快速了解并上手Docker_微服务_07

mkdir -p /etc/docker
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://jxxjrm28.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

Docker run运行原理图

        还记得菌在上边卖的关子吗,当我们在测试运行一个helloworld镜像,大家有想过Docker run的运行原理吗?

        以我们运行一个helloworld镜像为例,首先Docker会去本机寻找镜像,如果没有找到,它会去DockerHub上去下载,如果能够找到并下载到本地就会使用这个镜像去执行,否则就会返回找不到该镜像的错误。

零基础学Docker【1】 | 一文带你快速了解并上手Docker_运维_08

Docker的底层原理

1、Docker是怎么工作的?

        Docker是一个Client-Server结构的系统,Docker的守护进程运行在主机上。通过Socket从客户端访问!

        Docker-Server接收到Docker-Client的指令,就会执行这个命令!

零基础学Docker【1】 | 一文带你快速了解并上手Docker_运维_09

2、Docker为什么比VM快?

        1、Docker有着比虚拟机更少的抽象层

        2、Docker利用的是宿主机的内核,vm需要的是 GuestOS


GuestOS: VM(虚拟机)里的的系统(OS)

HostOS:物理机里的系统(OS)


零基础学Docker【1】 | 一文带你快速了解并上手Docker_运维_10

        所以说,新建一个容器的时候,docker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载 Guest OS,分钟级别的,而docker 是利用宿主机的操作系统,省略了这个复杂的过程,属于秒级别的!

彩蛋

        有幸收藏过一份尚硅谷周阳老师制作的Docker思维导图,想获取源文件的朋友,可以在公众号【猿人菌】后台回复“Docker思维导图”获取哟~

零基础学Docker【1】 | 一文带你快速了解并上手Docker_Docker_11

下期预告

        下一篇文章将为大家带来关于Docker中常用命令的使用,以及在Docker中部署Nginx,Tomcat,ES+Kibana 的教程…敬请期待!

        一键三连,养成习惯~


文章持续更新,可以微信搜一搜「 猿人菌 」第一时间阅读,思维导图,大数据书籍,大数据高频面试题,海量一线大厂面经…期待您的关注!