侧边栏壁纸
  • 累计撰写 98 篇文章
  • 累计创建 20 个标签
  • 累计收到 3 条评论

Docker简介与安装

林贤钦
2020-07-08 / 0 评论 / 9 点赞 / 686 阅读 / 3,516 字
温馨提示:
本文最后更新于 2022-04-25,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

Docker简介与安装

一、简介

1、Docker 是什么?

  • Docker是一个容器化平台,它包装了你所有开发环境依赖成一个整体,像一个容器。保证项目开发、测试,发布等各生产环节都可以无缝工作在不同的平台
  • Docker容器:将一个软件包装在一个完整的文件系统中,该文件系统包含运行所需的一切:代码,运行时工具,系统库等。可以安装在服务器上的任何东西
  • 这保证了软件总是运行在相同的运行环境,无需考虑基础环境配置的改变

解决了运行环境和配置问题软件容器,方便做持续集成并有助于整体发布的容器虚拟技术

2、Docker的概念

Docker是开发人员和系统管理员使用容器开发,部署和运行应用程序的平台。使用linux容器来 部署应用程序成为集箱化。使用docker来轻松部署应用程序。

3、集箱化的优点

  • 灵活:即使是复杂的应用程序也可以封装
  • 轻量级:容器利用并共享主机内核
  • 便携性:可以在本地构建,部署到云上并在任何地方运行
  • 可扩展性:可以增加和自动分发容器副本
  • 可堆叠:可以垂直堆叠服务并及时堆叠服务

4、images和容器

  • Docker image 是 Docker 容器的源。换言之,Docker images 用于创建 Docker 容器(containers)。映像(Images)通过 Docker build 命令创建,当 run 映像时,它启动成一个 容器(container)进程。
  • Docker containers -- Docker 容器 -- 是包含其所有运行依赖环境,但与其它容器共享操作系统内核的应用,它运行在独立的主机操作系统用户空间进程中。Docker 容器并不紧密依赖特定的基础平台:可运行在任何配置的计算机,任何平台以及任何云平台上。

5、虚拟机和Linux容器

  • 虚拟机(virtual machine)就是带环境安装的一种解决方案。它可以在一种操作系统里面运行另一种操作系统,比如在Windows系统里面运行Linux系统。

    应用程序对此毫无感知,因为虚拟机看上去跟真丝系统一模一样,而对于底层系统来说,虚拟机就是一个普通文件,不需要了就删掉,对其它部分毫无影响。

  • Linux容器不是模拟一个完整的操作系统,而是对进程进行隔离。或者说,在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。

    由于容器是进程级别的,相比虚拟机又很多优势。

一个容器中运行原生Linux和共享主机与其它容器的内核,它运行一个独立的进程,不占用任何其它可执行文件的内存,使其轻量化。相比之下,虚拟机(VM)运行一个完整的“客户”操作系统,通过虚拟机管理程序虚拟访问主机资源。一般来说,虚拟机提供的环境比大多数应用程序需要的资源多。

虚拟机的缺点:

  • 资源占用多:虚拟机会独占一部分内存和硬盘空间。它运行的时候,其他程序就不能使用这些资源了。哪怕虚拟机里面的应用程序,真正使用的内存只有1M,虚拟机依然需要几百MB的内容才能运行。
  • 冗余步骤多:虚拟机是完整的操作系统,一些系统级别的操作步骤,往往无法跳过,比如用户登录。
  • 启动慢:启动操作系统需要多久,启动虚拟机就需要多久。可能要等几分钟,应用陈故乡才能真正运行。

Linux容器的有点:

  • 启动快:容器里面的应用,直接就是底层系统的一个进程,而不是虚拟机内部的进程。所以,启动容器相当于启动本机的一个进程,而不是启动一个操作系统,速度就快很多。
  • 资源占用少:容器只占用需要的资源,不占用那些没有用到的资源;虚拟机由于是完整的操作系统,不可避免要占用所以资源。另外,多个容器可以共享资源,虚拟机都是独享资源。
  • 体积小:容器只要包含用到的组件即可,而虚拟机是整个操作系统的打包,所以容器文件比虚拟机文件要小很多。总之,容器有点像轻量级的虚拟机,能够提供虚拟化的环境,但是成本开销小得多。

6、Docker解决什么问题?

  • 环境管理复杂:从各种OS到各个中间件再到各种App,一款产品能够成功发布,作为开发者需要关心的东西太多,且难于管理,这个问题在软件兴业中普遍存在并需要直接面对。Docker可以简化部署多种应用实例工作,比如Web应用、后台应用、数据库应用、大数据应用比如Hadoop集群、消息队列等等都可以打包成一个image部署。
  • 云时代的到来:AWS的成功,引到开发者将应用转移到云上,解决来硬件管理的问题,然而软件配置和管理香瓜的问题依然存在。Docker的出现正好能帮助软件开发着开阔思路,尝试新的软件管理的方法解决这个问题。
  • 虚拟化手段的变化:云时代采用标配硬件来降低成本,采用虚拟化手段来满足用户按需分配的资源需求以及保证可用性和隔离性。然而无论是KVM还是Xen,在Docker看来都是在浪费资源,又难于管理,更加轻量级大LXC更加灵活和快速:
  • LXC的便携性:LXC在Linux 2.6的Kernel里就已经存在了,但是其设计之初并非为云计算考虑,缺少标准化的描述手段和容器的可便携性,决定其构建出的环境难于分发和标准化管理(相对于KVM之类的image和sanpshot的概念)。Docker就在这个问题上作出了实质性的创新方法。

7、Docker的主要用途

  • 提供了一次性的环境:比如,本地测试他人的软件、持续集成的时候提供单元测试和构建的环境。
  • 提供弹性的云服务:因为Docker容器可以随开随关,很适合动态扩容和缩容。
  • 组建微服务架构:通过多个容器,一台机器可以跑多个服务,因此在本机就可以模拟出微服务架构。

8、Docker 中心(hub)什么概念?

Docker hub 是云基础的 Docker 注册服务平台,它允许用户进行访问 Docker 中心资源库,创建自己的 Docker 映像并测试,推送并存储创建好的 Docker 映像,连接 Docker 云平台将已创建好的指定 Docker 映像布署到本地主机等任务。它提供了一个查找发现 Docker 映像,发布 Docker 映像及控制变化升级的资源中心,成为用户组或团队协作开发中保证自动化开发流程的有效技术途径。

9、基本 Docker 应用流程

  • 初始,所有都有赖于 Dockerfile 配置文件。Dockerfile 配置文件就是创建 Docker image (映像) 的源代码。
  • 一旦 Dockerfile 配置好了,就可以创建(build)并生成 'image(映像)' ,'image' 就是 Dockerfile 配置文件中 「源代码」的「编译」版本。
  • 一旦有了 'image' ,就可以在 registry(注册中心) 发布它。 'registry' 类似 git 的资源库 -- 你可以推送你的映像(image),也可取回库中的映像(image)。
  • 之后,你就可以使用 image 去启动运行 'containers(容器)'。运行中的容器在许多方面,与虚拟机非常相似,但容器的运行不需要虚拟管理软件的运行。

二、linux(centos)安装Docker

docker安装在centos的官方文档https://docs.docker.com/engine/install/centos/

1、卸载旧版本

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

2、安装yum-utils包

它提供yum config-manager实用程序并设置稳定存储库。

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

3、安装最新版本的引擎和容器

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

4、开启docker

sudo systemctl start docker

5、测试docker

sudo docker run hello-world

三、阿里云镜像加速

阿里云文档https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["你的阿里云加速器地址"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
9

评论区