当前位置: 首页 > 科技观察

不知不觉已是容器化时代,这篇文章带你快速入门Docker容器技术_1

时间:2023-03-14 16:48:38 科技观察

不知不觉中,容器化时代来临了。本文将带大家快速入门Docker容器技术,留言告诉我不用这么麻烦,用Docker部署就可以了,分分钟搞定。Docker真的有那么神奇吗?我们通常至少要花费一个小时来部署一套系统应用。如果我们在部署过程中遇到什么问题,可能需要一天的时间来解决。使用Dorcker技术确实可以大大缩短时间。是时候部署了吗?今天就来学习一下这项技术吧!什么是码头工人?当我们需要部署一个应用服务的时候,我就以部署Zabbix监控系统为例。我们传统的部署方式是在物理服务器上先安装Linux系统等操作系统,然后部署Zabbix监控系统需要的依赖环境如LAMP(Linux+Apache+Mysql+PHP)和一些Zabbix应用服务(Zabbix服务器、Zabbix数据库、ZabbixWeb等)。传统的应用服务部署方式如下图所示。这样的部署方式会存在一些问题。最明显的资源将被浪费。现在的物理服务器往往有十几核的CPU,几百G的内存,几TB的硬盘。如果只部署一个应用服务,根本不需要这么高的配置。经常会出现CPU和内存使用率都低于10%的情况。所以后来我们了解到,有了虚拟化技术,VMware等虚拟化软件通过Hypervisor虚拟化技术,将一台物理服务器划分为多个虚拟机,根据应用服务需求合理分配CPU和内存资源。然后安装不同的操作系统来部署不同的应用服务,这种部署方式下的资源得到了比较有效的利用。事实上,虚拟机仍然没有充分利用资源。即使你一开始只给一个虚拟机分配了1核CPU和2G内存,实际上物理资源是被占用的,但是你运行的应用服务有时只是占用少量资源。所以我们的目标是能不能直接把物理资源分配给应用服务,应用服务需要多少就分配多少。比如我们在部署Zabbix监控系统的时候,会包含很多的依赖和服务。所有这些依赖服务(LAMP环境+ZabbixServer、ZabbixDatabase、ZabbixWeb等)的集合,可以理解为一个APP,在Docker中称为Container——容器。每个容器相当于运行一个应用服务,相互隔离,互不影响。另外,我们传统的应用部署方式也不利于迁移和扩展。比如我的应用服务是在Linux平台上的,现在想把它迁移到Windows平台上。你得搭建一个基于Windows平台的环境。而如果是DockerContainer,则可以在不同的操作系统平台上流畅运行,只需要在新的环境中启动需要的容器即可。这大大节省了我们花在部署上的时间,降低了部署过程中出现问题的风险。这是Docker最基本的功能。更多信息请参考Docker官方网站www.docker.com。Docker的三大核心概念要学习Docker容器技术,就必须了解它最重要的三个概念Image(镜像)、Container(容器)和Repository(仓库)。大多数操作都是围绕这三个核心概念进行的。镜像:镜像是创建容器的基础,可以理解为只读模板。比如我们的Zabbix监控系统需要部署在多台服务器上,那么你可以将Zabbix监控系统应用及其依赖打包成一个Image文件,创建一个Zabbix监控系统镜像作为模板,你要部署的服务器是相当于只是复制图像文件。容器:容器是从图像创建的运行实例。可以启动、停止、删除等,每个创建的容器都是相互隔离的。容器运行我们需要的应用服务。比如用Docker部署Zabbix监控系统,相当于复制一个标准的Zabbix监控系统镜像到本地服务器,然后根据镜像文件生成一个容器实例运行,就可以进行相关的Configuration修改。Repository:仓库用于集中保存镜像。创建好自己的镜像后,可以使用push命令上传到仓库,这样下次想在其他服务器上使用这个镜像时,只需要使用pull命令从仓库下载即可。存储库分为公共和私有。最常用的Repository是官方的DockerHub,也是默认的Repository,有大量的官方镜像可以使用。URL是:hub.docker.com/。Docker安装Docker分为两个版本:社区版(CommunityEdition,简称CE)和企业版(EnterpriseEdition,简称EE)。社区版包含大部分核心功能,满足大部分需求。企业版包含一些付费服务,一般个人用户用不到。所以我以CentOS7系统安装DockerCE为例。可以参考官网文档安装https://docs.docker.com/install/linux/docker-ce/centos/1。docker的安装依赖于系统的一些必备工具。#yuminstall-yyum-utilsdevice-mapper-persistent-datalvm22。添加dockerce版yum源,这里是官方的,当然你也可以换成国内的yum源,比如阿里云等#yum-config-manager--add-repohttps://download.docker.com/linux/centos/docker-ce.repo3.安装dockerce。#yuminstall-ydocker-ce4。安装完成后启动docker。#systemctlstartdocker这样Docker就安装好了。Docker基本上用到了我们前面提到的Docker的三个核心概念,其中镜像是最重要的,它是运行容器的前提。那么我们可以使用pull命令先从默认镜像仓库DockerHub网站拉取你需要的镜像,比如tomcat应用服务镜像。#dockerpulltomcatUsingdefaulttag:latestlatest:Pullingfromlibrary/tomcat844c33c7e6ea:Downloading19.32MB/45.38MB…81f4cc5808bc:PullcompleteDigest:sha256:996d406c509a4ebe2f4e96eeda331a354f1663b7ec0ff06685b75c4decef7325Status:Downloadednewerimagefortomcat:latestdocker.io/library/tomcat:latest下载镜像到本地后使用images命令查看镜像#dockerimagesREPOSITORYTAGIMAGEIDCREATEDSIZEtomcatlatest6408fdc942128daysago507MB如果想要删除镜像。#dockerrmitomcat容器是图像的运行实例。当我们在本地获取到tomcat镜像后,我们就可以基于tomcat镜像创建一个容器了。使用run命令创建一个名为mytomcat的容器。如果需要在后台运行,使用-d参数,让docker容器作为守护进程在后台运行。#dockerrun–d--namemytomcattomcat查看当前mytomcat容器正在运行。#dockerpsCONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES0acdd7e8a944tomcat"catalina.shrun"35secondsagoUp34seconds8080/tcpmytomcat但是tomcat运行在docker容器下。如果需要外部访问,则需要进行端口映射。比如mytomcat容器的8080端口映射到本机的8000端口。#dockerrun-d--namemytomcat-p8000:8080tomcat如果你想停止运行mytomcat容器。#dockerstopmytomcat如果你想删除mytomcat容器。#dockerrmmytomcat容器一般在后台运行,我们看不到容器的信息。如果我们需要进入容器,使用exec命令进行交互操作。使用-it参数打开标准输入并分配一个伪终端。#dockerrun-d--namemytomcat-p8000:8080tomcat01382c5529da079070da8933a0056e0d469f89eda79a80a26b9872cb1699d291#dockerexec-itmytomcat/bin/bashroot@01382c5529da:/usr/local/tomcat我们可以看到/usr/local/tomcat进入了当前路径和新路径雄猫。其实我们可以理解为每个容器的底层都是一个Linux系统,但是这个系统占用的资源是非常小的。Docker架构通过上面对Docker的介绍,相信大家可以很容易的看懂这张Docker架构图。Docker采用客户端-服务器(C/S)架构模型。用户在DockerClient端使用docker相关命令,比如dockerbuild创建镜像,dockerrun从镜像运行容器,dockerpull从镜像仓库下载镜像到本地仓库等,向系统服务发送请求DockerDaemon后台进程,也就是server端收到请求后,执行不同的任务,比如从镜像仓库下载镜像,生成运行容器等。综上所述,本文简单介绍一些基本概念以及Docker容器技术的基本操作,希望能让大家对Docker有一定的了解。如果你对Docker容器技术感兴趣,可以搭建一个类似的环境来安装和使用Docker,并做更深入的学习!