Docker入门篇(一)
插播!插播!插播!亲爱的朋友们,我们的Cmake/Makefile/Shell这三个课程上线啦!感兴趣的小伙伴可以去下面的链接学习哦~
构建工具大师-CSDN程序员研修院
一、引言
随着云计算的兴起,应用部署和管理变得愈加复杂。传统的应用程序通常需要在特定的操作系统和硬件环境中运行,这导致了部署和管理上的困难。为了解决这一问题,容器化技术应运而生。其中,Docker作为一种轻量级、高效的容器化解决方案,受到了广泛的关注和应用。
二、Docker简介
什么是Docker呢?想象一下,你在一家大型餐厅工作,这里需要准备各种各样的菜看。Docker就像是餐厅里的一套高效的食品容器系统。
首先,每道菜肴需要特定的食材和烹饪方法,就像不同的软件应用需要特定的程序和运行环境。在传统的方式中,你可能需要为每种菜肴准备一个单独的厨房,这既费时又占空间。但是,如果使用Docker,你就可以为每种菜使用一个专门的容器。这些容器都在同一个厨房里 (也就是同台服务器上),但彼此完全独立,互不干扰。
这些容器就像是预先准备好的食品盒,每个盒子里都有制作一道特定菜肴所需的所有食材和调料。当你需要准备某道菜时,你只需要拿出对应的食品盒,里面的一切都已经准备好了,你可以直接开始烹饪。这就是Docker镜像和容器的概念:镜像是包含应用及其依赖环境的模板,而容器是这个模板的运行实例。
使用Docker,你可以确保每道菜看都在一个完全控制和标准化的环境中准备,无论是在你的餐厅还是在别的地方。这保证了软件应用的一致性和可移植性,就像你可以确保每次都能以同样的方式准备出一致的菜看一样。
总而言之,Docker通过提供一个标准化、轻量级的容器环境,使得部署和运行应用程序就像在餐厅里使用预先准备好的食品盒一样简单和高效。这大大简化了软件开发和运维的工作,就像一个高效的食品容器系统简化了餐饮服务一样。
Docker是一个开源项目,提供了一种封装应用程序及其依赖的容器化机制。它允许开发者将应用程序及其依赖打包为一个独立的容器,从而实现在不同环境中的一致部署和管理。Docker容器使用轻量级的隔离机制,使得应用程序可以在不同的环境中具有一致的运行环境,从而简化了开发和部署的过程。
三、Docker的优点
要明白docker有哪些优点,首先要追溯到为什么会产生docker这个工具。在当前工作流程中我们经常会遇到这些问题,应用开发,测试,部署,各种库的依赖纷繁复杂,再加上版本变化很快,版本之间存在差异,经常出现在开发运行环境正常,而到测试环境和线上环境就出问题的现象,程序员们饱受此苦,因此为了改变这个状况,此时就有人提出,如果做一个虚拟的容器,让不同应用程序都能运行其中,将它们需要的依赖环境整体打包,以便在不同的环境上移植后还能提供一致的运行环境,彻底将程序员们解放出来。
不过就有人会想,听这个描述,好像虚拟机就能解决这个问题。将应用还有所依赖的环境部署到虚拟机中,然后做个快照,直接部署虚拟机不就可以了吗?
可是你要知道虚拟机这个家伙笨重如牛,体积很大动不动就是以G为单位的大小,因为它里面要运行一个完整的操作系统,所以跑起来特别的费劲,慢就不说了,还非常的占资源,一台机器上跑不了几台虚拟机就能把性能拖垮了,而docker却是一个非常轻量级的虚拟容器,只提供一个运行环境,不用运行一个操作系统,所有的容器中的系统内核还是和外面的宿主机共用的,这样就可以批量复制很多容器,轻便还快捷。
因此docker的出现打破了过去的观念,透过镜像将运作程式所需要的系统环境,由下到上的打包,达到应用程序跨平台间的无缝接轨运作。这也是我们为什么要使用docker的原因之一,不光这样,docker还可以快速创建容器,快速柣代应用程序,并让整个过程全程可见,docker容器很轻很快,容器的启动时间是秒级的,大量的节约了开发,测试,部署的时间。
因此将虚拟机和docker体系结构比较,这种体系的明显优势是,不需要为虚拟机操作系统提供硬件模拟。所有应用程序都作为Docker容器工作,性能更好。
并且docker容器几乎可以在任意的平台上运行,包括物理机,虚拟机,个人电脑,服务器等。这种兼容性可以让用户把一个程序从一个平台直接迁移到另外一个。使用docker,只需要小小的修改,就可以替代以往大量的更新工作。所有的修改都以增量的方式被分发和更新,从而实现自动化并且高效的管理。
四、Docker的三要素
要想熟练使用docker,就需要明白docker的三要素,在docker中包含三个要素架构:
(1)镜像images:docker镜像就是一个只读的模板,镜像可以用来创建docker容器。Docker提供了一个很简单的机制来创建镜像,就是通过dockerfile创建新的镜像的。用户甚至可以直接从其他人那里下载一个已经做好的镜像直接使用。
(2)容器containers:docker利用容器来运行应用,容器是从镜像创建的运行实例。它可以被启动,开始,停止,删除。每个容器都是相互隔离的,保证安全的平台。你可以把容器看作一个简易版本的linux环境和运行在其中的应用程序。
(3)仓库registry:也就是docker仓库,仓库是集中存放镜像文件的场所,有时候会把仓库和仓库和仓库注册服务器混为一谈,并不严格区分。实际上,仓库注册服务器往往上存放着多个仓库,每个仓库中又包含了多个镜像,每个镜像都有不同的标签。仓库分为公开仓库和私有仓库两种形式,当然,用户可以在本地网络内创建一个私有仓库,当用户创建了自己的镜像之后就可以使用push命令将它上传到共有或者私有仓库,这样下次在另外一个机器上使用这个镜像的时候,只需要从仓库上pull下来就可以了。这里还有点跟git命令有异曲同工之处。
五、Docker的工作原理
要想知道docker如何工作,首先得知道Docker的架构由哪些组件组成。
其中,Docker Daemon是Docker架构的主体部分,它提供了Server的功能,
Docker架构中的其他主要模块包括:
首先是Docker Client,它作为用户与Docker交互的命令行工具或API。Docker daemon一般在宿主机的后台运行,它可以用来作为服务端接收来自客户端的指令,并处理客户端提供的一系列可执行命令
Docker Registry它用于存储和分发Docker镜像的中央仓库。公有的Docker Registry包括Docker Hub,用户可以通过互联网访问获取容器镜像。同时,Docker也支持构建本地私有的Docker Registry,以在内网环境中获取容器镜像。
另外用于存储Docker镜像和容器的文件系统总叫做Graph。它包含了镜像的各个层以及容器的文件系统变化。
此外,Docker架构还包括Driver、libcontainer和Docker container等组件,它们在Docker的运行过程中也发挥着重要的作用,这里就不做详细介绍。
总结起来,Docker的架构就是由这些多个组件组成。它的工作流程大概Docker使用客户端-服务器(C/S)架构模式,通过远程API来管理和创建Docker容器,Docker容器通过Docker镜像创建,镜像和容器的关系类似于面向对象编程中的对象和类。Docker后台守护进程Docker daemon一般在宿主机的后台运行,它可以用来作为服务端接收来自客户端的指令,并处理客户端提供的一系列可执行命令。
六、Docker的安装
(1)首先需要先确保系统是否已经更新到了最新版本,并安装了一些必要的工具。在终端执行如下命令。
sudo apt update
sudo apt upgrade
sudo apt-get install apt-transport-https ca-certificates curl gnupg lsb-release
(2)安装完毕后,就可以添加docker官网的GPG密匙,执行如下命令:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
(3)添加密匙后,再添加docker官方存储库,执行如下命令
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
(4)最后就可以安装docker engine,执行以下命令:
sudo apt-get updatesudo apt-get install docker-ce docker-ce-cli containerd.io
这个时候docker应该就被我们成功安装好了。这是我们可以执行以下命令查看一下docker是否安装成功:
docker --version
七、配置阿里云镜像加速器
下载完docker后,还有一个重要的步骤需要注意,因为我们默认pull的docker镜像是从Docker Hub来下载的,由于其服务器在国外,速度会比较慢,因此我们可以配置成国内的镜像仓库,这样可以加速镜像的上传和下载,比如说阿里云,网易云等。这时就需要我们配置docker镜像加速器。这里我以阿里云为例,演示如何配置这个镜像加速器。
使用阿里云提供的镜像加速器首先需要注册一个阿里云的账号,这里我就不多做讲解了,我已经有一个账号了,在浏览器搜索阿里云服务官网,进入其官网平台下,搜索容器镜像服务,选择立刻开通。
进入到这个镜像工具后,点开左侧列表的镜像加速器,可以看到会提供很多命令,直接将这些命令在终端执行就可以了。
这个时候在/etc/docker目录下就会出现一个名叫daemon.json的文件,并将这个镜像加速器的地址配置为https://pziibza3.mirror.aliyuncs.com
sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{"registry-mirrors": ["https://pziibza3.mirror.aliyuncs.com"]}EOF
然后重新加载配置文件,可以使用以下命令:
sudo systemctl daemon-reload
最后重启docker服务,可以使用以下命令:
sudo systemctl restart docker
这样就成功配置了docker的镜像加速器。如果想添加国内镜像源,我们可以打开这个文件,添加docker国内镜像源,执行以下这个命令:
sudo vim /etc/docker/daemon.json
然后添加以下这些内容:
{"registry-mirrors" : ["http://registry.docker-cn.com","http://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com"],"insecure-registries" : ["registry.docker-cn.com","docker.mirrors.ustc.edu.cn"],"debug" : true,"experimental" : true}
添加成功后,就可以成功在国内镜像仓库里加速上传下载仓库了。一切准备工作准备就绪,就可以开始执行你想执行的任何docker命令,或者制作你想要的镜像了。