云计算与云服务期末

这篇具有很好参考价值的文章主要介绍了云计算与云服务期末。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

云计算与云服务期末论文

一、docker engine 安装过程

进入官网下载,只安装Docker Engine 选择Apt安装Docker
云计算与云服务期末,docker

复制以下内容到putty

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

检验安装是否成功

sudo docker run hello-world

给当前用户运行Docker的权限

sudo usermod -aG docker $USER

重启并再次运行Docker:

sudo reboot
docker run hello-world

成功

二、docker CLI

帮助:远程:docs.docker.com;本地:docker --help

1.docker主机操作

(1) docker version

查看docker版本信息

docker version
(2) docker info

查看docker系统信息

docker info
(3) docker volume

Docker Volume 命令用于管理 Docker 中的卷,卷用于持久化存储数据,以便在容器之间共享和重用。

docker volume create # 用于创建一个新的卷
docker volume inspect [卷名] # 用于查看卷的详细信息。返回卷的详细属性,如创建时间、驱动程序、路径等。
docker volume ls # 用于列出所有已创建的卷。可以查看卷的名称、驱动程序、挂载点等信息。
docker volume rm [卷名] # 用于删除一个卷。需要指定要删除的卷的名称或 ID,删除后该卷的数据将被永久删除。

2. 容器生命周期管理

(1)docker run

创建并运行一个容器,从一个映像开始

  • –name:为容器指定名称,在一个host上不能有同名容器
  • -it:以交互模式运行,并出现一个终端
# docker run --name [容器名字] -i -t [ubuntu版本]
docker run --name myUbuntu -i -t ubuntu:22.04
  • -d:后台运行容器
# docker run -d --name [容器名字] [ubuntu版本]
docker run -d --name myUbuntu1 ubuntu:22.04
  • -e:设置环境变量
# docker run -e "ENV_VARIABLE=value" <image_name>
docker run -e PATH=/home/syr/cloud/node-v18.18.2-linux-x64/bin:$PATH ubuntu:22.04
  • -p:映射端口
# docker run -p [宿主机端口]:[容器端口] <image_name>
docker run -p 3000:4000 ubuntu:22.04
  • -v:挂载卷,同步本地目录与容器目录内容
# docker run -v [本地目录]:[容器目录] image
docker run -v /home/syr2/containerROOT:/root -it ubuntu
# 将containerROOT文件夹和这个新建容器的root目录中的文件同步

允许数据在容器之间共享和重用,即使容器被删除也可以保留数据。volume 可以看作是宿主机上的一个目录或文件,当容器内的目录与 volume 目录绑定后,对容器的修改会立即反映到 volume 中
容器挂载后volume目录的数据就是与主机数据相同,如果image或容器内目录中存在原有数据,那么原有数据会被清除

(2)docker start/stop/restart

docker start :启动一个或多个已经被停止的容器
docker stop :停止一个运行中的容器
docker restart :重启容器

# docker start [容器名]
# docker stop [容器名]
# docker restart [容器名]
docker start myUbuntu
docker stop myUbuntu
docker restart myUbuntu
(3) docker kill
  • 结束一个正在运行中的容器
# docker kill  [容器名]
docker kill myUbuntu
(4) docker rm
  • 删除一个容器(不能是正在运行中的)
# docker rm [容器名]
docker rm myUbuntu
#删除所有已经停止的容器(常用于实验结束后)
docker rm $(docker ps -a -q)
  • -f 强制删除一个容器
# docker rm -f [容器名]
docker rm -f myUbuntu
(5) docker pause/unpause

docker pause :暂停容器中所有的进程
docker unpause :恢复容器中所有的进程

# docker pause [容器名]
# docker unpause [容器名]
docker pause myUbuntu
docker unpause myUbuntu
(6)docker exec

docker exec命令可以在容器中打开新的终端,并且可以启动新的进程

  • -it
# docker exec -it [容器名] /bin/bash
# 进入一个正在运行的容器中
docker exec -it myUbuntu /bin/bash
  • 在正在运行的容器中执行echo命令
# docker exec [容器名] [命令内容]
# 在一个正在运行的容器中执行命令打印"Hello, World!"
docker exec myUbuntu echo "Hello, World!"
  • -d:在后台运行命令
# docker exec -d [容器名] [命令内容]
# 在后台运行一个正在运行的容器,并在这个容器中执行打印"Hello, World!"
docker exec -d myUbuntu echo "Hello, World!"
  • -w:在指定目录下运行命令
# docker exec -w [目录名] [容器名] [命令内容]
# 在一个正在运行的容器的/apps目录下执行创建一个文件夹的命令
docker exec -w /apps myUbuntu mkdir nodeProject
  • -u:以指定用户运行命令
# docker exec -u [用户名] [容器名] [命令内容]
# 在一个正在运行的容器中,以root用户执行查看文件夹内容的命令
docker exec -u root myUbuntu ls

使用exit退出容器的时候不会关闭容器(推荐使用)

命令功能区别 能否启动新进程 能否打开新的终端
exec 可以在容器中直接启动新的进程 可以在容器中打开新的终端
attach 直接进入容器启动命令的终端,不会启动新的进程 主要用于查看启动命令的输入

3.容器操作

(1) docker ps
  • 显示当前正在运行中的容器
  • -a:显示所有容器
docker ps -a
  • -s:查看容器的磁盘大小
docker ps -s

输出详情介绍:

  • CONTAINER ID: 容器 ID。
  • IMAGE: 使用的镜像。
  • COMMAND: 启动容器时运行的命令。
  • CREATED: 容器的创建时间。
  • STATUS: 容器状态。

状态有7种:

  • created(已创建)
  • restarting(重启中)
  • running(运行中)
  • removing(迁移中)
  • paused(暂停)
  • exited(停止)
  • dead(死亡)
    PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。

NAMES: 自动分配的容器名称。

(2) docker attach

docker attach命令用于连接到正在运行中的容器。

# docker attach [容器名]
docker attach myUbuntu

使用exit退出容器时会关闭容器(不建议使用)

(3) docker port

docker port 用于列出指定的容器的端口映射

# docker port [容器名]
docker port myUbuntu
(4)docker stats

docker stats : 显示容器资源的使用情况,包括:CPU、内存、网络 I/O 等

  • 输出运行中容器的使用情况
  • -a:输出所有容器的使用情况
docker stats
(5) docker inspect

docker inspect : 获取容器/镜像的元数据

  • +[id]
(6) docker system

查找用法

  • -df 查看磁盘

    • -v 查看详细信息

4.容器rootfs命令

(1) docker commit

docker commit :从容器创建一个新的镜像

# docker commit [容器名] [镜像名[:TAG]]
docker commit myUbuntu myWeb1:v1
(2) docker cp

docker cp :用于容器与主机之间的数据拷贝

# docker cp  [容器名]:容器内地址 主机地址
# docker cp  主机地址 [容器名]:容器内地址
docker cp myUbuntu:/app/nodejs /node
docker cp /node myUbuntu:/app/nodejs

5.镜像仓库

(1) docker pull

docker pull : 从镜像仓库中拉取或者更新指定镜像

docker pull java
(2)docker search

用docker search搜索内容

# docker search <search_query>
docker search ubuntu

想要image详细信息时使用网页版registry。

6.本地镜像管理

(1) docker images

docker images : 列出本地镜像

  • 列出本地映像
docker images
  • -a:列出本地所有映像
docker images -a
(2) docker rmi

docker rmi : 删除本地一个或多个镜像

# docker rmi [镜像名]
docker rmi hello-world
(3 )docker build

docker build 命令用于使用 Dockerfile 创建镜像
参数说明:

  • -f :指定要使用的Dockerfile路径
  • -t: 镜像的名字及标签
# 使用当前目录的 Dockerfile 创建镜像,标签为image4:v1
docker build -f Dockerfile -t  image4:v1 .
(4) docker save

docker save : 将指定镜像保存成 tar 归档文件

  • -o:指定参数名
# docker save -o [输出文件名] [映像名]
docker save -o myweb.tar image4:v1
(5) docker load

docker load : 导入使用 docker save 命令导出的镜像

  • -i: 指定导入的文件
# docker load -i [输入文件名]
docker load -i myweb.tar

三、Dockerfile

1. 什么是 Dockerfile?

Dockerfile是一个包含用于构建Docker映像的指令的文本文档。这些指令可以是任何可以在命令行中调用的命令。Docker通过读取Dockerfile中的指令自动生成映像。

Dockerfile的基本结构包括四个部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令。第一条指令必须是FROM,用于指定基础映像。

Dockerfile中的指令包括但不限于RUN、CMD、FROM、EXPOSE、ENV等。这些指令在Dockerfile中按照从上到下的顺序执行。以“#”字符开头的声明被视为注释。

使用docker build命令可以从Dockerfile构建映像,可以使用-f标志指定Dockerfile在文件系统中的位置。

2. dockerfile内容及其作用

指令 说明
FROM 指定基础镜像,用于后续的指令构建。
MAINTAINER 指定Dockerfile的作者。(已弃用,使用LABEL指令)
LABEL 添加声明,无执行效果,用于指定Dockerfile的作者。
RUN 在构建过程中在镜像中执行命令。
CMD 指定容器创建时的默认命令。(可以被覆盖)
ENTRYPOINT 设置容器创建时的主要命令。(不可被覆盖)
EXPOSE 声明容器运行时监听的特定网络端口。
ENV 在容器内部设置环境变量。如果需要添加路径,在PATH下添加。对于自己的应用,需要添加路径到PATH下。
ADD 将文件、目录或远程URL复制到镜像中,将目录或文件的压缩包拷贝到image里,会同时解压缩。如果开发用户名和部署用户名相同,可以省略权限部分。
COPY 将文件或目录复制到镜像中。
VOLUME 为容器创建挂载点或声明卷。
WORKDIR 设置后续指令的工作目录,在执行程序前,需要跳转到相应目录。
USER 指定后续指令的用户上下文。
SHELL 覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。

3.dockerfile 示例1

# 指定基础镜像为Ubuntu
FROM ubuntu
# 标签作者为syr
LABEL Author=syr
# 将本地路径下的node-v18.18.2-linux-x64文件复制到容器中的/root/node目录
ADD node-v18.18.2-linux-x64 /root/node
# 将本地路径下的hello-world.js文件复制到容器中的/root目录
ADD hello-world.js /root
# 在容器中执行命令,创建一个名为dataPath的目录
RUN ["mkdir","/root/dataPath"]
# 将本地路径下的data1文件复制到容器中的/root/dataPath目录
ADD data1 /root/dataPath
# 创建一个卷,将容器的/root/dataPath目录挂载到宿主机上
VOLUME /root/dataPath
# 设置环境变量PATH,将/root/node/bin添加到PATH变量的开头
ENV PATH=/root/node/bin:$PATH
# 设置工作目录为/root
WORKDIR /root
# 公开容器的3000端口
EXPOSE 3000
# 设置容器启动时要执行的命令,即运行hello-world.js文件
CMD  ["node","hello-world.js"]

四、Ubuntu 应用 1 及 docker 部署

1.程序文件

部署一个简单的web应用,实现的功能为:对网站的访问人数进行计数

const http = require('node:http')
const fs=require('fs')
const port = 3000
var i = fs.readFileSync('dataPath/data1')
const server = http.createServer((req, res) => {
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/plain');
  i++
  fs.writeFile('dataPath/data1',' '+i,(err)=>{if(err) throw err})
  console.log('i+'+i)
  res.end('Hello, World! you are' + i + 'th visitor.\n');
});
server.listen(port, () => {
  console.log(`Server running at http://:${port}/`);
});

2.dockerfile文件

web应用1的dockerfile文件为dockerfile示例1

3.部署过程

(1) 数据以及挂载卷准备

编辑data1

生成volume:

docker volume create webData1

将data1复制过去:

sudo cp data1 /var/lib/docker/volumes/webData1/_data
(2) 容器生成

生成容器,挂载volume,端口号4000,名字myweb-data1:

docker run -v webData1:/root/dataPath -p 4000:3000 --name myweb-data1 image4:v1
(3) 结果展示

云计算与云服务期末,docker

五、Ubuntu 应用 2(带 mongodb 数据库)及 docker 部署

1.MongoDB安装

MongoDB 是一个免费的开源跨平台面向文档的 NoSQL 数据库程序

(1)MongoDB版本选择

项目:完成一个web应用,用node.js语言,数据库使用mongodb:4.2.7。
使用框架: node.js用express,mongodb用mongoose:5.13.21。
项目管理工具: npm。
进入 npmjs.com,查看版本依赖。先查看node.js express,express当前版本是4.18.2,要求node.js是0.10版本以上,我们当前node.js版本是18.18.2,所以express使用当前版本。
在虚拟机上nongodb必须用5.0版本以下的,因为当前的虚拟机版本都不支持AVX指令集。通过npmis.com查看,4.17.2版本下载量最大,所以使用此版本。

(2)初始化项目结构

通过创建文件夹创建目录结构

mkdir web2

项目npm初始化:进入项目文件夹,先创建入口文件,再执行初始化

touch webApp.js
npm init --save

安装express
安装mongodb的driver
安装mongoose

npm install express
npm install mongodb@4.17.2
npm install mongoose@5.13.21
  • 安装问题:国外下载源速度慢卡死,国内下载源更换网址导致无法下载
  • 解决办法:执行以下命令,更换最新的下载源(网络上绝大部分教程的下载源都是过时的)
npm config set registry https://registry.npmmirror.com/
npm config set ELECTRON_MIRROR https://npmmirror.com/mirrors/electron/

2.web服务器搭建

(1)入口页面index.html
<head>
	<meta charset="UTF-8">
	<meta name="viewport" content="width=device-width, initial-scale=1">
	<title>Document</title>
</head>
<body>
	<p>
		<form action="/form1" method="get">
			Name:<input type="text" value="Name" name="name"><br>
			Password:<input type="text" value="Password" name="password"><br>
			<input type="submit" value="Submit" >
		</form>
	</p>
</body>
</html>

页面效果
云计算与云服务期末,docker

(2)路由程序

webApp.js

const express = require('express')
const app = express()

app.get('/', function (req, res) {
  res.sendFile(__dirname + '/index.html')
})
app.get('/form1', function (req, res) {
  res.send('Received data:{name:'+req.query.name+',password:'+req.query.password+' }')
  console.log(req.query.name)
  console.log(req.query.password)
  //res.sendFile(__dirname + '/index.html')
})
app.listen(3000)
  • 测试1:程序能否运行
    云计算与云服务期末,docker

  • 测试2:是否能收到数据
    云计算与云服务期末,docker

  • 测试3:具体数据收集
    云计算与云服务期末,docker

3.mongodb数据库

(1)docker启动

直接使用mongodb的docker容器,版本4.2.7

docker pull mongo:4.2.7
  • 原有下载源下载速度过慢
    解决办法:将镜像修改成国内镜像

在/etc/docker/daemon.json 文件中添加以下参数(没有该文件则新建):
{“registry-mirrors”: [“https://9cpn8tt6.mirror.aliyuncs.com”]}
服务重启

systemctl daemon-reload
systemctl restart docker

创建mongodb数据文件夹/data/db
创建数据库数据文件volume:mongo-data:

docker volume create mongo-data

创建容器

docker run -p 27017:27017 -v mongo-data:/data/db --name mymongo mongo:4.2.7
(2)UI界面下的mongodb访问

使用vscode,安装拓展
云计算与云服务期末,docker

点击connect,在地址栏输入连接字符串

# mongodb://IP地址:端口号
mongodb://192.168.146.129:27017

云计算与云服务期末,docker

试运行通过
云计算与云服务期末,docker

(3)mongoose下操作
const mongoose = require('mongoose');
mongoose.connect('mongodb://192.168.146.129/syr0117');

const logNamePassword = mongoose.model('logNamePassword', { name: String,password: String });

const person = new logNamePassword({ name: 'Zildjian', password: '123' });
person.save().then(() => console.log('is saved'));
  • 测试1:能否运行
    云计算与云服务期末,docker

  • 测试2:数据导入

    云计算与云服务期末,docker
    云计算与云服务期末,docker

4.最后文件

  • webApp.js
const express = require('express')
const app = express()
const mongoose = require('mongoose');
mongoose.connect('mongodb://192.168.146.129/syr0117');
const logNamePassword = mongoose.model('namePassword', { name: String,password: String });
app.get('/', function (req, res) {
  res.sendFile(__dirname + '/index.html')
})
app.get('/form1', function (req, res) {
  res.send('Received data:{name:'+req.query.name+',password:'+req.query.password+' }')
  console.log(req.query.name)
  console.log(req.query.password)
  const person = new logNamePassword({ name: req.query.name, password: req.query.password });
  person.save()
  //res.sendFile(__dirname + '/index.html')
})
app.listen(3000)
  • web页面输入
    云计算与云服务期末,docker

  • 数据库接受数据
    云计算与云服务期末,docker

5.容器化

当前有两部分内容:mongodb数据库和webApp
构建dockerfile,生成image
web2应用的dockerfile如下:

FROM ubuntu
LABEL Author=syr 
COPY web2 /root/web2
ENV PATH=/root/web2/node-v18.18.2-linux-x64/bin:$PATH
WORKDIR /root/web2
CMD ["node","webApp.js"]
EXPOSE 3000

使用dockerfile生成image

docker build -f /home/syr2/dockerfile3 -t image2:v4 .

完整在容器内启动web应用2的流程

  • 1.启动mongo容器
docker run -p 27017:27017 -v mongo-data:/data/db --name mymongo mongo:4.2.7
  • 2.启动web2容器
docker run -p 3000:3000 image2:v4
  • 3.结果
    输入端

数据库接受到数据

t/web2/node-v18.18.2-linux-x64/bin:$PATH
WORKDIR /root/web2
CMD [“node”,“webApp.js”]
EXPOSE 3000

使用dockerfile生成image
```shell
docker build -f /home/syr2/dockerfile3 -t image2:v4 .

完整在容器内启动web应用2的流程

  • 1.启动mongo容器
docker run -p 27017:27017 -v mongo-data:/data/db --name mymongo mongo:4.2.7
  • 2.启动web2容器
docker run -p 3000:3000 image2:v4

云计算与云服务期末,docker
云计算与云服务期末,docker

  • 3.结果
    输入端
    云计算与云服务期末,docker

数据库接收到数据

云计算与云服务期末,docker文章来源地址https://www.toymoban.com/news/detail-775041.html

到了这里,关于云计算与云服务期末的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 并行计算与云计算的结合:实现高效计算

    并行计算和云计算都是当今计算技术的重要组成部分,它们各自具有独特的优势和应用场景。并行计算可以在多个处理单元之间分配任务,以提高计算效率,而云计算则可以通过分布式资源共享和虚拟化技术,实现计算资源的灵活性和可扩展性。随着数据量的增加和计算任务

    2024年04月11日
    浏览(51)
  • 大数据与云计算

    1 大数据 1.1 大数据简介 “大数据”是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力来适应海量、高增长率和多样化的信息资产。 是一种规模大到在获取、存储、管理、分析方面大大超出了传统数据库软件工具能力范围的数据集合,具有海量的数据规模

    2024年02月02日
    浏览(54)
  • 云计算与云原生

    如今是云时代,云计算,大数据,人工智能等新的名词在最近爆火。今天我们来了解一下,云计算与云原生。 在了解云原生之前,我们必须要了解云计算。 在了解云计算之前我们需要先了解一下什么叫做分布式计算。 什么是分布式计算? 在了解分布式计算之前,我们需要先

    2024年02月01日
    浏览(45)
  • 什么是边缘计算?边缘计算与云计算的区别?

    边缘计算是更靠近数据源而不是集中式服务器或基于云的位置对客户端数据的处理和计算。简而言之,边缘计算使计算资源、数据存储和企业应用程序更接近人们实际消费信息的地方。 边缘计算架构 数据是任何正常业务的核心。多年来,前所未有的计算能力和连接设备积累

    2024年01月18日
    浏览(44)
  • 大数据与云计算基础

    大数据与云计算 1.第三次信息化浪潮 大数据是指规模庞大、种类繁多、处理速度快的数据集合,通过高度并行处理和分布式计算等技术,可以从中提取出有价值的信息和知识。 大数据具有以下几个 特点 : 三个V:大数据通常被描述为具有“三个V”,即数据量大(Volume)、数

    2024年04月16日
    浏览(36)
  • 硬件基础与云计算基础

    操作系统的作用: 管理底层硬件设备 整合资源提供给上层软件使用 硬件资源分类: 计算资源:CPU、内存和GPU 存储资源:硬盘和光驱(和U盘) 网络资源:网卡(全称:网络接口卡) CPU是计算机的核心部件,负责程序的控制和运算。 CPU常见故障: 电脑无法开机       CP

    2024年02月09日
    浏览(32)
  • 云计算分类与云架构

    目录 1. 按照服务类型分类 2. 按照服务方式分类 3. 云架构        所谓云计算的服务类型,就是指其为用户提供什么样的服务,通过这样的服务,用户可以获得什么样的资源,以及用户如何去使用这样的服务。目前,业界普遍认为,以服务类型为指标,云计算可可以分为三类

    2024年04月25日
    浏览(30)
  • 云计算与云存储 期中试卷

    ( 2022 -2023  学年第 1 学期)   信息工程 学院        班(年)级 课程    云计算与云存储 题目 一 二 三 四 五 … 总分 得分 阅卷人 1.OpenStack 是一个由NASA(美国国家航空航天局)和 Rackspace 合作研发并发起的,以 Apache 许可证授权的自由软件和开放源代码项目。openstack 技术

    2024年02月20日
    浏览(32)
  • 大数据与云计算课后习题

    参考: https://blog.csdn.net/weixin_44986776/article/details/114855025 https://www.pianshen.com/article/33741007662/ 以及古老师ppt 第一章 请举例说明结构化数据、半结构化数据、非结构化数据的区别。 结构化数据指的是数据在一个记录文件里面以固定格式存在的数据。结构化数据可以通过固有键值

    2023年04月08日
    浏览(36)
  • 大数据与云计算实验一

     检查是否开启 开启服务 运行服务 查询ID 进入容器shell 找到/usr/share/nginx/html/index.html文件 编辑 完成

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包