乐趣区

关于golang:Docker-学习-一Docker-是什么

Docker 学习 一

Docker 是什么

网址:https://hub.docker.com/

docker对过程进行封装隔离,属于 操作系统层面的虚拟化技术

因为隔离的过程独立于宿主和其它的隔离的过程,因而也称其为容器

docker 利用场景

  • 自动化测试和继续集成、公布
  • Web 利用的自动化打包和公布
  • 后盾利用易部署

docker 的劣势

  • 疾速,统一的交付应用程序
  • 可移植,可扩大
  • 笨重,疾速,经济,高效,压迫 linux 本身资源

Docker 能做什么?

先来说说 Docker 和虚拟机有啥不一样的

以前的虚拟机这样的,零碎占用资源大,很多步骤是冗余的,并且启动还很慢,不能忍

当初的 Docker 是这个样子的,

容器之间相互隔离,互补烦扰,一起运行在同一个操作系统上,最大化应用操作系统资源

Docker 技术和虚拟机技术的不同?

  • 每个容器间都是互相隔离的,他们有属于本人的文件系统,互相不会有影响
  • 容器没有本人的内核,没有本人的硬件,容器内的利用是间接运行在宿主机的内核中
  • 传统的虚拟机是虚构出一个硬件,运行实现的操作系统,在其下面运行利用

那么 Docker 具体能做什么?

做 DevOps

做 DevOps 有如下几个晋升点:

  • 利用能够更快捷的部署和交付

以前麻烦的装置步骤一去不复返,应用 Docker 容器化后,打包镜像公布测试,一键部署及运行

  • 能够更不便的降级和扩容

应用 Docker,将我的项目打包成镜像,降级不便,扩容不便

  • 开发,运维,测试都会更简略

再也不必放心开发环境,测试环境,运维环境不统一的状况了

  • 更高效的利用资源

Dcoker 是运行在宿主机的内核中,能够在这台物理主机上部署多个 Docker 实例

Docker 的组成

Docker 应用客户端 - 服务器 (C/S) 架构模式,应用近程 API 来治理和创立 Docker 容器

Docker 的三个基本概念:

图片来源于网络

  • 镜像

相当于是一个 root 文件系统,相似于一个模板,这是动态的

  • 容器

相当于从模板拉进去的一个实例,容器通过镜像来创立,咱们能够对他做创立,启动,进行,暂停,删除等操作

  • 仓库

用来保留镜像的,能够看做是一个代码控制中心

Docker 的装置和应用

装置

网络上装置 Docker 的形式大抵有如下几种:

  • 官网脚本主动装置
  • 应用 Docker 仓库装置
  • 应用 ==shell== 脚本装置

咱们以 ubuntu 的零碎为例子,应用 Docker 仓库的形式进行装置,我的 ubuntu 零碎版本如下:

# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.5 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.5 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

设置仓库

装置依赖包

sudo apt-get update
sudo apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

增加 Docker 的官网 GPG 密钥:

curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

验证秘钥,能够间接搜寻 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88 前面的 8 个字符

sudo apt-key fingerprint 0EBFCD88

有如下输入为正确设置了秘钥

pub   rsa4096 2017-02-22 [SCEA]
      9DC8 5822 9FC7 DD38 854A  E2D8 8D81 803C 0EBF CD88
uid           [unknown] Docker Release (CE deb) <docker@docker.com>
sub   rsa4096 2017-02-22 [S]

设置稳定版仓库

sudo add-apt-repository \
   "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ \
  $(lsb_release -cs) \
  stable"

装置 Docker

装置最新的 Docker 版本

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io

装置实现后,验证是否 OK

能够通过 docker version 来查看 docker 的版本

# docker version
Client: Docker Engine - Community
 Version:           20.10.7
 API version:       1.41
 Go version:        go1.13.15
 Git commit:        f0df350
 Built:             Wed Jun  2 11:56:40 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.7
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.13.15
  Git commit:       b0f5bc3
  Built:            Wed Jun  2 11:54:48 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.8
  GitCommit:        7eba5930496d9bbe375fdf71603e610ad737d2b2
 runc:
  Version:          1.0.0
  GitCommit:        v1.0.0-0-g84113ee
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0

运行一个 hello-world

sudo docker run hello-world

呈现如下信息,为 docker 装置胜利

Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
b8dfde127a29: Pull complete
Digest: sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e
Status: Downloaded newer image for hello-world:latest

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

To try something more ambitious, you can run an Ubuntu container with:
 $ docker run -it ubuntu bash

Share images, automate workflows, and more with a free Docker ID:
 https://hub.docker.com/

For more examples and ideas, visit:
 https://docs.docker.com/get-started/

当然,你也能够抉择不装置最新的,装置本人指定的版本也可

  1. 应用 ==apt-cache madison docker-ce== 查看仓库中可用的版本
  2. 应用 ==sudo apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io== 装置指定版本的 Docker
  3. 应用 ==sudo docker run hello-world== 验证是否装置胜利
  • 查看 docker 镜像
# docker images
REPOSITORY        TAG       IMAGE ID       CREATED        SIZE
hello-world       latest    d1165f221234   4 months ago   13.3kB
  • docker 镜像
卸载镜像
sudo apt-get purge docker-ce docker-ce-cli containerd.io

删除装置目录
/var/lib/docker 是 docker 的默认装置门路
 sudo rm -rf /var/lib/docker
 sudo rm -rf /var/lib/containerd

镜像减速

如果是应用阿里云服务器的小伙伴能够看这一步

配置镜像减速,须要 docker 的装置版本在 1.10.0 以上,咱们以后装置的 docker 版本为 1.41,完全符合

咱们能够通过批改 daemon 配置文件 /etc/docker/daemon.json 来应用加速器,执行如下指令

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

docker run 的流程

  • docker run 当初本地找对应的镜像,若有则间接运行
  • 若没有就去 docker hub 上下载,若有就下载到本地后运行
  • 若没有就间接报错

Docker 的底层原理

Docker 是如何工作的?

docker 是一个 C /S 模型,docker 的后盾守护进行运行在主机上,客户端和服务端通过套接字 Socket 通信

docker 服务端收到 docker 客户端的指令时,则执行该指令

为什么 Docker 比 虚拟机快呢?

在网络上找了一张图,咱们比照一下就明确了

如图,Docker 比虚拟机快的起因如下:

  • docker 比虚拟机的形象层更少
  • docker 利用的是宿主机的内核,而虚拟机是须要新建一个 OS

基于如上 2 点,虚拟机启动时,会加载操作系统,启动慢,工夫基本上是 分钟级

docker 启动的时候,不须要加载操作系统内核,因而快,工夫基本上是 秒级

参考资料:

docker docs

欢送点赞,关注,珍藏

敌人们,你的反对和激励,是我保持分享,提高质量的能源

好了,本次就到这里

技术是凋谢的,咱们的心态,更应是凋谢的。拥抱变动,背阴而生,致力向前行。

我是 小魔童哪吒,欢送点赞关注珍藏,下次见~

退出移动版