一命通关——Docker与微服务(上)

本文涉及的产品
云原生网关 MSE Higress,422元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
注册配置 MSE Nacos/ZooKeeper,118元/月
简介: docker从根本上解决换主机重新配置环境问题,因为docker把原始的配置环境也复制一份过来。此时的docker像一个容器装载着源代码+配置+环境+版本+各种第三方组件并将这些打包成一个镜像iso文件,让镜像文件在docker引擎上运行。更专业的来讲,docker给出了一个标准化的解决方案——系统平滑移植,容器虚拟化技术。

🐳1.Docker简介

docker是基于Go语言实现的云开源项目

🐋1.背景

在传统的开发过程中,我们的项目依赖于本地电脑的配置和某些配置文件,此时如果我们将项目移到服务器或者其他本地电脑上进行运行,为了能够在这些环境上运行和通过质量检测,会产生大量的配置环境的开销,并且在部署时由于版本、配置问题项目经常会挂掉。总而言之,环境配置相当麻烦,换一台主机就要重新来配置一次,费时费力。

docker从根本上解决换主机重新配置环境问题,因为docker把原始的配置环境也复制一份过来。此时的docker像一个容器装载着源代码+配置+环境+版本+各种第三方组件并将这些打包成一个镜像iso文件,让镜像文件在docker引擎上运行。更专业的来讲,docker给出了一个标准化的解决方案——系统平滑移植,容器虚拟化技术

🐋2.理念

docker是通过对组件的封装分发部署运行等生命周期的管理,使用户应用及其运行环境能够做到一次镜像,处处运行

一句话概括

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

面试题: 容器与虚拟机比较

传统虚拟机,运行一个软件,创建一个新的虚拟机实例。占用资源多、步骤冗余、启动慢

image-20220410103147459

Linux容器是与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件容器提供的镜像包含了应用的所有依赖项,因而在从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。

Linux容器:不需要模拟一个完整的操作系统,而是对进程进行隔离。容器与虚拟机不同,不需要捆绑一整套操作系统,只需要软件所需的库资源和设置。系统因此变的高效轻量并保证部署在任何环境中的软件都能始终如一地运行

image-20220410102532295

🐋3.优势

一次构建、随处运行

  • 更快速的应用交付和部署

传统的应用开发完成后,需要提供大量的安装程序和配置文件及说明文档,安装部署后需根据配置文档进行繁杂的配置才能正常运行,使用Docker只需要交付少量容器镜像文件,在正常生产环境加载镜像并运行即可,应用安装配置在镜像里已经内置好,大大节省部署配置和测试验证时间

  • 更便捷的升级和扩缩容

当现有容器不足以支撑业务时,可通过镜像运行新的容器进行快速扩容。

  • 更简单的系统运维

应用容器化运行后,生产环境运行的应用可与开发、测试环境的应用高度一致,容器会将应用程序相关的环境和状态完全封装起来,不会因为底层基础架构和操作系统的不一致性给应用带来影响,产生新的BUG

  • 更高效的计算资源利用

Docker是内核级虚拟化,不需要额外的Hypervisor(虚拟机监视器,是用来建立与执行虚拟机器的软件、固件或硬件)支持,在一台主机上可以运行多个容器实例,大大提升物理服务器的CPU和内存的利用率

🐳2.Docker安装与卸载

🐋1.docker三要素:

镜像:

是一个只读的模板,镜像可以用来创建Docker容器,一个镜像可以创建多个容器 docker镜像文件类似于Java的类模板,而docker容器实例类似于Java中new出来的实例

容器:

容器时用镜像创建的运行实例,类似于一个虚拟化的运行环境,可以看作是一个简易版的Linux环境(包括root用户权限、进程空间、用户空间和网络空间等)和运行在其中的应用程序

仓库:

集中存放镜像文件的地方,Docker公司提供的官方仓库 Docker Hub 存放了大量的镜像供用户下载。国内的公开阿里云等。

通俗来讲,比如说王者荣耀的红蓝BUFF野怪,新刷新出来的就相当于从天美游戏库模板中 创建出来一个野怪,这个野怪(容器)在自己的坑位上可以移动、攻击、有血条是一个独立运行的最小单元。而腾讯云中存放了各种野怪的模板(镜像文件)

docker平台架构图解(入门版)
image-20220422152902040

🐋2.安装Dockers引擎

docker官网

注意:docker必须部署在Linux内核的系统上

1.打开docker官网

image-20220422202719660

2.进入手册

image-20220422202829414

3.以CentOS7及以上版本为例

image-20220422203152210

4.卸载旧版本(第一次安装跳过此步骤)

image-20220422203316040

5.yum安装gcc相关

yum -y install gcc

image-20220422203605128

yum -y install gcc-c++

image-20220422203736950

6.官网给出三种安装方法 我们选择第一种也是最常用的一种

image-20220422203920448

安装yum工具包

image-20220422204120660

yum install -y yum-utils

image-20220422204222249

7.设置stable镜像仓库

官网给的是:

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

但是这个镜像仓库服务器在国外,我们使用可能会经常连接超时。

我们使用阿里云的镜像仓库

yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

image-20220422205018102

tips:建议更新下yum软件包索引

yum makecache fast

image-20220422205214333

8.安装docker引擎

image-20220422205304889

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

image-20220422205501526<img src=" title="image-20220422205516544">

安装成功!!!

🐋3.测试

1.启动 docker

systemctl start docker

<img src=" title="image-20220422205840891">
查看docker进程

2.熟悉的hello world

docker run hello-world
<img src=" title="image-20220422210253284">

docker测试通过!!!🥰🥰🥰

docker执行hello world流程图解:
image-20220422214256081

🐋4.卸载

安装一遍不过瘾,想要卸载重新再装一次

卸载命令

systemctl stop docker

yum remove docker-ce docker-ce-cli containerd.io

rm -rf /var/lib/docker

rm -rf /var/lib/containerd

(你在期待什么?我可不演示哦🤪🤪🤪)

🐳3.Docker常用命令

🐋1.帮助启动类命令

🐟1.启动:

systemctl start docker

image-20220422221424225

🐟2.停止:

systemctl stop docker
image-20220422221317260

🐟3.重启:

systemctl restart docker

🐟4.查看docker状态:

systemctl status docker

🐟5.开机启动:

systemctl enable docker
image-20220422221454188

🐟6.查看docker概要信息:

docker info
image-20220422221536951

🐟7.查看docker总体帮助文档:

docker --help
image-20220422221600925

🐟8.查看docker命令帮助文档:

docker +具体命令 --help

🐋2.镜像命令

🐟1.列出本机上的镜像: docker images
image-20220423094649427

参数说明: -a:列出本地所有的镜像(含历史映像层)

-q : 只显示镜像ID
image-20220423094846067

🐟2.查询某个镜像: docker search +镜像名

参数:--limit 只列出N个镜像,默认25个

docker search --limit 5 hello-world
image-20220423095545435
参数说明
image-20220423095157241

🐟3.下载镜像 docker pull + 镜像名[:TAG]

TAG版本号 省略就是默认下载最新版本
image-20220423100159425

🐟4.查看镜像/容器/数据卷所占的空间 docker system df
image-20220423100611687

🐟5. 删除某个镜像 docker rmi +镜像名/镜像ID

强制删除 docker rmi -f 镜像ID

删除多个 docker rmi -f 镜像名1:TAG 镜像名2:TAG

删除全部 docker rmi -f $(docker images -qa)

面试题: 谈谈 docker 虚悬镜像是什么?

仓库名、标签都是\<none>的镜像,称为虚悬镜像
image-20220423215557374

🐋3.容器命令

直接进行拉取Ubuntu最新版
image-20220423102055111

🐟1. 新建+启动容器 docker run [OPTIONS] IMAGE [COMMAND][ARG...]

参数说明:--name ="容器新名字" 为容器指定一个名称

-d :后台运行容器并返回容器ID,启动守护式容器(后台运行):

在大部分场景下,docker的服务是在后台运行的 docker run -d 容器名

image-20220423201606491
Dokcer容器后台运行,就必须有一个前台进程

因此像Ubuntu这样需要交互的需要用下面的启动方式

-i : 以交互模式运行容器,通常与-t 同时使用

-t :为容器重新分配一个伪输入终端,通常与 -i 同时使用

启动交互式容器(前台有伪终端,等待交互)
image-20220423110152526
而像redis这样只需要后台默默运行的,如果使用前台交互的形式就会很容器因为一些操作造成容器退出
image-20220423202130551
因此,在使用docker启动容器前,应该首先考虑容器是适合后台运行还是交互式运行

-P:随机端口映射,大写P

-p:指定端口映射,小写p

🐟2.列出当前运行的所有容器 docker ps

新建一个会话 查看刚才运行的Ubuntu
image-20220423110346840

创建一个名称为myu1的Ubuntu容器实例
image-20220423110838871
再新建一个会话 查看所有运行的容器
image-20220423110916034
参数:docker ps [OPTIONS]

-a :列出当前所有正在运行和历史上运行过的容器

-l :显示最近创建的容器

-n:显示最近n个创建的容器

-q:静默模式,只显示容器编号

🐟3.退出容器

  • exit run进去容器,exit退出,容器停止
  • ctrl+p+q run进去容器,ctrl+p+q退出,容器不停止

image-20220423112125913

🐟4.启动已停止运行的容器 docker start 容器ID或者容器名

重启容器 docker restart 容器ID或者容器名

停止容器 docker stop 容器ID或者容器名

强制停止容器 docker kill 容器ID或者容器名

🐟5.删除已停止的容器 docker rm 容器ID
image-20220423112826154

image-20220423113030049

docker rm -f 容器ID 强制删除容器

docker rm -f $(docker ps -a -q) 删除多个容器实例

docker ps -a -q | xargs docker rm 删除多个容器实例

🐟6.查看容器日志 docker logs +容器IDimage-20220423203405621

🐟7.查看容器内运行的进程 docker top + 容器ID

image-20220423203624477

🐟8.查看容器内部细节 docker inspect 容器ID

image-20220423203940869

🐟9.进入正在运行的容器并以命令行交互

启动ubuntu容器并使用Ctrl+p+q退出

image-20220423204936097

这个时候使用 docker exec -it 容器ID bashShell 继续进行命令行交互

image-20220423205153470

命令 docker attach 容器ID 同样也可以

attach 直接进入容器启动命令的终端,不会启动新的进程,用exit退出,会导致容器的停止

exec 在容器中打开新的终端,并且可以启动新的进程,用exit退出,不会导致容器的停止

image-20220423205720845

image-20220423205912316

推荐使用 docker exec 命令,这样退出容器终端不会导致容器退出

🐟10.从容器内拷贝文件到主机

docker cp 容器ID:容器内部路径 目的主机路径

在Ubuntu容器中创建一个a.txt文件

image-20220423213645055

拷贝到本机 /opt目录下
image-20220423214043330

🐟11. 导入/导出容器

导出容器的内容留作为一个tar归档文件 docker export 容器ID > 文件名.tar

image-20220423214935525

从tar包中的内容创建一个新的文件系统再导入为镜像 cat 文件名.tar | docker import -镜像用户/镜像名:镜像版本号

image-20220423215634313

相关实践学习
通过容器镜像仓库与容器服务快速部署spring-hello应用
本教程主要讲述如何将本地Java代码程序上传并在云端以容器化的构建、传输和运行。
Kubernetes极速入门
Kubernetes(K8S)是Google在2014年发布的一个开源项目,用于自动化容器化应用程序的部署、扩展和管理。Kubernetes通常结合docker容器工作,并且整合多个运行着docker容器的主机集群。 本课程从Kubernetes的简介、功能、架构,集群的概念、工具及部署等各个方面进行了详细的讲解及展示,通过对本课程的学习,可以对Kubernetes有一个较为全面的认识,并初步掌握Kubernetes相关的安装部署及使用技巧。本课程由黑马程序员提供。 &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
9天前
|
运维 Kubernetes Docker
利用Docker和Kubernetes构建微服务架构
利用Docker和Kubernetes构建微服务架构
|
7天前
|
监控 持续交付 Docker
Docker 容器化部署在微服务架构中的应用有哪些?
Docker 容器化部署在微服务架构中的应用有哪些?
|
7天前
|
监控 持续交付 Docker
Docker容器化部署在微服务架构中的应用
Docker容器化部署在微服务架构中的应用
|
7天前
|
安全 持续交付 Docker
微服务架构和 Docker 容器化部署的优点是什么?
微服务架构和 Docker 容器化部署的优点是什么?
|
9天前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
20 1
|
16天前
|
JavaScript 持续交付 Docker
解锁新技能:Docker容器化部署在微服务架构中的应用
【10月更文挑战第29天】在数字化转型中,微服务架构因灵活性和可扩展性成为企业首选。Docker容器化技术为微服务的部署和管理带来革命性变化。本文探讨Docker在微服务架构中的应用,包括隔离性、可移植性、扩展性、版本控制等方面,并提供代码示例。
52 1
|
24天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
本文介绍了Docker和Kubernetes在构建高效微服务架构中的应用,涵盖基本概念、在微服务架构中的作用及其实现方法。通过具体实例,如用户服务、商品服务和订单服务,展示了如何利用Docker和Kubernetes实现服务的打包、部署、扩展及管理,确保微服务架构的稳定性和可靠性。
75 7
|
23天前
|
Kubernetes 负载均衡 Docker
构建高效微服务架构:Docker与Kubernetes的完美搭档
【10月更文挑战第22天】随着云计算和容器技术的快速发展,微服务架构逐渐成为现代企业级应用的首选架构。微服务架构将一个大型应用程序拆分为多个小型、独立的服务,每个服务负责完成一个特定的功能。这种架构具有灵活性、可扩展性和易于维护的特点。在构建微服务架构时,Docker和Kubernetes是两个不可或缺的工具,它们可以完美搭档,为微服务架构提供高效的支持。本文将从三个方面探讨Docker和Kubernetes在构建高效微服务架构中的应用:一是Docker和Kubernetes的基本概念;二是它们在微服务架构中的作用;三是通过实例讲解如何使用Docker和Kubernetes构建微服务架构。
56 6
|
26天前
|
Kubernetes 持续交付 Docker
探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
【10月更文挑战第18天】探索DevOps实践:利用Docker与Kubernetes实现微服务架构的自动化部署
75 2
|
关系型数据库 MySQL Java
12-微服务技术栈(高级):容器引擎Docker
在前面的学习中,我们掌握了微服务的服务注册与发现(nacos)、配置中心(nacos)、远程服务调用(feign)、网关(gateway),同时借助Idea编译工具多次完成本地服务启动、部署和验证。在微服务架构中,不会再像传统那样单个单个部署服务器,而是会借助Docker进行批量的容器化部署。
954 0