Docker 基础知识

一、名词说明

Dockerfile 镜像构建文件
Images 镜像;生成容器
Containers 容器;微型系统
Volumes 卷;存放容器运行数据
Networks docker 自有网络管理
Docker Compose 编排服务;多个或一组相关联的 docker 服务管理
Docker Machine docker 管理工具客户端
Docker Swarm docker 服务集群管理工具

二、Linux 环境部署

红帽系 RHEL 7+ 下的 Linux 环境部署。

2.1 卸载原有安装包

dnf remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-engine \
    podman \
    runc

2.2 系统新增 Docker Repo

dnf install -y yum-utils
# 系统追加 Docker 镜像源
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo
# 变更为国内<南京大学>镜像源
# 参考:http://mirrors.nju.edu.cn/help/docker-ce
sed -i 's+download.docker.com+mirror.nju.edu.cn/docker-ce+' /etc/yum.repos.d/docker-ce.repo

2.3 安装 Docker

# 安装引擎
dnf install docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 要安装特定版本的 Docker 引擎,在存储库中列出可用版本,选择并安装:
# 列出存储库中可用的版本并对其进行排序,按版本号排序
dnf list docker-ce --showduplicates | sort -r
# 安装特定版本
dnf install docker-ce-{version} docker-ce-cli-{version} containerd.io docker-compose-plugin
# 自定义docker网卡地址(避免于宿主机网段冲突,导致无法上网)
echo '{"bip":"172.17.0.1/16"}' > /etc/docker/daemon.json
# 启动 docker 服务
systemctl start docker
# 开机自启动
systemctl enable docker
systemctl enable containerd

2.4 配置国内Hub

参考<南京大学>镜像站:http://mirrors.nju.edu.cn/help/docker-hub

# 这里配置为<南京大学>镜像站
# 注意:已存在得 daemon.json 不可覆盖
echo '{"registry-mirrors": ["http://docker.nju.edu.cn/"]}' > /etc/docker/daemon.json
# 重启服务生效
systemctl restart docker
# 验证Hub变更效果(Registry Mirrors 的值,倒数第二行)
docker info

2.5 卸载 Docker

# 卸载 Docker-Engine、CLI、Containerd、Docker-Compose 软件包
dnf remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
# 主机上的映像、容器、卷或自定义配置文件 不会自动删除;删除所有映像、容器、卷
rm -rf /var/lib/docker
rm -rf /var/lib/containerd

三、常用命令

Docker 命令大全参考:http://www.runoob.com/docker/docker-command-manual.html

3.1 基础命令

# 显示已有的对象列表
docker image/container/volume/network ls
# 删除对象
docker image/container/volume/network rm
# 清理无用的未启动的对象
docker image/container/volume/network prune
# 卷管理:创建、详情、列表、清理、删除
docker volume create|inspect|ls|prune|rm
# 网络管理:连接、创建、断开、详情、列表、清理、删除
docker network connect|create|disconnect|inspect|ls|prune|rm
# docker system:docker本身
# df:磁盘使用情况
# info:docker 服务详细信息
# prune:清理 停掉的容器|无用的网络|无效的镜像|无效的缓存
# --volumes:清理 无用的卷(容器运行的数据)
docker system df/info/prune --volumes

3.2 Image

# 镜像 删除、查询、下载、推送、运行容器
docker rmi/search/pull/push/run {image}
# 创建镜像
docker build -t {HubID}/{repo-name}:{tag} {dockerfile-path}
# 拉取镜像
docker pull {HubID}/{repo-name}:{tag}
# 推送镜像
docker push {HubID}/{repo-name}:{tag}
# 打包镜像
docker save {镜像名} --output {path/filename}.tar
docker save {镜像名} > {path/filename}.tar
docker save {镜像名} | gzip > {path/filename}.tar.gz
# 解压镜像到存储库
docker load --input {path/filename}.tar
docker load < {path/filename}.tar
docker load < {path/filename}.tar.gz
# 查看全部镜像列表
docker images -a
# 查看过滤后的镜像列表(无效的)
docker images --filter dangling=true
# 删除镜像 remove images
docker rmi {hub_id}/{repo-name}:{tag}

3.3 Container

# 用镜像生成一个容器运行
# -dit:后台运行容器,附带可交互式的终端(供随时进入容器内)
# --name:容器名称
# --restart:容器自动运行,除非手动停止
# -p:主机与容器的端口绑定 {local}:{container}
# -e:环境变量
#    1、系统环境变量:容器本身是一个简化过的Linux微系统,如系统默认字符集 LANG=C.utf8
#    2、应用环境变量:容器内应用自定义的环境变量,如:MYSQL_ROOT_PASSWORD 初始密码
# -v:卷绑定;应用主机文件(同步);{容器文件}:{主机文件}
docker run -dit --name {容器名称} --restart unless-stopped -p {lPort}:{cPort} \
        -e LANG=C.utf8 -v /etc/localtime:/etc/localtime {镜像名}
#/ MySQL Case:
# -c:cpu可核心数、-m 内存可使用的容量(BKMG)、--name:容器名称,--restart:自启动
# -p:端口绑定,-e:环境变量(默认字符集,初始密码,创建库),-v:与主机设定相同时区
docker run -dit -c 4 -m 6G --name mysql.t.index --restart unless-stopped \
    -p 3306:3306 \
    -e LANG=C.utf8 \
    -e MYSQL_ROOT_PASSWORD=sa. \
    -e MYSQL_DATABASE=testdb \
    -v /etc/localtime:/etc/localtime \
    mysql
# 进入容器
# -it:用终端进入
# -e:配置环境变量
docker exec -it -e LANG=C.utf8 {容器名} bash
# 容器其它操作项
# commit:当前容器现状生成 new image
# cp:拷贝; 容器到主机 {容器Id}:{Path} {LocalPath},主机到容器 {LocalPath} {容器Id}:{Path}
# start|restart|rename|pause|unpause|stop|rm:启动,重启,重命名,暂停,恢复,停止,删除
# inspect|stats|top|port|kill|logs:描述,时时资源使用情况,进程状况,用到的端口,杀死,日志
docker commit|cp|start|restart|rename|pause|unpause|stop|rm|stats|top|port|kill|logs {容器}
# 修改容器属性
docker update --restart {新值}
# 当前容器生成新镜像
docker commit {容器} {新镜像名称}
# 拷贝容器内文件 到主机目录
docker cp {容器}:{path} {local_path}
# 拷贝主机文件 到容器内目录
docker cp {local_path} {container}:{path}
# 时时日志 -f
docker logs --follow {container}
# 最新日志 -n
docker logs --tail={行数} {container}
# 指定日期时间之前
docker logs --until={时间} {container}
# 指定日期时间之后
docker logs --since={时间} {container}
# 容器内文件变更情况
docker diff {container}
# 硬件资源时时使用情况
# --no-stream:仅打印出当前一次
docker stats [--no-stream] {container}

3.4 Repository

# 登录/登出 Registry
docker login/logout
# 搜索仓库中的镜像
docker search [username/]{image}
# 镜像下载到本地
docker pull {image}[:{tag}]
# 镜像推送到仓库
docker push {username}/{image}[:{tag}]
# 本地镜像标记成指定仓库的镜像
docker tag {source_image}[:{tag}] [{hub_id}/][{username}/]{target_image}[:{tag}]

四、服务管理

4.1 Compose

# 编排服务管理

4.2 Machine

# 客户端工具

4.3 Swarm

# 集群管理工具

 

鄙人拙见,有不妥望指出,万分感谢。
本文转载于网络 如有侵权请联系删除

相关文章

  • 美国财团欲截胡:闻泰科技 5.3 亿收购的纽波特晶圆厂

    英国政府官员正在考虑将芯片制造商纽波特晶圆厂(NewportWaferFab)出售给美国财团,而不是让它与中资企业安世半导体达成的交易继续生效。纽波特晶圆厂这是英国《电讯报》周末给出的报道,《电讯报》还声称该协议涉及的部分资金来自英国政府本身的拨款。纽波特晶圆厂是英国仅剩的仍在生产半导体的几家工厂之一,但去年以6300万英镑(5.3亿人民币)的价格出售给了荷兰公司安世半导体,安世现在是闻泰科技(中国公司)的子公司。上周,英国政府利用《2021年国家安全和投资法》赋予的新权力,要求对安世半导体收购纽波特晶圆厂展开全面的国家安全评估审查。据说英国政府正在考虑一个未具名的美国财团提供的竞标方案,该财团有意收购纽波特晶圆厂,尽管纽波特晶圆厂出售给安世的交易已在去年达成。此外,据说该财团在考虑利用英国政府自己的汽车转型基金(AutomotiveTransformationFund)为其竞购提供部分资金。英国设立这个基金的目的是,投资于推动当地电动汽车供应链发展的项目。该财团搬出的理由是,纽波特晶圆厂可用来制造用于电动汽车充电桩的芯片。此举可能几乎与当初出售给安世半导体一样有争议,因为这意味着英国

  • Vue的学习(十四)如何启动vue的项目,并且对vue的项目目录做解释,打包项目的命令

    阅读目录如何启动项目vue的项目目录做解释打包vue项目如何启动项目 以上是之前创建的项目,那么如何启动这个项目呢? 进入到创建的项目里面 执行启动项目的命令 出现以上的情况,那么项目就已经启动了,在浏览器输入就可以了vue的项目目录做解释拿到一个vue的项目,我们首先看的文件是 如果我们在控制台输入 意思就是将我们的项目进行打包,为什么会这样呢,我们执行完npmrunbuild 项目就会找package.json这个文件 里面有个 那么就找到这个build 其实最后执行的是 nodebuild/build.js我们的目录里面就有 就会找到这个,就会进行打包。打包vue项目命令是npmrunbuild 执行完成之后,我们就可以看到多了这个文件夹

  • Java 生成微信小程序二维码(可以指定小程序页面 与 动态参数)

    一、准备工作微信公众平台接口调试工具小程序的唯一标识(appid)小程序的密钥(secret)二、获取access_token打开微信公众平台接口调试工具,在参数列表中输入小程序的appid和secret,点击检查问题,如果appid和secret正确,则可以返回正确的access_token结果(图中下方的红框)三、生成微信小程序二维码生成小程序二维码官方文档https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.getUnlimited.html一共有三种生成二维码的方式,可以根据使用场景去选择,这里我使用的是第三种生成方式wxacode.getUnlimitedwxacode.createQRCode 获取小程序二维码,适用于需要的码数量较少的业务场景。通过该接口生成的小程序码,永久有效,有数量限制,详见获取二维码。 POSThttps://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token=A

  • 视频AI智能分析高效快速解决视频取流、分发、级联等流媒体基础设施建设的难题

    视频AI智能分析所遇难题分析1.发现问题很多做视频分析的厂家,在基础视频传输这一块的积累和沉淀还不是很多,而用传统的一些开源产品是无法达到稳健可靠视频调取与传输的,也就是视频的基础建设是需要时间积淀,不是一时半会就能达到工业级使用的;那么如何解决视频分析企业既能够快速专注发展视频AI算法,又能够解决视频基础传输的后顾之忧呢?2.分析问题众所周知,视频的基础传输部分,主要包括的是视频的流的调阅(即取流)、分发(流媒体服务)、级联(即转推),如何非常有效地做到这些功能,而且能够配套非常人性化的外围管理后台,这一整套的功能,是需要一套完整的整合调度方案的;另一方面,音视频流接入到基础服务中后,还需要进行一系列的规则控制,例如何时抓取快照、何时录像、何时取流直播(按需直播、非按需直播),这又需要在其中加一整套的逻辑控制;以上这些不是简简单单利用开源或者海康大华厂家的SDK就能搞定的,这样一种流媒体服务也需要一套完整的体系架构:​3.解决问题在建立完成视频传输的基础设施建设后,我们可以在基础设施的音视频流必经之处设置一个过滤器,我们称之为EasyAIFilter,将所有的音视频流都经过这个过滤器

  • 用python制作动态图表看全球疫情变化趋势

    一、前言最近国内疫情已经有所好转,但是国外的情况不容乐观,那么怎样用python去制作动态图表来看全球疫情变化趋势呢?比如下面的国内外疫情发展趋势还是全球疫情发展趋势⬇️其实用python实现并不难,简单来说就分为三步:获取数据(requests)数据清洗(pandas)数据可视化(pyecharts) 那么我们就来一点一点讲解吧! 二、数据获取与处理疫情数据获取并不是很难,在目前互联网上已经有许多提供数据的网站,比如丁香园、腾讯新闻、百度新闻等,为了省事直接GitHub上找找看有没有现成的接口,很轻松就找到了丁香园数据的API,接下来两行命令就能拿下所有历史数据 data=requests.get('https://lab.isaaclin.cn/nCoV/api/area?latest=0') data=data.json()复制来看下数据 很明显这样的数据是没有办法去做分析的,所以接下来的重点就是如何清洗这一堆数据,主要又分为下面两块:数据整理:原始数据整理,由json格式转换为方便分析的dataframe格式数据清洗:原数据由于API采集的机制。包含大量重复

  • 在CentOS 8上安装FFmpeg

    FFmpeg是一套免费的开源计算机程序,它提供了录制、转换以及流化音视频的完整解决方案。FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、MacOSX等。本文介绍在CentOS8上安装FFmpeg的方法。1.添加RPMfusion仓库为在CentOS8上安装FFmpeg,需要先添加RPMfusion仓库:$sudoyuminstallhttps://download1.rpmfusion.org/free/el/rpmfusion-free-release-8.noarch.rpm复制2.安装FFmpeg添加了RPMfusion仓库后,运行下列两条命令以安装FFmpeg:$ sudo yum install http://rpmfind.net/linux/epel/7/x86_64/Packages/s/SDL2-2.0.10-1.el7.x86_64.rpm$sudoyuminstallffmpeg复制若有需要可以再安装开发库:$sudoyum-yinstallffmpeg-devel复制3.检查FFmpeg在CentOS8上的安装

  • Jira 使用手册

    DateRevisionversionDescriptionauthor2018-06-14V1.0.0IsaacZhang2018-06-22V1.0.11,添加git提交操作说明 2,提交message格式IsaacZhang2018-06-25V1.0.21,添加codereview流程IsaacZhang2018-11-10V1.0.31,流程修改 2,添加统计信息 3,新增主任务类型Investigation 4,新增重点关注项IsaacZhangForBA创建Epic创建Story必填项目 开发负责人(Planningmeetingupdate) 产品负责人(创建时update) 测试负责人(Planningmeetingupdate) 解决结果(开发完成update) 到期日(Planningmeetingupdate) 创建Investigation(新增)产品在做需求设计前,如果对需求有任何疑问/不清晰,可以提该调查任务类型。开发人员在代码层面,调查业务逻辑!ForDev在Story下创建子任务Devsub-task 需要填写‘预估时间’,‘到期日’,‘logti

  • graphpad prism 9 for Mac(专业医学绘图分析软件)v9.4.1直装版

    graphpadprism9forMac是一款非常好用且功能强大的科研医学生物数据处理绘图软件,也是目前市场上唯一易于使用的非线性回归分析软件,Prism9专为科学研究而设计的首选分析和绘图解决方案。新版推出功能更强大的Prism,具有增强的数据可视化和图形自定义功能,更直观的导航功能以及更复杂的统计分析功能。graphpadprism9forMacprism9mac版功能亮点综合分析和强大的统计,简化1.有效地组织您的数据与电子表格或其他科学图形程序不同,prism有八种不同类型的数据表,专门为您要运行的分析而格式化。这样可以更轻松地正确输入数据,选择合适的分析并创建令人惊叹的图形。2.执行正确的分析避免统计术语。在清晰的语言中,prism提供了广泛的分析库,从常见到高度特异-非线回归,t检验,非参数比较,单因素,双因素和三因子方差分析,列联表,生存分析等等。每个分析都有一个清单,以帮助您了解所需的统计假设,并确认您已选择适当的测试。3.随时随地获得可操作的帮助降低统计数据的复杂程度。prism的在线帮助超出了您的预期。几乎每一步,都可以从在线prismGuides访问数千页。浏览图

  • 数据采集:内容、输入、结果2021.10.21

    1、导出excel中要查询的内容。2、把内容填进搜索框。3、将返回的结果存入excel。fromDrissionPageimport* fromtimeimportsleep importpandas importcsv fromDataRecorderimportRecorder#记录器 fromDataRecorderimportFiller#填充器 data=pandas.read_excel(r'C:\Users\Administrator\Desktop\要查询的书名.xlsx',sheet_name='Sheet1')#读取要查询书名的excel文件 p=MixPage()#打开浏览器 p.get('https://www.dedao.cn/?search=suggest')#打开网页 sleep(1) r=Recorder('查询结果.xlsx')#准备存入的excel文件 forrowindata.values:#把excel中的书名挨个遍历出来 print(str(row[0]))

  • 图论算法之DFS与BFS

    概述(总) DFS是算法中图论部分中最基本的算法之一。对于算法入门者而言,这是一个必须掌握的基本算法。它的算法思想可以运用在很多地方,利用它可以解决很多实际问题,但是深入掌握其原理是我们灵活运用它的关键所在。 含义特点 DFS即深度优先搜索,有点类似广度优先搜索,也是对一个连通图进行遍历的算法。它的思想是从一个顶点V0开始,沿着一条路一直走到底,如果发现不能到达目标解,那就返回到上一个节点,然后从另一条路开始走到底,这种尽量往深处走的概念即是深度优先的概念。 由于用到递归,当节点特别多且深度很大的时候,可能会发生栈溢出。解决办法是将递归改为非递归,自行编写栈。 BFS即广度优先搜索(也称宽度优先搜索),是连通图的一种遍历策略。因为它的思想是从一个顶点V0开始,辐射状地优先遍历其周围较广的区域,故得名。 一般可以用它做什么呢?一个最直观经典的例子就是走迷宫,我们从起点开始,找出到终点的最短路程,很多最短路径算法就是基于广度优先的思想成立的。 应用场景 dfs 连通分量 连通分量:任意两点可互达的图。 求无向图的连通分量:O(n) 二分图判定 二分图:每条边

  • io多复用底层原理

                                                                                                                                                  &

  • Uva - 1572 - Self-Assembly

    把A+~Z+,A-~Z-看成52个点,正方形看成边,就得到一个有向图,当存在有向图的时候有解。和10129有点像,做拓扑排序即可。 吐槽:刚开始把循环输入用cin,读取字符串用了scanf,直接WA了,要用还是用成一致的都cin,或者都scanf,这样就没问题了。 AC代码: #include<iostream> #include<cstdio> #include<cstdlib> #include<cctype> #include<cstring> #include<string> #include<sstream> #include<vector> #include<set> #include<map> #include<algorithm> #include<stack> #include<queue> #include<bitset> #include<cassert> usingnamespa

  • Windows Serivce服务实现过程和打包安装

          环境:vs2013,win7 参考: Windows服务的快速搭建与调试(C#图解) .Net实现Windows服务安装完成后自动启动的两种方法 C#生成windows服务打包程序 1、新建项目WindowsService项目。 2、服务安装后自动启动。 右键添加安装程序 要设置服务的一些属性。设置运行服务的账号类型为本地账户。 设置服务名称,设置启动方式为自动启动。 注意:DisplayName:是设置看到的服务名称。在计算机》管理》服务,看到的是这个。 ServiceName:是设置实际的服务名称。在Window任务管理器里面看到的是这个。 在任务管理器进程里看到的是WindowsService项目的名称。   在ProjectInstaller类中,覆盖父类Commit方法 代码如下:注意名称,此名称要与WindowsService设置的名称一样,在serviceInstaller1右键属性里面设置   1[RunInstaller(true)] 2publicpartialclassProjectIns

  • OGG复制进程能不指定SCN复制表吗? 参数ENABLE_INSTANTIATION_FILTERING

    一、疑问 OracleOGG是如何正确的进行数据同步呢?初始化一个表,完成一个数据的同步? 1)假设同步的表有静态时间2小时; 2小时内,通过dblink,exp,expdp数据导入在目标库新建表,完成第一次的数据初始化; 随后,源端目标端使用OGG追加这个表进行数据同步; 2)假设同步的表数据随时可能修改; 一般选择,源端对表开启最小补充日志,源端指定scn导出,目标端导入后,完成数据初始化; 随后,目标端OGG指定scn,复制进程级别或者表级别进行csn过滤,过滤ogg复制进程trailcsn~源端导出scn之间的数据变换! 如下是MOS说明,通过csn完成数据同步,比使用参数handlecollision可靠! OracleGoldenGateBestPractices:InstantiationfromanOracleSourceDatabase(DocID1276058.1) ThisdocumentisanintroductiontoOracleGoldenGate’sbestpracticesandguidelinesforinstantiationofatargetd

  • 2. react 简书 头部(header) 图标添加

    1.访问iconfont 并注册登陆 2.进入iconfont头部图标管理->我的项目 3.点击右边的文件夹+号图标创建我的项目输入项目名称即可     4.在搜索框搜索'放大镜'三个字 5.找到合适的图标点击添加入库 6.点击右上角的购物车->添加到项目选择项目 7.点击下载到本地并解压 8.将解压后的文件放到src下的statics下的iconfont文件夹内 9.删除原有的 iconfont.js将文件夹内的iconfont.css改为iconfont.js并改写为 #iconfont.js p.p1{margin:0;font:14px"HelveticaNeue";color:rgba(20,23,28,1)} p.p2{margin:0;font:14px"HelveticaNeue";color:rgba(20,23,28,1);min-height:16px} span.s1{font:14px".PingFangSC"} import{createGlobalStyle}from'styled-components

  • 【网络对抗技术】20181234 Exp1 PC平台逆向破解

     目录 1实践目标 2基础知识点及问题回答 3直接修改程序机器指令,改变程序执行流程 3.1查看反汇编文件并计算地址变换结果 3.2修改可执行文件 3.3再次运行可执行文件 4通过构造输入参数,造成BOF攻击,改变程序执行流——调用getshell 4.1反汇编,了解程序的基本功能 4.2确认输入字符串哪几个字符会覆盖到返回地址 4.3确认用什么值来覆盖返回地址 4.4构造输入字符串 4.5函数调用与堆栈 5注入Shellcode并执行 5.1准备一段Shellcode 5.2准备工作 5.3构造要注入的payload 5.4结合NC模拟远程攻击 6Bof攻击防御技术 6.1从防止注入的角度 6.2注入入了也不让运行 6.3增加shellcode的构造难度 6.4从管理的角度  7实验心得与体会  实验报告                     

  • 1. Socket网络编程

    1.借助服务器实现小写转大写的程序:   客户端:发送任意小写字母到服务器端。   服务器端:接收小写字母,转为大写,回传给客户端,然后客户端显示到屏幕。    #include<stdio.h> #include<unistd.h> #include<sys/socket.h> #include<stdlib.h> #include<arpa/inet.h>//结构体structsockaddr_in的头文件 #include<ctype.h>//toupper()函数头文件 #defineSERV_IP"127.0.0.1"//IP地址 #defineSERV_PORT6666//端口号不能大于65535,1000以下的端口号一般给系统使用,用户使用端口号一般从3000以上 intmain(void) { intlfd,cfd; structsockaddr_inserv_addr,clie_addr; socklen_tclie_addr_len; charbuf[BUFSIZ];//操作系统内嵌的宏B

  • (wp8.1开发)添加数据(SQLite)库到app

    wp8.1只支持SQLite。 如何添加SQLite支持请看这里 我这里要说的是如何添加自己的数据库 1.添加数据库到项目中 2.右击选择属性 3.将生成操作改成内容 4.直接就可以引用数据库文件了

  • Graph Neural Networks with Adaptive Residual

    目录概符号说明Motivation本文的改进代码 LiuX.,DingJ.,JinW.,XuH.,MaY.,LiuZ.andTangJ.Graphneuralnetworkswithadaptiveresidual.InAdvancesinNeuralInformationProcessingSystems(NIPS),2021. 概 通过修改\(\|F-X\|_F^2\)得到的新的messagepassing,以便处理一些异常的特征. 符号说明 \(\mathcal{G=(V,E)}\),graph; \(A\in\mathbb{R}^{n\timesn}\),邻接矩阵; \(\hat{A}=A+I\); \(\tilde{A}=\hat{D}^{-1/2}\hat{A}\hat{D}^{-1/2}\); \(\tilde{L}=I-\tilde{A}\); \(X\in\mathbb{R}^{n\timesd}\),featurematrix; \(\|X\|_F=\sqrt{\sum_{ij}X_{ij}^2}\); \(\|X\|_{21}=\sum_{i}\sqrt{\

  • PY学习记录#4

    循环里面还要用range(,)函数的屑py 这个range还不包括最后一个数   T1 九九乘法表 这个题就是循环嵌套的经典应用了 可以很好的感受一下外层循环是如何影响内层循环的 内层循环次数随着外层循环次数增加而增加 最后输出一个三角形的形状 foriinrange(1,10): forjinrange(1,i+1): print(f"{i}*{j}={i*j}",end="\t") print("\n")复制 T2  阶乘 这个没啥好说的 代码对于老师的来说我做了一点小修改 直接从2开始循环 a=int(input()) n=1 foriinrange(2,a+1): n*=i print(n)复制  T3 斐波那契数列前20位‘ 斐波那契老经典了,这里用三种方法来做 先说老师的方法  这个方法其实不是非常好理解 主要原因是为了计算下一位 所以要不断滚动更新前两位的数值 每算出一个新的就把旧的更新过去 f,f1,f2=0,1,1 print(f) print(f1) print(f2) foriinrange(3,21):#从第三位

  • Angularjs学习---angularjs环境搭建,ubuntu 12.04下安装nodejs、npm和karma

    1.下载angularjs 进入其官网下载:https://angularjs.org/‎,建议下载最新版的:https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.7/angular.js 所有版本:https://code.angularjs.org/ 2.示例1 HelloWorld! 新建一个helloworld.html <!doctypehtml> <htmlng-app> <head> <scriptsrc="angular.js"></script> </head> <body> Hello{{'World'}}! </body> </html>复制 然后将下载的angular.js拷到与helloworld.html的同一目录 效果如下所示:   3.helloworld.html代码说明 标记ng-app告诉AngularJS处理整个HTML页并引导应用: <htmlng-a

相关推荐

推荐阅读