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

前言

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

  • 清楚Docker为什么会出现

  • 知晓什么是Docker

  • 完成Docker的安装,卸载

  • 了解Docket的底层原理

  • 对比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 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版),我们用社区版就可以了。

Docker的安装

Docker的基本组成

在这里插入图片描述
镜像(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版本的

在这里插入图片描述
        那具体如何查看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! 说明我们第一个测试镜像就运行成功了。至于标黄的部分是什么意思,这里卖个关子,下文会讲解到,注意留意哟~

在这里插入图片描述

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/

        搜索 “ 容器镜像服务 ”

在这里插入图片描述
        根据提示,配置镜像加速器

在这里插入图片描述

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是怎么工作的?

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

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

在这里插入图片描述

2、Docker为什么比VM快?

        1、Docker有着比虚拟机更少的抽象层
        2、Docker利用的是宿主机的内核,vm需要的是 GuestOS

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

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

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

彩蛋

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

下期预告

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

        一键三连,养成习惯~

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

大数据梦想家 CSDN认证博客专家 CSDN博客专家 大数据学者 追梦人
大数据学者,坚信技术成就自我。
个人原创公众号「 大数据梦想家 」,每日更新大数据干货,欢迎上车!
一天的生活就是一生的缩影。在最美的年华,做最好的自己!!!
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页