认识和使用容器

news2025/7/20 12:53:36

目录

前言

一、容器化背后的发展历史和概念

1.容器的抽象

容器的比喻

2.计算机领域的容器

容器是一种标准化的软件单元

二、容器和微服务架构

1.容器的作用

快速搭建开发环境

将运行环境和配置放在代码中并部署

使用docker-compose来模拟生产环境

使用docker镜像进行自我部署

2.容器解决的问题

3.微服务架构的作用

传统架构

 微服务架构

4.容器和微服务架构的关联

微服务的特性

微服务和容器的搭配

三、容器Dockerfile的使用

1.Dockerfile的概念

2.通过Dockerfile来制作jdk镜像的实操

创建目录

下载并上传到服务器中的目录

在目录下创建Dockerfile文件

执行命令构建镜像

查看镜像是否建立完成

3.Dockerfile的常用指令

FROM指令

RUN指令

COPY指令

CMD指令  

 ENTRYPOINT指令

四、Docker容器的使用

总结


 


前言

通过这次亚马逊云科技云原生课程的学习,我认识到了容器,知道了容器的重要性以及它的作用性多么大,以及学习到了微服务架构的特点,以及它和单体架构的区别在哪,以及为什么说容器是支持现代微服务架构使用的基础技术。


一、容器化背后的发展历史和概念

1.容器的抽象

首先,我们要学习入门一门新的东西,那肯定要认识它,知道它的前世今生,那么,容器是什么东西呢,在古代,我们经常使用船在海上进行运输,那么这个船就可以比喻为容器。  以及在现代,我们经常见到的集装箱,它们都是一个个容器。这些例子都是通过平常生活中常见的物品,来进行比喻容器。

容器的比喻

在我们以前,我们运输物品,我们都是先把货物装在一个个容器或者箱子上,然后我们在装车运输过去。

如图所示,在我们古代,我们的船就类似一个容器。

如图所示,在比如,在我们生活中,经常看到的集装箱,它们也是一个个的容器,里面可以转载很多不同的货物,就好像我们开发的应用程序一样,然后在通过大船把这些集装箱统一安装好,然后运输。

2.计算机领域的容器

那么在计算机领域,又该如何理解容器呢?它在计算平台中,容器是一种标准化的软件单元,它同时也是在操作系统级别实施的一种形式的虚拟化。容器它是独立的轻量级软件包,其中包括运行应用程序所需的一切。例如:代码、运行时、系统工具、系统库和设置。而且所有容器共享底层主机系统的操作系统内核。 这些容器可以是大型企业应用程序中的服务,也可以是在隔离环境中运行的独立应用程序。

容器是一种标准化的软件单元

在计算机平台上,容器它其实是一个单元,可以在运行容器化平台的任何计算环境中快速可靠地运行,容器是在操作系统级别实施的一种形式的虚拟化。

二、容器和微服务架构

1.容器的作用

快速搭建开发环境

通过这次课程的学习,我们知道了容器的作用性是非常大的,然而现在的开发环境的机器通常内存比较小,在使用虚拟的时候,创建许多台虚拟机,那我们经常需要为开发环境的机器加内存,这是以前的做法,但现在不一样,Docker的出现,改变了这种现状,我们只需要在 Docker上搭建一套完整的开发环境,就 可以轻易的让几十个服务在 Docker 中跑起来了。

将运行环境和配置放在代码中并部署

容器Docker,它除了能让我们更加快速地搭建开发环境之外,它也能让你将运行环境和配置放在你的项目代码中,然后在进行部署,比如说,在同一个 Docker 的配置中,它可以在不同的环境中使用的,那这样的话,我们就不需要重复地造轮子了,提高了我们的工作效率,而且这样也降低了硬件要求和应用环境之间耦合度,对我们开发者或者运维人员来说都是莫大的好消息。

使用docker-compose来模拟生产环境

容器Docker,它除了能够给我们快速搭建开发环境之外,同样,它也可以搭建测试环境,预发布环境,以及生产环境,我们只需要将每个服务打包为一个 docker 镜像,并使用 docker-compose 来模拟生产环境,就可以将我们的系统运行在生产环境中进行测试了。

使用docker镜像进行自我部署

使用docker镜像,它还有一个很重要的特性,那就是自动化,比如这里的自我部署,现状主流的主机提供商都支持并提供托管 docker,只需要一个具有 shell 访问权限的专用节点,你可以自我部署了。只需要设置好 docker,并在你想要的端口上运行你的镜像即可以了。

2.容器解决的问题

和一个单纯的应用程序相比,操作系统很笨重,大家都知道操作系统运行起来是需要占用很多资源的,如果是刚刚安装的系统还什么都没有部署,单纯的操作系统其磁盘占用至少几十G起步,内存要几个G起步。

在这台机器上开启三个虚拟机,每个虚拟机上都部署一个应用,那么这里都因虚拟机而占用了好几G了,所以我们没有办法划分出更过虚拟机从而部署更多的应用程序,可是我们部署的是应用程序,要用的也是应用程序而不是操作系统。

还有就是启动时间问题,操作系统重启是非常慢的,因为操作系统要从头到尾把该检测的都检测了该加载的都加载上,这个过程非常缓慢。所以就诞生了容器技术,专门来解决这些问题的。之前的虚拟机的形式是这样的,比如这里可以建3个客户操作系统,应用程序A,B,C都分别占用一个客户操作系统,这样就会非常耗内存的,而且操作系统的启动也慢,效率也不高。

 那么现在采用了容器技术的,它是这样的,1个容器里面就包含了应用程序所需要的运行环境

3.微服务架构的作用

传统架构

首先,我们以前开发软件,都是采用传统的单体的架构的,就是说很多的功能模块都是集中在一个项目里面的,而这时,有很多的功能是互相关联的,你比如,要修改某些功能,可能牵一发而动全身,可维护性和可扩展性太差了。

如图所示,订购应用的程序是放在了一个服务器里运行,而报告应用程序用放在另一个服务器里运行,而这样的话,每新增一个功能,都要放在另一个服务器运行,这样肯定是不行,会造成很大的资源浪费。

 微服务架构

所以,就出现了微服务架构,如图所示,而上面这些订购模块和报告模块等,都被改造成一个个微服务,通过通信互相联系调用,提高了可用性,以及它们都只需部署在一个服务器上运行即可,不会造成资源的浪费。

4.容器和微服务架构的关联

微服务的特性

它的特性如图所示:

它们之间的关联是非常好的,为什么这么说呢,这是跟微服务的特性密不可分的,微服务采用了分散式的革新设计,而也是智能终端节点、哑管道,它采用了独立产品形式,而不是项目形式,兼顾了开发与生产。

微服务和容器的搭配

怎么理解呢,与传统的瀑布开发项目模型相反,可以将微服务视为具有独立输入和输出的独立产品,无需考虑运行时环境的影响,容器会帮助你将所有依赖项和库打包到单个不可变对象中去。

而且使用容器可使得开发、测试和生产环境保持一致,在开发人员系统上正常运行的容器化应用程序,也将能够在生产系统上以相同的方式来正常运行。

所以,微服务和容器可以很好地搭配使用。

三、容器Dockerfile的使用

1.Dockerfile的概念

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。

  • Dockerfile是用于构建docker镜像的文件

  • Dockerfile里包含了构建镜像所需的“指令”

  • Dockerfile有其特定的语法规则

Dockerfile文本文件里面包含了下面的命令,它的作用,如图所示:

2.通过Dockerfile来制作jdk镜像的实操

首先,我们来学习一下如何通过Dockerfile来进行镜像的制作,但在制作之前,我们要先了解一下镜像是什么,只有了解了,我们才能够知道它是干什么用的,通俗点来说,镜像就是一个运行这个进程所需要的环境。接下来,我们先按以下的步骤来创建镜像:

创建目录

我们首先需要创建一个目录,则需要执行下面的指令和指定文件夹

mkdir –p /myy/local/dockerjdk8
cd /myy/local/dockerjdk8

下载并上传到服务器中的目录

然后,接下来,就是下载jdk的tar包,先下载jdk-8u202-linux-x64.tar.gz并上传到服务器中的/myy/local/dockerjdk8目录

在目录下创建Dockerfile文件

然后呢,我们就在目录下面,创建一个Dockerfile文件,文件的内容如下:

FROM centos:7
MAINTAINER ITCAST
WORKDIR /usr
RUN mkdir  /usr/local/java
ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

接下来是,说明一下这些指令的含义,FROM *** 定义了使用哪个基础镜像启动构建流程

MAINTAINER *** 声明了镜像的创建者

ENV *** 设置环境变量

RUN ***是Dockerfile的核心部分

ADD *** 是将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压

COPY *** 是和ADD相似,但是如果有压缩文件并不能解压

WORKDIR *** 是设置工作目录

执行命令构建镜像

然后,接下来我们执行命令,构建镜像,注意的是,后面还有一个“.”的哈

       docker build -t='jdk1.8' .

查看镜像是否建立完成

最后,我们通过执行下面订单命令,查看镜像的信息,来判断是否已经建立完成

        docker images

# 1、创建目录
mkdir –p /usr/local/dockerjdk8
cd /usr/local/dockerjdk8
      
# 2、下载jdk-8u202-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录 

# 3、在/usr/local/dockerjdk8目录下创建Dockerfile文件,文件内容如下:
vi Dockerfile

FROM centos:7
MAINTAINER ITCAST
WORKDIR /usr
RUN mkdir  /usr/local/java
ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

# 4、执行命令构建镜像;不要忘了后面的那个 .
docker build -t='jdk1.8' .

# 5、查看镜像是否建立完成
docker images

3.Dockerfile的常用指令

FROM指令

         定制的镜像都是基于FROM的。

RUN指令

         用于执行后面跟着的命令,

RUN <命令行命令>


RUN ["可执行文件", "参数", "参数"]
# 例如:
# RUN ["./test.java", "dev", "offline"] 等价于 RUN ./test.java dev offline

COPY指令

      它是指从上下文目录中复制文件或者目录到容器里指定路径。

COPY [--chown=<myy>:<s>] ["<源路径>",...  "<目标路径>"]

CMD指令  

      它是用于运行程序的,与RUN指令不同的是,二者的运行时间不同,

CMD <shell 命令> 
CMD ["<可执行文件或命令>","<param1>","<param2>",...] 

 ENTRYPOINT指令

       它类似于CMD指令,

ENTRYPOINT ["<executeable>","<param1>","<param2>",...]

可以搭配 CMD 命令使用:一般是变参才会使用 CMD ,这里的 CMD 等于是在给 ENTRYPOINT 传参。

四、Docker容器的使用

首先,上面我们已经认识到了容器,那么接下来,我们就去使用容器,该怎么开始使用呢?

Docker 允许你在容器内运行应用程序, 使用 docker run 命令来在容器内运行一个应用程序。

首先,看第一个例子:

runoob@runoob:~$ docker run ubuntu:15.10 /bin/echo "Hello"

这个代表什么意思呢,它的意思就是:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。

       LogisticsAddBoResponse response = new LogisticsAddBoResponse();
        response.setErrOrderNos(Lists.newArrayList());
        response.setSuccessOrderNos(Lists.newArrayList());
        BoCriteria criteria = new BoCriteria();
        criteria.setStatus(CodeItemKeys.T_ORDER_STATUS_DELIVER);
        criteria.setExpressStatusEmpty(true);
        criteria.setExprIdEmpty(false);//不允许运单号为空
        criteria.setTranBackToSales(0);     // 回传标识,0代表待回传,1代表已回传,2代表取消
        List<OrderBoBean> orderBeans = OrderService.findBeansByOrderNos(criteria);
        if(CollectionUtils.isEmpty(orderBeans)){
            response.setMessage("抖店_批量订单发货接口"+LocalDateTime.now().format(dateTimeFormatter)+",未查询到需配送订单");
            return response;
        }
        GlobalConfig.initAppKey(projectConfig.getTiktokECommerceAppId());  
        GlobalConfig.initAppSecret(projectConfig.getTiktokECommerceAppSecret());  
        AccessToken accessToken = AccessTokenBuilder.build(Long.valueOf(projectConfig.getTiktokECommerceDefaultStoreId()));  
        BizAssert.isTrue(accessToken.getAccessToken()!= null,"很抱歉,抖店发货生成并获取token失败;返回来的token为空null");
        Map<String,OrderBoBean> duplicateOrderNoCheckMap = new HashMap<>();
        String companyCode = projectConfig.getTikTokLogisticsDefaultCode();  
        TiktokLogisticsCompanyCriteria logisticsCompanyCriteria = new TiktokLogisticsCompanyCriteria();
        logisticsCompanyCriteria.setCode(companyCode);
        TiktokLogisticsCompanyBean logisticsCompanyBean = TiktokLogisticsCompanyService.findOneBean(logisticsCompanyCriteria);

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import  ssl
ssl._create_default_https_context = ssl._create_unverified_context


总结

通过这次亚马逊云科技云原生课程的学习,我认识到了容器,知道了容器的重要性以及它的作用性多么大,以及学习到了微服务架构的特点,以及它和单体架构的区别在哪,以及为什么说容器是支持现代微服务架构使用的基础技术。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/17254.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

在JVM 中进程与线程关系、介绍线程:程序计数器、本地方法栈、虚拟机栈

首先,我们要了解进程和线程的基本概念 进程 process 一个在内存中运行的应用程序。每个进程都有自己独立的一块内存空间,一个进程可以有多个线程,比如在Windows系统中,一个运行的*.exe应用程序就是一个进程。 线程 thread 进程中的一个执行任务(控制单元),负责当前进…

vue-element-admin依赖报错npm ERR! code 128 npm ERR! An unknown git error occurred

解决vue-element-admin安装报错 npm ERR code 128 npm ERR An unknown git error occurred npm 报错截图&#xff1a; 参考地址 先试一下&#xff1a;控制台输入&#xff1a; git config --global http.sslverify “false” git config --global url.“https://”.insteadOf …

几行代码实现用Python输出表情包

近几日在搞邮件自动发送&#xff0c;发现python原来可以发小表情&#xff01;而且操作很容易&#xff0c;但是发现现在的博文介绍的不是很全面&#xff08;或者我没搜出来……&#xff09;&#xff0c;因此在此补充一二。 1. python输出的表情样子 图里的表情包当然才是冰山一角…

【案例 5-3】 模拟用户登录

【案例介绍】 1.任务描述 在使用一些 APP 时&#xff0c;通常都需要填写用户名和密码。用户名和密码输入都正确才会登录成功&#xff0c;否则会提示用户名或密码错误。 本例要求编写一个程序&#xff0c;模拟用户登录。程序要求如下&#xff1a; &#xff08;1&#xff09; 用…

隐式转换这个概念你听说过没?

世界上最遥远的距离不是生与死&#xff0c;而是你亲手制造的BUG就在你眼前&#xff0c;你却怎么都找不到她。 目录 1、隐式转换是什么意思 1.1整型截断 1.2整形提升 2、char的取值范围 2.1有符号char取值范围 2.2无符号char取值范围 前言&#xff1a; 大家好&#xff0c;…

Java面向对象中阶(七)

面向对象中阶 1、包 2、访问修饰符 3、封装 4、继承 5、方法重写(override) 6、多态 7、Object类的常用方法 8、断点调试 1、包 包的本质&#xff1a; 实际上就是创建不同的文件夹来保存类文件 包的三大作用&#xff1a; 区分相同名字的类当类很多时&#xff0c;可以…

关于bios+mbr还原uefi+gpt的系统后,出现进不去系统的问题

问题&#xff1a; 重装系统后&#xff08;或还原Ghost系统后&#xff09;&#xff0c;出现如下的界面&#xff0c;应该是找不到引导所致&#xff0c;一直停留在这个界面&#xff0c;进不去系统 然后只能从pe界面选择从硬盘启动操作系统 这种通过pe系统&#xff0c;启动本地硬…

食品制造业SCM系统供应商管理模块提升企业采购管理效率,数字化升级供应链

民以食为天&#xff0c;随着人民生活水平的提高&#xff0c;人们对食品的购买趋向多品种、少数量、无污染的消费意愿&#xff0c;就要求食品企业抓住客户需求&#xff0c;及时提供安全健康的产品&#xff0c;因此畅通高效、精准智能的供应链就显得尤为重要。 食品行业供应链要…

深度学习与总结JVM专辑(一):基础介绍内存结构(图文+代码)

基础介绍&&内存结构前言基础介绍铺垫为什么要学习JVM什么是JVM为什么Java要在虚拟机里运行托管环境字节码文件Class文件的结构属性Java虚拟机具体是怎么运行Java字节码Java虚拟机的运行效率究竟如何JDK&JRE&JVM有什么区别内存管理程序计数器为什么要使用PC寄存…

01. Web 1~10

Web 1~10web1知识点题解web2知识点题解web3知识点题解web4知识点题解web5知识点题解web6知识点题解web7知识点题解web8知识点题解web9知识点题解web10知识点题解web1 知识点 查看网页源码&#xff1a;ctrl u 或 F12 开发注释未及时删除 题解 查看网页源码即可。 web2 知识…

[附源码]Python计算机毕业设计毕业设计管理系统

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…

深入浅出PyTorch——主要模块和基础实战

一、深度学习模型训练流程“八股文” 1.1 机器学习的开发应用步骤&#xff1a; 数据搜集——>数据预处理——>特征工程——>划分训练集和测试集——>选择模型——>建立模型&#xff08;模型超参数设置&#xff09;——>设置损失函数——>进行训练以及预测…

WebRTC源码研究(4)web服务器工作原理和常用协议基础(转载)

前言 前面3篇博客分别对WebRTC框架的介绍&#xff0c;WebRTC源码目录&#xff0c;WebRTC的运行机制进行了介绍&#xff0c;接下来讲解一点关于服务器原理的知识。后面博客会写关于WebRTC服务器相关的开发&#xff0c;目前git上面有好多WebRTC相关的流媒体服务器的源码&#xff…

[附源码]java毕业设计农家乐点餐系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[oeasy]python0017_解码_decode_字节序列_bytes_字符串_str

解码 decode 回忆上次内容 code就是码 最早也指电报码后来有各种编码、密码、砝码、条码都指的是把各种事物编个号 encode就是编码 编码就是给事物编个号编码基本了解了 给事物编号就是编码怎么通过编号找到原来的事物呢&#xff1f; 解码 解码是编码的逆运算 解铃换需系铃人…

容器基础--基本概念入门

&#x1f996;我是Sam9029&#xff0c;一个前端 Sam9029的CSDN博客主页:Sam9029的博客_CSDN博客-JS学习,CSS学习,Vue-2领域博主 **&#x1f431;‍&#x1f409;&#x1f431;‍&#x1f409;恭喜你&#xff0c;若此文你认为写的不错&#xff0c;不要吝啬你的赞扬&#xff0c;求…

计算机的核心:ALU(算术和逻辑单元)

本节我们将揭秘计算机的核心部件&#xff1a;算术和逻辑单元。了解计算机里基础的加法&#xff0c;左移&#xff0c;右移&#xff0c;非&#xff0c;与&#xff0c;或&#xff0c;异或&#xff0c;比较操作是如何被选择和处理的。 算术和逻辑单元 目前&#xff0c;我们已经见到…

Hadoop集群搭建

Hadoop集群搭建 Hadoop集群简介 Hadoop集群包括两个集群&#xff1a; HDFS集群、YARN集群两个集群逻辑上分离、通常物理上在一起两个集群都是标准的主从架构集群 HDFS集群&#xff08;分布式存储&#xff09; 主角色&#xff1a;NameNode 从角色&#xff1a;DataNode 主角色辅…

理学知识01-ppm、ppb、ppt换算

1. 浓度 浓度是分析化学中的一个名词。含义是以1升溶液中所含溶质的摩尔数表示的浓度。以单位体积里所含溶质的物质的量&#xff08;摩尔数&#xff09;来表示溶液组成的物理量&#xff0c;叫作该溶质的摩尔浓度&#xff0c;又称该溶质物质的量浓度。 2. 浓度单位 在文献阅读过…

关于支付宝授权用户信息

最近做的一个项目授权支付宝信息 进行报名支付 以下是流程 1、一个首先引进阿里相关配置信息 2、因为我这边项目是支持 小程序、H5、支付宝 登录 报名的&#xff0c;我这边只展示支付宝代码哦 对啦 微信不同应用下 unionid 是一样的&#xff0c;所以可以将小程序/H5下的视…