【微服务】——Docker与微服务(上)

举报
雪月清 发表于 2022/05/25 20:56:51 2022/05/25
【摘要】 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

安装成功!!!

🐋3.测试

1.启动 docker

systemctl start docker


查看docker进程

2.熟悉的hello world

docker run hello-world

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

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。