构筑云原生的基石:Docker容器化技术入门

        

目录

一、虚拟化技术与容器技术的区别      

二、Docker 简介

三、常用命令

        3.1 端口映射

        3.2 指定环境变量 

        3.3 路径映射


        云原生(Cloud Native)是一种构建和运行应用程序的方法论,旨在充分利用云平台的优势,如弹性伸缩、持续交付、容错性、微服务架构等。Docker 作为云原生技术栈的关键组件,其引入和普及极大地推动了云原生应用的发展。  

        下面首先来看下虚拟化技术与容器技术的区别。

一、虚拟化技术与容器技术的区别      

        虚拟化技术和容器技术都是提高资源利用率、实现应用隔离和可移植性的现代计算技术,但他们的实现机制、资源消耗、隔离程度以及适用场景等方面存在着显著的区别。两者的结构如下图所示:

        各部分的含义如下:

  1. server:代表服务器,主要包含了硬件资源,如 CPU、磁盘、网络设备、内存等。
  2. Host OS:代表操作系统,如 Linux、Windows 等操作系统。
  3. Hypervisor:在主机操作系统之上安装了一个虚拟软件,如VMware
  4. Guest OS:在虚拟机软件上安装的虚拟机操作系统,如上图安装了两个虚拟机操作系统,每个虚拟机操作系统都可以安装自己的应用。

        简单来说虚拟化技术是在硬件层面进行抽象,模拟出完整的计算机系统,包括CPU、内存、磁盘和网络设备等,每个虚拟机都有自己的操作系统。那什么事容器化技术的,如上图右侧所示。

        容器相对虚拟化技术来说要简单一些,直接安装一个容器管理工具,如 Docker,有了 Docker 之后就能直接创建容器了。容器技术实在操作系统的层面进行抽象,共享宿主机的操作系统内核,但为应用提供隔离的文件系统、网络、进程空间等。容器是基于镜像创建的轻量级、可执行的独立软件包。

        虚拟化与容器有相似之处也有很多区别,具体的区别如下:

  1. 资源消耗:虚拟机会非常消耗硬件资源,应为需要在虚拟机软件之上安装多个虚拟机,每个虚拟机都会消耗一部分硬件资源,这导致较大的资源开销(尤其是内存)和较长的启动时间。容器在这方面会好很多,由于共享宿主机内核,容器启动迅速且资源消耗少,尤其适合需要快速扩展和频繁部署的场景。
  2. 隔离性:虚拟化提供了更高级别的隔离,因为每个 VM 都是独立的操作系统环境,相互之间完全隔离。容器虽然提供了足够的隔离以保证应用的独立运行,但由于共享宿主机内核,其隔离性相对较弱。
  3. 应用场景:适用于需要强隔离、不同操作系统环境、长期运行的服务或对资源管理有特定要求的场景。而容器非常适合微服务架构、持续集成流程、快速迭代的开发环境以及需要快速扩展的应用。

        容器技术最大的优势是效率高,可以解决软件环境的配置问题问题,比如在测试环境部署应用程序,需要安装数据库、缓存等,然后上线时需要再生产环境进行相应的安装操作。安装需要的环境耗时费力,而且容易出错。有了容器技术后,把整套配置放在容器中,然后直接执行相应的命令,就能把相应的容器运行起来。

二、Docker 简介

        Docker 是一种开源的容器化平台,它让开发者能够将应用及其依赖、配置文件、运行时环境打包成一个轻量级、可移植的容器。这种容器化技术允许应用在几乎任何系统上以一致的方式运行,从而解决了“在我机器上能运行”的问题,大大提高了开发效率和部署的灵活性。

        Docker 的组成如下图

  • Docker 客户端(Client):Docker 客户端是用户与 Docker 守护进程交互的界面。用户可以通过命令行工具、API 或者图形界面来发送指令给 Docker 守护进程,从而管理镜像、容器、网络以及其他 Docker 对象。客户端可以运行在 Docker 主机上,也可以远程连接到 Docker 守护进程。
  • Docker 守护进程(Docker daemon):Docker 守护进程是 Docker 的核心服务,它接收并处理来自 Docker 客户端的请求,管理 Docker 对象(如容器、镜像、卷)。守护进程负责构建、运行、管理和分布 Docker 容器。
  • Docker 镜像(Images):Docker 镜像是创建容器的基础,它是一个只读的、包含应用程序及其运行环境的模版。镜像由一些列层级构成,每个层级包含一组文件和元数据,上一层级可以对下一层级的内容进行修改或添加。镜像可以从 Dockerfile 构建,也可以从 Docker hub 或私有仓库拉取。
  • Docker 容器(Container):容器是镜像运行的实例,它是镜像启动时创建的。容器提供了应用运行的沙盒环境,具有自己的文件系统、网络环境、进程空间等,与宿主机及其他容器隔离。容器可以从镜像创建,也可以被启动、停止、删除,并且可以再运行时改变其状态。
  • Docker 仓库(Registry):是集中存放 Docker 镜像的地方,用户可以从中拉取镜像到本地,也可以推送本地镜像到仓库供他人使用。Docker Hub 是最著名的公共仓库,此外还有私有仓库,如 Nexus等,供企业内部使用。

        这些组件系统工作,形成了 Docker 轻量级、可移植的容器化解决方案,支持现代应用的快速开发、部署和扩展。

三、常用命令

        Docker 安装后可以执行一些命令,下面列举一些常用的命令

命令描述
docker --version查看Docker版本
docker images查看所有镜像
docker search <image name>镜像搜索,如查询 MySQL、NGINX 等
docker pull 下载镜像,如 docker pull mysql
docker info查看 docker 基本信息
docker ps查看运行的容器,其中会包含容器I D
docker inspect <运行容器ID>查看运行容器详细信息,包括IP、端口等等
docker stop <运行容器ID>停止运行的容器
docker push上传容器

        下面重点介绍一下容器的启动命令 docker run,比如要启动 nginx,直接执行 docker run nginx 即可,此时未指定版本,运行的是最新的版本,如果想运行特定的版本,可以指定版本来运行。

        3.1 端口映射

        启动容器时通常会进行端口映射,如果不进行端口映射的话,那只能进入 Docker 内部才能访问到指定的容器,通过端口映射后,可以通过宿主机 直接访问 docker 内部的容器。具体的命令为:docker run -p <主机端口:容器端口> 容器,比如要启动 MySQL 容器,可以执行:docker run -p 3307:3306 mysql,这样就能通过宿主机访问到 Docker 内部的容器了

        3.2 指定环境变量 

        还是以 MySQL 为例,在上面端口映射的基础上,可以指定环境变量,如设置密码,这样在连接MySQL时就能直接使用密码登录了,具体的命令为:docker run -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql,通过这个设置后,就可以在宿主机上指定密码登录 MySQL 容器了。

        3.3 路径映射

        到这里 MySQL 是可以正常运行的,而且你可以插入数据,但是容器突然挂了,这时你在重启 MySQL 容器后发现数据丢了,这怎么能行呢。这种情况可以通过路径映射来解决,路径映射是 Docker 中的一种数据持久化方式,它将宿主机的一个目录直接挂载到容器内的一个目录。这意味着容器内的目录内容会直接反映宿主机上的目录内容。

        具体的命令使用 -v 来标记,docker run -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /opt/mysql:/var/lib/mysql,其中 /opt/mysql 是宿主机上指定的路径,而 /var/lib/mysql 是容器内的路径,让通过这种方式可以时间数据的持久化,将数据保存到宿主机中,除非宿主机也挂掉了,不过这好像不太可能,而且一般会进行数据冗余处理,数据的持久性是可以保证的。

往期经典

从0开始理解云原生架构-CSDN博客

Kubernetes: 从零开始理解K8s架构-CSDN博客

Kafka VS RabbitMQ,架构师教你如何选择_消息中间件选型分析-CSDN博客

TiDB高手进阶:揭秘自增ID热点现象与高级调优技巧_tidb 分布式自增id-CSDN博客

微服务拆分:打造高性能、高扩展的未来架构-CSDN博客

  • 20
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超越不平凡

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值