容器部署解决方案Docker

一、Docker简介

1.1 虚拟化

【什么是虚拟化】

  在计算机中,虚拟化(英语:Virtualization)是一种资源管理技术,是将计算机的各种实体资源,如服务器、网络、内存及存储等,予以抽象、转换后呈现出来,打破实体结构间的不可切割的障碍,使用户可以比原本的组态更好的方式来应用这些资源。这些资源的新虚拟部份是不受现有资源的架设方式,地域或物理组态所限制。一般所指的虚拟化资源包括计算能力和资料存储。

  在实际的生产环境中,虚拟化技术主要用来解决高性能的物理硬件产能过剩和老的旧的硬件产能过低的重组重用,透明化底层物理硬件,从而最大化的利用物理硬件   对资源充分利用

  虚拟化技术种类很多,例如:软件虚拟化、硬件虚拟化、内存虚拟化、网络虚拟化(vip)、桌面虚拟化、服务虚拟化、虚拟机等等。

【虚拟化种类】

(1)全虚拟化架构

  虚拟机的监视器(hypervisor)是类似于用户的应用程序运行在主机的OS之上,如VMware的workstation,这种虚拟化产品提供了虚拟的硬件。

   

(2)OS层虚拟化架构

  

  在OS层实现虚拟化,VM使用的是OS的Image,这种虚拟化也叫SKI(Single kernel Image)。

  OS层虚拟化大部分使用web版虚拟主机,高性能计算(HPC)集群和网格计算。系统容易管理和处理这种方法,系统资源在创建vm的同时分配给一定的cpu、内存及磁盘空间,这种类型的虚拟化比服务器虚拟化更有效,但是最大的缺点是VM跟host的OS必须是相同的,因为它们使用的相同的内核,所以,在linux的server上不能跑windows的VM。

(3)硬件层虚拟化

  

  硬件层的虚拟化具有高性能和隔离性,因为hypervisor直接在硬件上运行,有利于控制VM的OS访问硬件资源,使用这种解决方案的产品有VMware ESXi 和 Xen server

  Hypervisor是一种运行在物理服务器和操作系统之间的中间软件层,可允许多个操作系统和应用共享一套基础物理硬件,因此也可以看作是虚拟环境中的“元”操作系统,它可以协调访问服务器上的所有物理设备和虚拟机,也叫虚拟机监视器(Virtual Machine Monitor,VMM)。

  Hypervisor是所有虚拟化技术的核心。当服务器启动并执行Hypervisor时,它会给每一台虚拟机分配适量的内存、CPU、网络和磁盘,并加载所有虚拟机的客户操作系统。

  Hypervisor是所有虚拟化技术的核心,软硬件架构和管理更高效、更灵活,硬件的效能能够更好地发挥出来。常见的产品有:VMware、KVM、Xen等等。

1.2 什么是Docker

  

【容器技术】

  在计算机的世界中,容器拥有一段漫长且传奇的历史。容器与管理程序虚拟化(hypervisor virtualization,HV)有所不同,管理程序虚拟化通过中间层将一台或者多台独立的机器虚拟运行与物理硬件之上,而容器则是直接运行在操作系统内核之上的用户空间。因此,容器虚拟化也被称为“操作系统级虚拟化”,容器技术可以让多个独立的用户空间运行在同一台宿主机上。

  由于“客居”于操作系统,容器只能运行与底层宿主机相同或者相似的操作系统,这看起来并不是非常灵活。例如:可以在Ubuntu服务中运行Redhat Enterprise Linux,但无法再Ubuntu服务器上运行Microsoft Windows。

  相对于彻底隔离的管理程序虚拟化,容器被认为是不安全的。而反对这一观点的人则认为,由于虚拟容器所虚拟的是一个完整的操作系统,这无疑增大了攻击范围,而且还要考虑管理程序层潜在的暴露风险。

  尽管有诸多局限性,容器还是被广泛部署于各种各样的应用场合。在超大规模的多租户服务部署、轻量级沙盒以及对安全要求不太高的隔离环境中,容器技术非常流行。最常见的一个例子就是“权限隔离监牢”(chroot jail),它创建一个隔离的目录环境来运行进程。如果权限隔离监牢正在运行的进程被入侵者攻破,入侵者便会发现自己“身陷囹圄”,因为权限不足被困在容器所创建的目录中,无法对宿主机进一步破坏。

  最新的容器技术引入了OpenVZ、Solaris Zones以及Linux容器(LXC)。使用这些新技术,容器不再仅仅是一个单纯的运行环境。在自己的权限类内,容器更像是一个完整的宿主机。对Docker来说,它得益于现代Linux特性,如控件组(control group)、命名空间(namespace)技术,容器和宿主机之间的隔离更加彻底,容器有独立的网络和存储栈,还拥有自己的资源管理能力,使得同一台宿主机中的多个容器可以友好的共存。

  容器被认为是精益技术,因为容器需要的开销有限。和传统虚拟化以及半虚拟化相比,容器不需要模拟层(emulation layer)和管理层(hypervisor layer),而是使用操作系统的系统调用接口。这降低了运行单个容器所需的开销,也使得宿主机中可以运行更多的容器。

  尽管有着光辉的历史,容器仍未得到广泛的认可。一个很重要的原因就是容器技术的复杂性:容器本身就比较复杂,不易安装,管理和自动化也很困难。而Docker就是为了改变这一切而生的。

【容器与虚拟机比较】

(1)本质上的区别

   

(2)使用上的区别

  

【Docker特点】

(1)上手快。

  用户只需要几分钟,就可以把自己的程序“Docker化”。Docker依赖于“写时复制”(copy-on-write)模型,使修改应用程序也非常迅速,可以说达到“随心所致,代码即改”的境界。

  随后,就可以创建容器来运行应用程序了。大多数Docker容器只需要不到1秒中即可启动。由于去除了管理程序的开销,Docker容器拥有很高的性能,同时同一台宿主机中也可以运行更多的容器,使用户尽可能的充分利用系统资源。

(2)职责的逻辑分类

  使用Docker,开发人员只需要关心容器中运行的应用程序,而运维人员只需要关心如何管理容器。Docker设计的目的就是要加强开发人员写代码的开发环境与应用程序要部署的生产环境一致性。从而降低那种“开发时一切正常,肯定是运维的问题(测试环境都是正常的,上线后出了问题就归结为肯定是运维的问题)”

(3)快速高效的开发生命周期

  Docker的目标之一就是缩短代码从开发、测试到部署、上线运行的周期,让你的应用程序具备可移植性,易于构建,并易于协作。(通俗一点说,Docker就像一个盒子,里面可以装很多物件,如果需要这些物件的可以直接将该大盒子拿走,而不需要从该盒子中一件件的取。)

(4)鼓励使用面向服务的架构

  Docker还鼓励面向服务的体系结构和微服务架构。Docker推荐单个容器只运行一个应用程序或进程,这样就形成了一个分布式的应用程序模型,在这种模型下,应用程序或者服务都可以表示为一系列内部互联的容器,从而使分布式部署应用程序,扩展或调试应用程序都变得非常简单,同时也提高了程序的内省性。(当然,可以在一个容器中运行多个应用程序)

1.3 Docker组件

【Docker客户端和服务器】

  Docker是一个客户端-服务器(C/S)架构程序。Docker客户端只需要向Docker服务器或者守护进程发出请求,服务器或者守护进程将完成所有工作并返回结果。Docker提供了一个命令行工具Docker以及一整套RESTful API。你可以在同一台宿主机上运行Docker守护进程和客户端,也可以从本地的Docker客户端连接到运行在另一台宿主机上的远程Docker守护进程。

 

【Docker镜像】

  镜像是构建Docker的基石。用户基于镜像来运行自己的容器。镜像也是Docker生命周期中的“构建”部分。镜像是基于联合文件系统的一种层式结构,由一系列指令一步一步构建出来。例如:

  • 添加一个文件;
  • 执行一个命令;
  • 打开一个窗口。

  也可以将镜像当作容器的“源代码”。镜像体积很小,非常“便携”,易于分享、存储和更新。

【Registry(注册中心)】

  Docker用Registry来保存用户构建的镜像。Registry分为公共和私有两种。Docker公司运营公共的Registry叫做Docker Hub。用户可以在Docker Hub注册账号,分享并保存自己的镜像(说明:在Docker Hub下载镜像巨慢,可以自己构建私有的Registry)。

【Docker容器】

  Docker可以帮助你构建和部署容器,你只需要把自己的应用程序或者服务打包放进容器即可。容器是基于镜像启动起来的,容器中可以运行一个或多个进程。我们可以认为,镜像是Docker生命周期中的构建或者打包阶段,而容器则是启动或者执行阶段。  容器基于镜像启动,一旦容器启动完成后,我们就可以登录到容器中安装自己需要的软件或者服务。

 

  所以Docker容器就是:

  • 一个镜像格式;
  • 一些列标准操作;
  • 一个执行环境。

   Docker借鉴了标准集装箱的概念。标准集装箱将货物运往世界各地,Docker将这个模型运用到自己的设计中,唯一不同的是:集装箱运输货物,而Docker运输软件。

         和集装箱一样,Docker在执行上述操作时,并不关心容器中到底装了什么,它不管是web服务器,还是数据库,或者是应用程序服务器什么的。所有的容器都按照相同的方式将内容“装载”进去。

         Docker也不关心你要把容器运到何方:我们可以在自己的笔记本中构建容器,上传到Registry,然后下载到一个物理的或者虚拟的服务器来测试,再把容器部署到具体的主机中。像标准集装箱一样,Docker容器方便替换,可以叠加,易于分发,并且尽量通用。

         使用Docker,我们可以快速的构建一个应用程序服务器、一个消息总线、一套实用工具、一个持续集成(CI)测试环境或者任意一种应用程序、服务或工具。我们可以在本地构建一个完整的测试环境,也可以为生产或开发快速复制一套复杂的应用程序栈。

二、Docker安装与启动

【安装环境说明】

   Docker官方建议在Ubuntu中安装,因为Docker是基于Ubuntu发布的,而且一般Docker出现的问题Ubuntu是最先更新或者打补丁的。在很多版本的CentOS中是不支持更新最新的一些补丁包的。

        由于我们学习的环境都使用的是CentOS,因此这里我们将Docker安装到CentOS上。注意:这里建议安装在CentOS7.x以上的版本,在CentOS6.x的版本中,安装前需要安装其他很多的环境而且Docker很多补丁不支持更新。

【安装Docker】

  挂载安装好的CentOS7镜像,使用ip addr命令查看本地IP

  

  使用yum命令在线安装

yum install docker

  查看Docker版本

docker -v

  

【启动与停止Docker】

  systemctl命令是系统服务管理器指令,它是 service 和 chkconfig 两个命令组合。

  • 启动docker:systemctl start docker
  • 停止docker:systemctl stop docker
  • 重启docker:systemctl restart docker
  • 查看docker状态:systemctl status docker
  • 开机启动:systemctl enable docker
  • 查看docker概要信息:docker info
  • 查看docker帮助文档:docker --help  

三、Docker镜像操作

   Docker镜像是由文件系统叠加而成(是一种文件的存储形式)。最底端是一个文件引导系统,即bootfs,这很像典型的Linux/Unix的引导文件系统。Docker用户几乎永远不会和引导系统有什么交互。实际上,当一个容器启动后,它将会被移动到内存中,而引导文件系统则会被卸载,以留出更多的内存供磁盘镜像使用。Docker容器启动是需要的一些文件,而这些文件就可以称为Docker镜像。

 

3.1 列出镜像

  列出docker下的所有镜像:docker images

  

  • REPOSITORY:镜像所在的仓库名称
  • TAG:镜像标签
  • IMAGE ID:镜像ID
  • CREATED:镜像的创建日期(不是获取该镜像的日期)
  • SIZE:镜像大小

  这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

  

  为了区分同一个仓库下的不同镜像,Docker提供了一种称为标签(Tag)的功能。每个镜像在列出来时都带有一个标签,例如12.10、12.04等等。每个标签对组成特定镜像的一些镜像层进行标记(比如,标签12.04就是对所有Ubuntu12.04镜像层的标记)。这种机制使得同一个仓库中可以存储多个镜像。--- 版本号

       我们在运行同一个仓库中的不同镜像时,可以通过在仓库名后面加上一个冒号和标签名来指定该仓库中的某一具体的镜像,例如docker run --name custom_container_name –i –t docker.io/ubunto:12.04 /bin/bash,表明从镜像Ubuntu:12.04启动一个容器,而这个镜像的操作系统就是Ubuntu:12.04。在构建容器时指定仓库的标签也是一个好习惯。

3.2 搜索镜像

  如果你需要从网络中查找需要的镜像,可以通过以下命令搜索

docker search 镜像名称

  

  • NAME:仓库名称
  • DESCRIPTION:镜像描述
  • STARS:用户评价,反应一个镜像的受欢迎程度
  • OFFICIAL:是否官方
  • AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

3.3 拉取镜像

【从Docker Hub拉取】

  Docker镜像首页,包括官方镜像和其它公开镜像。Docker Hub上最受欢迎的10大镜像(通过Docker registry API获取不了镜像被pull的个数,只能通过镜像的stars数量,来衡量镜像的流行度。毫无疑问,拥有最高stars数量的库都是官方库)。

  

  国情的原因,国内下载 Docker HUB 官方的相关镜像比较慢,可以使用国内(docker.io)的一些镜像加速器,镜像保持和官方一致,关键是速度块,推荐使用。Mirror与Private Registry的区别:

  Private Registry(私有仓库)是开发者或者企业自建的镜像存储库,通常用来保存企业内部的 Docker 镜像,用于内部开发流程和产品的发布、版本控制。

  Mirror是一种代理中转服务,我们(比如daocloud)提供的Mirror服务,直接对接Docker Hub的官方Registry。Docker Hub 上有数以十万计的各类 Docker 镜像。

  在使用Private Registry时,需要在Docker Pull 或Dockerfile中直接键入Private Registry 的地址,通常这样会导致与 Private Registry 的绑定,缺乏灵活性。

  使用 Mirror 服务,只需要在 Docker 守护进程(Daemon)的配置文件中加入 Mirror 参数,即可在全局范围内透明的访问官方的 Docker Hub,避免了对 Dockerfile 镜像引用来源的修改。

  简单来说,Mirror类似CDN,本质是官方的cache;Private Registry类似私服,跟官方没什么关系。对用户来说,由于用户是要拖docker hub上的image,对应的是Mirror。yum/apt-get的Mirror又有点不一样,它其实是把官方的库文件整个拖到自己的服务器上做镜像,并定时与官方做同步;而Docker Mirror只会缓存曾经使用过的image。

  

  使用命令拉取:

docker pull centos:7

  目前国内访问docker hub速度上有点尴尬,使用docker Mirror势在必行。现有国内提供docker镜像加速服务的商家有不少,下面重点介绍ustc镜像。

【ustc的镜像】

  ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。

  步骤:

(1)编辑该文件:vi /etc/docker/daemon.json  // 如果该文件不存在就手动创建;说明:在centos7.x下,通过vi。

  

  (2)在该文件中输入如下内容:

{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"]
}

  (3)注意:一定要重启docker服务,如果重启docker后无法加速,可以重新启动OS

  

  然后通过docker pull命令下载镜像:速度杠杠的。

3.4 删除镜像

  1、docker rmi $IMAGE_ID:删除指定镜像

  2、docker rmi `docker images -q`:删除所有镜像

四、Docker容器操作

4.1 查看容器

  • 查看正在运行容器:
    docker ps
  • 查看所有的容器(启动过的历史容器):
    docker ps –a
  • 查看最后一次运行的容器:

    docker ps –l
  • 查看停止的容器
    docker ps -f status=exited

4.2 创建与启动容器

  创建容器常用的参数说明:

  创建容器命令:docker run

  • -i:表示运行容器
  • -t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
  • --name :为创建的容器命名。
  • -v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
  • -d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
  • -p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

【交互式容器】

  创建一个交互式容器并取名为mycentos

docker run -it --name=mycentos centos:7 /bin/bash

  这时我们通过docker ps命令查看,发现可以看到启动的容器,状态为启动状态

  

  使用exit命令 退出当前容器

  

  然后用ps -a 命令查看发现该容器也随之停止:

  

【守护式容器】

  创建一个守护式容器:如果对于一个需要长期运行的容器来说,我们可以创建一个守护式容器。命令如下(容器名称不能重复):

docker run -di --name=mycentos2 centos:7

 

  登录守护式容器方式:

  docker exec -it container_name (或者 container_id)  /bin/bash(exit退出时,容器不会停止)

  

4.3 停止与启动容器

  • 停止正在运行的容器:docker stop $CONTAINER_NAME/ID

  

  • 启动已运行过的容器:docker start $CONTAINER_NAME/ID

   

4.4 文件拷贝

  如果我们需要将文件拷贝到容器内可以使用cp命令

docker cp 需要拷贝的文件或目录 容器名称:容器目录

   也可以将文件从容器内拷贝出来

docker cp 容器名称:容器目录 需要拷贝的文件或目录

4.5 目录挂载

  我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。

  创建容器 添加-v参数 后边为   宿主机目录:容器目录

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos2 centos:7

 

  登录mycentos3容器后,发现刚拷贝的目录下是没有文件的:

  在宿主机目录创建一个文件:

 

  这时再查看mycentos3容器拷贝后的目录,发现在宿主机目录创建的文件也在里面了

  上面是宿主机和容器共享单级目录的情况,测试没问题。

  接下来将宿主机的一个多级目录与容器共享,会怎么样?

  先将一个本地的多级目录(CAS工程)上传到宿主机中

  

  将cas移动到宿主机的myhtml目录下

  再次查看容器,发现cas也有了

  但是当查看cas目录时,却出错了:

  这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数  --privileged=true  来解决挂载的目录没有权限的问题

 docker run -di -v /usr/local/myhtml:/usr/local/myhtml --privileged=true --name=mycentos4  centos:7

   登录mycentos4,此时cas目录下的文件可以正常显示了

 

4.6 查看IP与删除容器

【查看容器IP地址】

  我们可以通过以下命令查看容器运行的各种数据

docker inspect mycentos2

 

  也可以直接执行下面的命令直接输出IP地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' mycentos2

【删除容器】

  • 删除指定的容器:docker rm $CONTAINER_ID/NAME
  • 删除所有容器:docker rm `docker ps -a -q`

  注意,只能删除停止的容器

五、部署应用

5.1 MySQL部署

【拉取MySQL镜像】

docker pull mysql

【创建MySQL容器】

docker run -di --name pinyougou_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql

  -p 代表端口映射,格式为  宿主机映射端口:容器运行端口

  -e 代表添加环境变量  MYSQL_ROOT_PASSWORD是root用户的登陆密码

【进入MySQL容器,登陆MySQL】

  进入mysql容器

docker exec -it pinyougou_mysql /bin/bash

  登陆mysql

mysql -u root -p

【远程登陆MySQL】

  (1)我们在我们本机的电脑上去连接虚拟机Centos中的Docker容器,这里192.168.25.131是虚拟机操作系统的IP

   

  (2)在本地客户端执行建库脚本

  

【查看容器IP地址】

  我们可以通过以下命令查看容器运行的各种数据

docker inspect pinyougou_mysql

   运行效果如下:

  我们可以看到我们的数据库服务器的IP是172.17.0.2 

5.2 tomcat部署

 【拉取tomcat镜像】

docker pull tomcat:7-jre7

【创建tomcat容器】

  创建容器用于部署单点登录系统(CAS)  -p表示地址映射

docker run -di --name=pinyougou_tomcat -p 9000:8080 
-v /usr/local/myhtml:/usr/local/tomcat/webapps --privileged=true tomcat:7-jre7

【部署web应用】

  (1)修改cas系统的配置文件,修改数据库连接的url 

  测试:

  

5.3 Nginx部署

【拉取Nginx镜像】

docker pull nginx

【创建Nginx容器】

docker run -di --name=pinyougou_nginx -p 80:80  nginx

 【测试Nginx】

【配置反向代理】

  官方的nginx镜像,nginx配置文件nginx.conf 在/etc/nginx/目录下。

  在容器内编辑配置文件不方便,我们可以先将配置文件从容器内拷贝到宿主机,编辑修改后再拷贝回去。

  (1)从容器拷贝配置文件到宿主机

docker cp pinyougou_nginx:/etc/nginx/nginx.conf nginx.conf 

  (2)编辑nginx.conf,添加反向代理配置

upstream tomcat-cas {server 172.17.0.7:8080; //这里的地址需要通过docker inspect pinyougou_tomcat查询       
}
server {listen 80;server_name passport.pinyougou.com;location / {proxy_pass http://tomcat-cas;
        index index.html index.htm;}
}

  (3)将修改后的配置文件拷贝到容器

docker cp nginx.conf  pinyougou_nginx:/etc/nginx/nginx.conf

  (4)重新启动容器

docker restart pinyougou_nginx

  (5)使用SwitchHosts在本地设置域名指向

192.168.25.131 passport.pinyougou.com 

  浏览器测试:http://passport.pinyougou.com/cas/login

 

5.4 Redis部署

【拉取Redis镜像】

docker pull redis

【创建Redis容器】

docker run -di --name=pinyougou_redis -p 6379:6379 redis

【客户端测试】

  在你的本地电脑命令提示符下,用window版本redis测试

redis-cli -h 192.168.25.131

六、备份与迁移

6.1容器保存为镜像

  我们可以通过以下命令将容器保存为镜像

docker commit pinyougou_nginx mynginx

  pinyougou_nginx是容器名称

  mynginx是新的镜像名称

  此镜像的内容就是你当前容器的内容,接下来你可以用此镜像再次运行新的容器

6.2 镜像备份

docker  save -o mynginx.tar mynginx

  -o 输出到的文件

  执行后,运行ls命令即可看到打成的tar包

6.3 镜像恢复与迁移

  首先我们先删除掉mynginx镜像

  然后执行此命令进行恢复

docker load -i mynginx.tar

  -i 输入的文件

  执行后再次查看镜像,可以看到镜像已经恢复

 

转载于:https://www.cnblogs.com/yft-javaNotes/p/10750099.html

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

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

相关文章

BREW做的第一个程序--Hello world!

这几天开始做BREW开发了,刚开始挺晕的。又是C指针,又是BREW的SDK文档,还有环境配置,一大堆东东,真是让人手忙脚乱。好不容易配好了环境,写出了第一个Hello world!程序。感觉还不错,就把代码和想…

careercup-链表 2.1

2.1 编写代码,移除未排序链表中的重复节点。 不使用临时缓存: 如果不允许使用临时的缓存(即不能使用额外的存储空间),那需要两个指针, 当第一个指针指向某个元素时,第二个指针把该元素后面与它相同的元素删除&#xff…

随机排列_“按字母顺序排列”其实是种随机顺序

闲话之前有聊过,微信公众号这边接的广告不多,主要收益来自于微信自带的中插广告。后来同学们还开玩笑说“研究半天没发现这个图片哪里没品了,才发现是广告。”另外还有一部分收益,来自于各位的打赏。鉴于大部分人都是打赏一两块钱…

android 获取应用的资源id和uri

2019独角兽企业重金招聘Python工程师标准>>> 在某些应用中,为了实现应用apk资源放入重复利用,或者使用反射得到本应用的资源,需要使用反射反射方式获得,但Resources类中也自带了这种获取方式,并且功能更加强…

(SQL语句)按指定时间段分组统计

我现在有一张表: 列名1 时间 03174190188 2009-11-01 07:17:39.217 015224486575 2009-11-01 08:01:17.153 013593006926 2009-11-12 08:04:46.560 013599584239 2009-11-22 08:53:27.763 013911693526 2009-11-23 08:53:51.683 013846472440 2009…

数据库迁移_数据库迁移了解一下

mongodb数据迁移因服务器到期,需要将之前机器上面的数据进行数据迁移,并将服务全部docker化备份首先需要将现有即将到期的服务器上面的mongo数据进行备份mongodump -h dbhost -d dbname -o dbdirectory-h:mongodb所在服务器地址,可…

人脸颜值评分软件_在线算个颜值,特科学的那种 | 知多少

用 AI,科学的为颜值打个分。用 AI,打造科学颜值打分器https://www.zhihu.com/video/1185672892095848448图文版本送给不方便打开的朋友 (●u●)」如何科学的为颜值打个分?三庭五眼、四高三低?脸部是否对称?是否与本民族…

图片翻转

图片翻转 原文:图片翻转本人录制技术视频地址:https://edu.csdn.net/lecturer/1899 欢迎观看。这一节继续为大家介绍CSS3的动画效果: 图片翻转。 在iOS中的章节中,我也介绍过类似的效果,如果感兴趣的话,请点击这里查看&#xff1a…

【原】页面跳转以及表单提交中有中文的解决办法

这两天一直碰到一个郁闷的问题,在对表单进行提交的时候,用户名是中文的,怎么测试都不通过, 今天上午突然想起来是不是因为中文字符编码的问题!经过测试,果然是因为这个问题! 现在把解决方法贴出来!呵呵&…

实验吧之NSCTF misc250

下载的是一个流,用wireshark打开,由于原题是这样的:小绿在学习了wireshark后,在局域网内抓到了室友下载的小东东0.0 你能帮他找到吗?说明我们应该重点关注http传送的东西: 这里面一共有四个http文件&#x…

西澳大学商科专业排名_澳洲西澳大学优势专业排名多少

澳洲西澳大学优势专业排名多少西澳大学农业和林业专业在2018年QS世界排名中排名第32西澳大学解剖学和生理学专业在2018年QS世界排名中排名第13西澳大学地球与海洋科学专业在2018年QS世界排名中排名第32西澳大学土木结构工程专业在2018年QS世界排名中排名第37西澳大学矿产和采矿…

基于SOUI开发的应用展示

本页面列出基于SOUI开发的产品 欢迎使用SOUI的朋友提供资源:setoutsoft#qq.com #-> U大师 http://www.udashi.com EiisysIM: 是一款为工作场景而设计的企业即时通讯软件, ,含PC版和手机版。具有完善的即时通讯、文件传输、语音通话等功能。通讯录由企…

供应商寄售库存管理_【论文解读】物流联合外包下库存管理模式对供应链运作的影响...

物流联合外包下库存管理模式对供应链运作的影响作者:冯颖,林晴,张景雄,张炎治目录 1 引言2 问题描述3 数学模型4 协调模型5 数值算例6 结论1 引言传统库存管理模式下,供应链中各节点企业的库存管理各自为政&#xff0c…

SQLserver2000 实例管理工具

1、企业管理器是microsoft管理控制台(Microsoft management console)的一个插件。插件是运行在MMC中的部件、他不能独立运行,但必须包含着MMC中。企业管理器提供MMC形式的界面。像IIS、MTS也是MMC插件 2、查询分析器右边有模板选项卡,可以创建现成的模板…

linux设置nexus开机自启动_CentOS7配置nexus开机自启动

CentOS7配置nexus开机自启动新建nexus启动脚本进入/etc/init.d目录,新建脚本文件nexus// 进入/etc/init.d[rootlinux_maven etc]# cd /etc/init.d/// 新建脚本文件nexus[rootlinux_maven init.d]# vim nexus脚本内容:#!/bin/bash#chkconfig:2345 20 90#description:…

c语言6-2

#include<stdio.h> int main(){int a[3][3]{2,3,5,45,23,65,8,46,67};int s,t;sa[0][0]a[2][2]a[1][1];ta[0][2]a[1][1]a[2][0];printf("%d\n%d\n",s,t);return 0;} 转载于:https://www.cnblogs.com/p201821440019/p/10819405.html

怎么把ai从c盘移动到d盘_ai暂存盘怎么设置-AI设置暂存盘的教程 - 河东软件园

Adobe Illustrator简称AI&#xff0c;这款软件使用用户绘制图形的软件&#xff0c;它被大量的使用在了logo的设计中。相信每一位logo设计人员对它都不陌生吧&#xff1f;AI和PS都是同属于adobe旗下的图形设计软件&#xff0c;因此很多的设置功能都是一样的&#xff0c;例如暂存…

c 最大子序列和_算法总结:左神class8—跳台阶+最长递增公共子序列

【跳台阶】有n级台阶&#xff0c;一个人每次上一级或者两级&#xff0c;问有多少种走完n级台阶的方法?public int s1(int n){ if (n< 1){ return 0; if(n 1 || n 2){ return n; return s1(n - 1) s1(n - 2);}【最长递增子序列长度】给定数组arr&#xff0c;返回arr…

[转载]dynamic的小坑--RuntimeBinderException:“object”未包含“xxx”的定义

创建一个控制台项目和一个类库项目, 在类库中创建一个匿名对象&#xff0c;然后在控制台中访问它&#xff0c;代码如下&#xff1a; 控制台: namespace ConsoleApplication1 {class Program{static void Main(string[] args){dynamic dyc ClassLibrary1.TestClass.Test();Cons…

第5篇K8S创建资源的两种方式

一、创建方式分类&#xff1a;命令 vs 配置文件Kubernetes 支持两种方式创建资源&#xff1a;1.用 kubectl 命令直接创建&#xff0c;比如&#xff1a;kubectl run httpd-app --imagereg.yunwei.edu/learn/httpd:latest --replicas2在命令行中通过参数指定资源的属性。2. 通过配…