一文明白docker是什么

文章目录

  • 预备知识
  • 1 Docker是什么?
  • 2 Docker引擎
  • 3 Docker的架构
  • 4 Docker能做什么?
  • 5 Docker的优点
  • 6 docker的安装
  • 7 Doker 镜像加速(改镜像源)
    • 7.1 修改源
    • 7.2 第二步、服务重启
    • 7.3 验证是否配置成功
  • 8 卸载docker
  • 9 解决每次执行命令都需要sudo的问题

运维工程师及后端开发人员是肯定需要学习docker的,但是得益于其方便,近些年越来越火,桦桦最近在部署chirp stack服务器的时候,也用到了docker,今天就来谈谈。

网上很多关于docker的教程不能说不行,但是感觉都是去直接搬用官方的概念,根本没有消化就直接丢给我们,这对于新手来说,真的是一脸懵逼,于是乎,桦桦准备将已经消化好的知识丢给大家,用较通俗的语言讲明白docker。
但是还是得给出docker的官网。毕竟官方的才是最香的。

下面是docker的官网。
https://docs.docker.com/

预备知识

需要掌握Linux系统的使用。

  • 既然说到了Linux系统,我们就需要提一下虚拟机,docker是容器引擎,和虚拟机其实是很像的。
    当初我们为什么需要虚拟机,因为我们需要在我们的物理机上跑其他操作系统,但是我们不可能在去买一台电脑装LINUX系统吧(土豪除外),也不可能将原来的windows系统覆盖了吧,最好的情况就是在Windows系统中就可以运行Linux系统,虚拟机就帮了我们这个大忙,虚拟机在物理层面上,将硬件资源划分一部分出来给我们跑Linux系统,这样两个操作系统就可以在同一台物理机中互不干扰的运行。

  • 但是虚拟机也有缺陷,每个虚拟机就是一个操作系统,为什么真正的生产环境一般都是用linux操作系统,而不是使用Windows,就是因为linux系统消耗资源比较少。但是如果在一个物理服务器上放入10个虚拟机,每个虚拟机系统占用1g资源,等于浪费了10g的内存资源。所以当操作系统越来越多的时候消耗在系统上的资源也就越来越大。

  • 这时候,容器就出现了,docker将软件和其依赖的标准化打包,应用之间相互隔离(肯定没有虚拟机和物理机隔离的那么完全),共享同一个操作系统。就能在更小的硬件环境下做更多的事。你甚至可以使用docker在你的ubantu下运行其他版本的ubantu系统,这就好比俄罗斯套娃,在虚拟机下的操作系统又运行一个操作系统。

  • 容器说白了就是轻量级的虚拟机,容器和虚拟机的关系有点像线程与进程,但是容器和虚拟机是有区别的,虚拟机是物理资源层面的隔离,容器是应用层面的隔离。

  • 现在,我们一般将容器和虚拟机结合起来使用,就是用虚拟机安装Linux,在Linux里使用docker。
    有了虚拟机,我们可以在同一台电脑跑很多不同的操作系统,一个虚拟机装一个操作系统,操作系统之间互不干扰,而现在又有了容器,我们就可以在一个操作系统下部署多个web服务器。一个容器代表一个web服务器,容器之间互不干扰,但是又可以连接,是不是很厉害,下面开始介绍。

1 Docker是什么?

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

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

Docker 包括三个基本概念:

  • 镜像(Image):Docker 镜像(Image),就相当于是一个 root 文件系统。安装过系统的人肯定知道光盘ios,那个就是镜像,我们系统(操作系统本身就是软件)就是靠镜像启动起来的。然后我们用的应用软件也是有镜像的。
  • 容器(Container):镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等。我们使用镜像光盘生成了属于我们自己的操作系统,就相当于容器。
  • 仓库(Repository):仓库可看成一个代码控制中心(好比GitHub上的仓库),用来保存镜像。我们下载各种操作系统光盘时,一般都是去阿里云镜像网站,这个网站就相当于仓库。

简单点说,就是我们(我们就是客户端)通过命令行从外网的docker hub(因为在外国,会很慢,所以我们后面会介绍如何使用加速器。)上pull(拉取)我们需要的镜像到我们的主机(或者虚拟机)上,然后因为我们下载了docker,里面有一个组件,叫做docker daemon守护进程,他会帮助我们,用镜像创建容器,这样我们就可以直接使用相应的应用或者服务了。

  • 看完上面,我们在看下面的内容就不会很懵逼了。

2 Docker引擎

Docker Engine是具有以下主要组件的客户端-服务器应用程序:

  • 一种长期运行的程序,称为守护程序进程。(这个桦桦在之前的博客有介绍)
    Docker守护程序(dockerd)侦听Docker API(rest api)请求并管理Docker对象,例如图像,容器,网络和卷。守护程序还可以与其他守护程序通信以管理Docker服务。
    https://blog.csdn.net/weixin_46027505/article/details/104523814

  • REST API,它指定程序可以用来与守护程序进行通信并指示其操作的接口。

  • 命令行界面(CLI),客户端(使用docker命令)。
    客户端使用CLI命令来控制Docker守护程序或与Docker守护程序进行交互。许多其他Docker应用程序都使用基础API和CLI。

一文明白docker是什么_第1张图片

3 Docker的架构

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器。
Docker 容器通过 Docker 镜像来创建。
一文明白docker是什么_第2张图片

  • Docker客户端
    Docker客户端(docker)是许多Docker用户与Docker交互的主要方式。当您使用诸如之类的命令时docker run,客户端会将这些命令发送到dockerd,以执行这些命令。该docker命令使用Docker API。Docker客户端可以与多个守护程序通信。
  • Docker 主机(Host)
    一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。(即你的windows或者虚拟机下的linux系统)
  • Docker Registry(注册表)
    Docker 注册表存储Docker镜像。
    一个 Docker Registry 中可以包含多个仓库(Repository);每个仓库可以包含多个标签(Tag);每个标签对应一个镜像。(什么意思讷?就是说一个仓库里有ubantu的很多版本,一个tag代表一个版本,你可以指定pull哪个版本)
    Docker Hub提供了庞大的镜像集合供使用。Docker Hub是任何人都可以使用的公共注册表,并且Docker配置为默认在Docker Hub上查找镜像。您甚至可以运行自己的私人注册表。

使用docker pull或docker run命令时,所需的images将从配置的注册表中提取。使用该docker push命令时,会将images推送到配置的注册表。

一文明白docker是什么_第3张图片

4 Docker能做什么?

开发人员选择了不同语言和环境来进行开发,运维人员为了测试的话,就必须和开发应用的员工配置相同的环境,这样是非常低效率的。
而docker进行了容器的打包,打包好的容器,可以运行在任何的环境,解决了开发和运维直接的矛盾。开发和运维之间建立了桥梁。

官网上是这样说的,我概述一下,

  • 1 快速,一致地交付您的应用程序:
    开发人员在本地编写代码,并使用Docker容器与同事共享他们的工作。
    他们使用Docker将其应用程序推送到运维人员手中,并执行自动和手动测试。
    当开发人员发现错误时,他们可以快速进行修复,然后将其重新部署到测试环境中以进行测试和验证。
    测试完成后,将修复程序推送给生产环境。
  • 2 响应式部署和扩展
    Docker容器可以在开发人员的本地笔记本电脑上,数据中心内的物理或虚拟机上,云提供商上或混合环境中运行。
    Docker的可移植性和轻量级的特性还使您可以轻松地动态管理工作负载,并根据业务需求指示实时扩展或关闭应用程序和服务。
  • 在同一硬件上运行更多工作负载:
    Docker轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行且经济高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker非常适合高密度环境以及中小型部署,而您需要用更少的资源做更多的事情。

5 Docker的优点

现在容器技术是很火很火的,很好用很好用,我们原本搭建一个web服务器,可能要一个一个下载其依赖的软件,但是docker就只需要几步就可以帮你做了这些事情,后面会演示示例,你就知道多好用了。

6 docker的安装

有些地方会介绍使用官方的脚本下载,虽然一条命令就可以,但是是不推荐的,因为桦桦试过,会出现各式各样的问题。我还是建议一步一步安装。
要下载其他操作系统下的docker,请参考文章开头的官网。
请跳转:
https://blog.csdn.net/weixin_46027505/article/details/107088145

7 Doker 镜像加速(改镜像源)

国内从 DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,下面我们在ubantu 18.04下配置阿里云的加速器。

例如:

网易:https://hub-mirror.c.163.com/
阿里云:https://<你的ID>.mirror.aliyuncs.com
七牛云加速器:https://reg-mirror.qiniu.com

7.1 修改源

  • 在 /etc/docker/daemon.json 文件中添加以下参数(没有该文件则新建)

#修改或创建文件

 vim /etc/docker/daemon.json

#在文件中添加以下内容

 {
  "registry-mirrors": ["https://9cpn8tt6.mirror.aliyuncs.com"]
 }

7.2 第二步、服务重启

  • 使配置文件生效
systemctl daemon-reload
  • 重启docker
systemctl restart docker

7.3 验证是否配置成功

  • 输入命令
docker info
  • 出现下面的信息,说明成功。
Registry Mirrors:
    https://9cpn8tt6.mirror.aliyuncs.com

8 卸载docker

  • 卸载Docker Engine,CLI和Containerd软件包
sudo apt-get remove docker docker-engine
sudo apt-get purge docker-ce docker-ce-cli containerd.io
rm -fr /var/lib/docker/

9 解决每次执行命令都需要sudo的问题

由于docker daemon需要绑定到主机的Unix socket而不是普通的TCP端口,而Unix socket的属主为root用户,所以其他用户只有在命令前添加sudo选项才能执行相关操作。
在这里插入图片描述
如果不想每次使用docker命令的时候还要额外的敲一下sudo,可以按照下面的方法配置一下。

  • 创建group组
sudo groupadd docker
  • 添加当前用户用户到docker组
sudo gpasswd -a ${
     USER} docker
  • 重启 docker服务
sudo service docker restart
  • 切换会话,避免使用缓存的组信息
newgrp - docker

在这里插入图片描述

另外后面会更新如何使用docker以及compose。

你可能感兴趣的:(LoRaWAN,办公tools,项目,运维,docker,linux)