前言

事情是这样的,首先之前不知道git这个利器,就把代码复制来粘贴去,一个人写代码还好,几个人,特别是一个团队协同工作,这种复制粘贴,U盘拷贝代码,QQ发来发去代码的方式简直就是噩梦,非但麻烦,而且非常凌乱,反正我是受不了。然后,知道git以后才发现自己和它相见恨晚,先别说什么版本控制工具,首先光是托管代码就让我爽一番(svn工作流模式),请注意,我现在是以完全菜鸟的视角阐述,大神们请掠过。

引入了git,整个协同工作有条不紊多了,我的思路也清晰多了,可是问题又来了,项目开始的时候我只是考虑本机开发的问题,嗯,在本机的确没有问题了,但是后面有个新人加进项目后有个问题突然暴露了出来——多人协同开发中除了代码还有环境[环境描述,依赖,缓存,参数,配置等]!首先他和我习惯用不同的系统开发(他用windows,我用linux - -),然后各种环境问题(一会儿缺这个包,一会儿又编译不通过,等下报个错,分分钟折腾死你)。讲真,加班加点不重要,我突然想到,如果以后要部署到很多服务器,那岂不是又要重重复复做同样的功夫?想想都心累,可是docker解决了我这个困扰。

docker是个热门的虚拟容器的技术,其实我是想都没有想过要用到它的时候,虽然我之前知道有docker这么一个玩意,好像很牛逼,但是也就是仅仅停留在知道的程度,至于它能做什么,为什么会存在,我没有任何概念,我曾一度想看懂一点docker,但是各种什么虚拟啊,容器啊,完全搞不懂,想想那时候还是大二的懵懂青春.

git+docker,一个管理代码,一个管理环境


Git

Git相信大家都不陌生,git是linus大神继linux内核以后又一个杰作之一,关于git的历史,可以上Wikipedia看一看,然而在说git之前,我想聊聊svn。

svn也是一种版本控制工具,其实“版本控制工具”这个词乍一听完全不知所云,那就抛开它的定义,直接说它究竟做了什么。一开始呢,写代码的人不多,大家就直接把代码传来传去就好了,对,就是我在前言里面说的各种复制粘贴,QQ传什么的,当然国外不用QQ,可是传着传着就乱套了,你的是什么时候的代码,然后我的又和你发布有什么不同,修改了哪里等等,简直乱成一锅粥,特别是团队的管理者,最不爽就是这种状况,把自己都搞乱了还得了?这时候svn诞生了(当然还有其他的版本控制工具,我这里以svn作为代表),svn是集中式的代码管理,也就是说得有一个中心的svn服务器一直管理着代码,开发者本地是没有这个仓库的,当开发者修改完代码,或者有什么新的代码,就直接提交到中心的svn服务器就好了,非常清楚明确,但是有个很大问题就是,万一中心的svn的服务器挂了呢?或者是我连不上中心的svn服务器?那我岂不是干等着修复问题,而没有办法立即工作?那我打盘阴阳师再回来吧:)

开玩笑的,没有办法立即工作是很不爽的一件事,有什么办法?git,这家伙是分布式的,何为分布式?就是每一个开发者都有一个代码完整的代码仓库,中心服务器就算挂了或者网络无法链接的时候,可以通过其他有仓库的同事克隆一份,而且它可以先提交到本地的仓库,再等中心代码仓库好了或者网络恢复了再一个push命令提交到中心代码仓库,是不是比svn好那么一丢丢?其实基于这个特性,git好的其实不只是一丢丢,不过这个好处得你自己玩玩才能够更加细致地体会了,我就不展开来讲了.

但是svn还是有存在的价值,因为svn的简单易用,而且方便集中式管理,所以企业非常偏爱svn,外加git有一定的学习成本,虽然我倒是不觉得git能有多少学习成本…..- -

Git几点须知

  1. git本身不追踪目录的变化,所以你创建一个空目录,你会发现提交的变更里面并没有这个你创建的空目录,你要问了,如果不追踪目录变化,那为什么我改变了一个目录的名字,而变更又会被包括进去呢?那是因为你这个目录下存在文件,你改变了目录的名字,相当于改变了这个目录下的文件的路径,也就是说改变了文件,所以git要追踪这个变化.

  2. 本地的代码仓库由工作区,暂存区和本地分支组成:工作区就是你现在的路径下的文件,而暂存区就是git自己缓存区,把add放在这个区域中,最后就是本地分支,暂存区commit就是commit到本地分支了
    工作区<==>暂存区==>本地分支<==>远程仓库分支

  3. 什么是.gitignore,README.md,LICENCE?
    其实我一开始看到github项目里面都会有.gitignore,README.md这两个文件,我也不知道是啥,就懵懵懂懂地往自己的项目加这两个文件,我也是后面才知道,README.md是markdown文件(后面以md作为后缀,markdown写东西体验挺好的,它还有自己的语法,强烈推荐~),里面要写一些你想告诉看你代码的人的话,然后.gitignore的话,我是遇到需要屏蔽一些比如python的pyc文件,不想这些文件放进我的代码仓库,我才知道这个.gitignore有什么用,它就像它字面说的那样ignore一些东西。至于LICENCE的话,主要指的是开源许可,现在主流的就是GPL,BSD,MIT,Apache等等,你可能都有耳闻,它们之间的关系可以这样表达[感谢阮一峰老师做的图解]:

    这里写图片描述

    这里我稍微梳理下git的常用指令,贴上来供参考

  git命令大合集git init repo  #初始化一个叫repo的本地git仓库#实际上就是创建一个repo的目录,然后目录下放一个.git,.git包含了git的所有记录,判断一个目录是否为git仓库,就看有没有.git目录,有.git目录往下都属于同一个git仓库#如果你把.git这个目录删除了,你的代码虽然还在,但是你的历史变更记录就全部没有了,所以一般别动这个.gitgit add file   #往暂存区添加一个叫file的文件git diff       #对比修改内容和git中最新记录的commit的区别,最好在add之前用git diff看一看,避免一些像加了空白键那种无效提交git add .      #往暂存区添加在git status中提示需要add的文件(git status不会提示被.gitignore忽略的文件)git commit  -m  "blablabla"  #把暂存区的内容正式提交到本地的当前分支,其中那个blablabla就是对本次提交的说明git commit # 最近实践发现加了-m,我会尽可能挤成一行来写,但是push到github后,查看commit的时候就发现写的记录信息全部挤在一行,难看死了,有些还被忽略了# 所以不如直接git commit记录比较全面的信息# 不过之前得先指定git config --global core.editor /usr/bin/vim,不然貌似默认用的是vi,vi的话就有可能在你保存的时候会崩溃# 以至于你写的一堆提交信息全没了.#git commit 还有一个-a的选项,是表示连同未add的文件改动也一同加进来,因为你可能add以后又改动了文件,而一般你前面add了内容就只用-m就可以了,不用-amgit status  #查看当前所在git仓库情况git log     #查看提交历史,你会看到你自己之前commit时候的说明,各种blablablagit reflog  #查看操作历史git clone HTTPS/SSH #克隆一个项目# 常见的要么就是长成https型的(e.g. https://github.com/tesseract-ocr/tesseract.git)# 要么就是长成ssh型的(e.g. git@github.com:tesseract-ocr/tesseract.git)git remote -v  #查看远程代码仓库的信息git remote add origin HTTPS/SSH #添加一个叫origin远程仓库地址,一般克隆自带,如果是本地新创建的话就得执行这句,然后才能pushgit remote remove origin  #删除一个叫origin远程仓库地址git push origin <本地分支>:<远程分支>  #如果没有冒号后面的,此时默认推送到远程origin仓库的与<本地分支>同名的分支,如果不存在,则会被新建git fetch --all #这条命令一般用于如果有人远程push了一条分支到repo,你本地想要拉下来,直接checkout提示本地没有,就可以fetch全部分支了~git pull origin <远程分支>:<本地分支>   #如果没有冒号后面的,此时默认拉取并合并远程仓库origin的 <远程分支>到当前分支,pull相当于fetch+mergegit pull --rebase origin dev  <远程分支>:<本地分支> #拉取远程git代码仓库origin的dev分支更新,并以重建的方式合并到本地分支#一般要是嫌麻烦,就像上面那样直接pull就好了,有些洁癖者喜欢用rebase保证本地的线性干净,本地可以rebase,远程就别这么做了git merge --no-ff dev master   #合并本地dev分支到master分支,洁癖者会为了干净历史加上--no-ff选项(--no-ff意思是no fast forward非快进式合并,某公司面试问了--no-ff含义)git merge --no-ff dev          #合并本地dev分支到本地当前分支,洁癖者会为了干净历史加上--no-ff选项#冲突解决:在pull 和merge的时候会因为合并双方文件内容不一样而导致冲突,它会显示给你发生冲突的文件,并自动在冲突文件中标注好不一样的段落#解决冲突其实已经有很多很好的工具了(比如vimdiff之类的),但是我觉得这些工具都稍显得复杂不简约,所以我推荐直接用vim打开发生冲突的脚本,手动修改好,保存#用vim修改(sublime也不错)清晰方便,再add==>commit==>push就没问题了(第二次push是以你修改后提交为准,git这时候并不理会远程仓库的文件内容,直接覆盖过去~)#或者修改好冲突以后就git add冲突的文件,再git merge --continue或者git rebase --continue,省去了commit的功夫git branch   #显示本地所有分支git branch -D  dev #-D是-d --force的shotcut,强制删除dev本地分支git push origin  :dev  #删除远程仓库的dev分支,相当于把一个空分支push到远程仓库的dev上,等同于删除该分支。git checkout -b dev   #切换到dev分支,-b是没有dev分支时候才需要加上去的,这种情况下是创建并切换到dev分支的意思git checkout -- file  #撤销工作区中一个叫file的文件的修改git reset HEAD file   #撤销暂存区中一个叫file的文件到工作区中git reset --hard HEAD^  #回滚当前分支到上一个版本,注意末尾的^,有n个^说明回滚多上个版本,也就是回到多少次commit前#貌似把上面的file 换成*(wildcard)通配符来代指所有是可以的.我就经常多文件撤销工作区修改的时候git checkout -- * ,纯粹因为懒得一个个输入... 
git stash
#真是没有遇到问题就找不到来学习,用了那么久的git,现在才知道git stash这东西#使用场景:
#当前工作区内容已被修改,但是并未完成(往往是写到一半有多).
#这时Boss来了,说前面的分支上面有一个Bug(容易出现在线上hotfix),需要立即修复。
#可是我又不想提交目前的修改,因为修改没有完成。
#但是,不提交的话,又没有办法checkout到前面的分支(checkout会报错)。
#此时可以用Git Stash就相当于备份工作区了。
#然后在checkout过去修改,就能够达到保存当前工作区,并及时恢复的作用#简单应用:(最好不要过多缓存,因为pop的时候容易conflict)
git stash 缓存工作区修改
git stash list 当前的git stash栈打印出来
git stash pop  恢复所缓存内容
git stash clear 清除全部所缓存内容
git stash pop 相当于 git stash apply 加 git stash drop

Reference:
1.Git Stash用法
2.Difference Between Git Stash Pop And Git Stash Apply
3.Git Stash Pop Considered Harmful
4.(Highly Recommended!) Git Stash Tutorial

P.s. 在我用git的时候发生过一个小错误:
“fatal:refusing to merge unrelated histories”,我用的是git2.9.3的版本,然后想要合并远程仓库,可能本地和远程仓库提交历史区别太大,所以会产生这种错误,幸好网上都有答案,其实是git在2.9版本后添加的一个安全措施,避免无相关历史的两个仓库合并在一起,防止误操作的发生,以避免污染了两个代码仓库–“since git 2.9.* ‘git merge’ used to allow merging into branches that havo no common base by default ,which led to a branch new history of an existing project created and then pulled by an unsuspecting maintainer which allow an unnecessary parrallel history merged into the existing project.Here is an escape hatch(逃生舱)”
解决的办法 : 在merge的时候加上–allow-unrelated-histories就可以了

Git本身如果只是要用的话没什么好说的,就是一堆指令,它的精华的地方在于它与它的一些工作流(WorkFlow)结合。不过其实所谓工作流说白了就是开发人员之间,团队内要怎么配合和协调,人与人之间沟通都做不好,工具再好也只是一个空壳而已。

Git工作流
所谓工作流就是团队的怎么打配合,配合的方式可以有千万种,我不敢说哪种配合方式是最好的,我下面主要聊聊我所使用的,仅供参考
一般项目都会分成两个主要分支(至少我现在看过的项目都是),一个是master分支(主分支),一个是dev分支(开发分支)或者是demo(测试分支),master分支应该是最稳定的,而dev/demo则是日常开发更新变动最频繁的,其实对于开发者来说,只用管dev/demo就好了,master分支一般都是项目管理者觉得是时候而且足够稳定,才把dev/demo合并到master发布。
还有另外的一些分支,比如你在开发的时候需要开发一个新功能可以另外从dev中checkout一条新分支来开发新的功能,又比如上线到master代码中被发现了bug,也可以从master分支checkout一条hotfix分支来及时修复bug。这些都可以灵活搭配的 ,只要清楚现在主流都是master-dev这两条主要分支就好了

Github工作流(17.9.23更新)
最近又学到了一个工作流,github工作流,这个工作流特点是dev/demo和master永不相交,因为不希望dev/demo的一些期望以外的代码带到master,造成意料以外的状况。那么我的新功能分支又该如何合并到master?直接合并是不行的,毕竟没有经过部署测试过,所以在这个工作流里面你的新功能分支要先merge到dev/demo,等测试到没有问题了,再直接把这条新功能分支merge到master。
你如果习惯了上面的git工作流中的dev/demo测试没问题直接合到master,你会发现新的工作流会不太适应,特别是如果master和dev/demo历史不平行的时候。
当你发现你用github工作流,然后要处理很多conflict,说明你的使用方式存在问题。基于这条工作流的特点,你得把你的要做功能分解到更加细小的更新上,然后尽可能快的完成,提交到测试(合并到dev/demo分支),然后尽可能快地验证,ok就直接merge到master推到线上去,你会感受到整个节奏比以往更加快捷,而且更新粒度会更加小,master会波动更加频繁,所以最好你的部署方式是用户无感的,不然这种master频繁波动会导致频繁部署,而频繁部署会造成频繁的服务中断,用户。解决办法是:要么你就寻找一种平滑过渡的部署方式(docker & docker compose),要么就是还是用回Git工作流那种,一个版本更新一次master好了,即先不断把功能提交到dev/demo,最后统一测试过了,再merge到master,这样也才1-2周中断一次,而不是每天都中断,而githubflow就是持续地提交,部署,提交部署,至少每天一次…

扩展推荐:
1.廖雪峰老师的git基础教程
2.阮一峰老师的git工作流讲解
3.Linus Torvalds on git [Highly Recommended !!! ]

闲话
稍微聊聊为什么选择git作为版本控制工具 [而不是其他的一些CVS,SCM,SVN(Subversion),Merurial etc.]
在程序员世界里面,只要一件事情有同类的工具,这些工具总会有“xxx最好”之争(e.g. PHP是世界上最好的语言),我无意说git是世界上最好的版本控制工具,但是我可以给你几点理由,以下几点理由有些是上网看到说的在理的,有些是个人感悟,你随意参考便可:
1.svn分支代价高;
2.快速开发时候,团队总会遇到conflict,svn提交时候发现其他人提交而且出现conflict,想checkout却发现无法进行,而git用分支结构,每个人走一个分支,conflict出现机会少了,在代码合并时候一次性处理掉conflict,压力不会太大;
3.git是分布式的,每个人都有一个完整的仓库copy,各种commit版本操作切换不需要依赖server,而svn不行;
4.svn下载源码慢[据说几个G文件git需要10min,而svn则需要1h]
5.git鼓励commit,而commit越频繁,后面出现问题的几率小很多,而且出现问题需要承担的担子也会小很多;
6.git makes merge easier!
7.每个工具都有它擅长和不擅长的地方,git也有,它在对付源代码很擅长,但是对付一些大文件(比如影音/高清图片/高品质音频),git甚至会连svn都不如,但是本来git设计就是为了源码的啊…..

16.11.17:这几天用git commit了几个大文件(准确来说是大的二进制文件)到本地分支,然后后面又删除这几个大文件后再commit,最后push的话,发现很大,要push很久,暂停用du -h看看项目大小,发现最大的竟然是.git,稍微算了一下大小和我没有删除的几个大文件之前的大小差不多。原来我虽然已经把项目中删除了那几个大文件,但是.git还帮我保存了一份,这就是为什么git能回滚的原因- -,这真的是呵呵呵了,以后再也不敢commit大文件了,其实主要是Dockerfile要用到的一些软件,我也打包进去了。现在push的话项目太大了,而且容易出现超时失败的问题,我的解决办法是,把本地的.git删除(我不敢reset回滚,因为我在commit时候除了大文件还有一些源代码的修改,回滚的话我修改就没了),然后init一个,再checkout -b一条本地的dev分支,add&commit,最后push,push受限,再pull,发现冲突,解决冲突,再add&commit,最后再push就解决了,所以以后除了源代码,一些依赖的很大的软件最好就不要commit到本地分支了,你push都得有排等.

但是这种办法仅仅适合个人项目,简单粗暴,像公司项目就要慢慢用git gc还有git filter-branch之类一点点清理了,或者如果你只是关心Jenkins自动部署中git拉取代码体积太大的问题,可以看看jenkins的shadow clone

Ref:
1.Removing sensitive data from a repository
2.Jenkins hints for large git repos
3.pro git书里面也有提到git filter-branch7.6 Git 工具 - 重写历史
建议可以看看pro git这本书对git 原理的讲解,我觉得写的很好,它也有线上版本——Pro Git book,理解git原理是你熟悉了一般协作的git命令以后必须要去做的事情~


Docker

作为现在比较火的技术之一,我真不敢说自己能道出其中真理,可是光是用的话,我还是能说说使用感受的。

前言也说了,我用docker并不是因为它多火热,而是因为他帮我解决了几个小问题:首先是系统问题(Linux/OS X/Windows),同样的开发环境,我在linux环境下搭起来非常熟练,不要问我为什么这么熟练,你自己搭多几次就知道了,但是到了windows就不太一样了,操作也好,路径也罢,同样的套路是行不通的,其次就是每搭建一次,我都得从头开始装软件,源码的用源码编译安装,配置环境变量,创建路径等等,第一次你可能新鲜,等你装个两三次就知道有多麻烦,所以能不能就麻烦一次,以后就不麻烦了呢,而且向下能对不同操作系统起到最大程度的屏蔽呢?

16.11.24更新:推荐一篇文章,可以一定程度解决你的困惑,不会涉及太多技术—–为什么能用Docker做那么多事情?

幸好之前有看过docker的一些文章(平时看看各种技术,说不准就那天用上了,手动滑稽:D),docker可以一次配置,随处运行,嗯….貌似很不错,可是刚开始我也是没底的,因为我怕和我的预期有偏差,可是我上网找来找去还是觉得官方的doc做得最适合入门(尽管是英文的,但是作为入门还是比一些中文的要好),其他的一些文章都说的很深奥,搞得我以为如果要用docker我必须把docker原理搞懂才有资格使用docker

Docker是一个daemon,用windows的话说就是一个进程,用过VMware虚拟机的同学,你也可以把docker想象成为一个超小型的虚拟机,然而它并不是虚拟机,它和VMwareWorkStation(还有VirtualBox,KVM,Hyper-V,Xen等)这种系统级虚拟的还是有不同的,docker基于这种轻量级&小开销的特性,可以比较干净地做到运行环境的隔离,而且能在秒级完成启动.

上面都是谷歌拼凑到的,其实docker如果只是用的话也就是一堆命令,欧,还有一个Dockerfile的编写,为了方便你后面好理解docker的使用,我得先说明docker中三个主要的东西:Dockerfile,镜像和容器

Dockerfile
github中项目中一般都会有.gitignore,README.md,有时候还会有个Dockerfile,.gitignore和README.md我们都知道是什么,那么Dockerfile又是什么呢?Dockerfile自然就关联到docker了,它是面向开发者(Dev)的,开发者把需要什么系统,需要装什么软件,需要怎么配置环境等等全部都写进Dockerfile里面,相当于是一个基于docker的全自动生成镜像的一个脚本,至少我是这么理解的。而有个这个Dockerfile,别人只用在这个Dockerfile的目录下执行docker build -t image:tag 就可以由你的Dockerfile生成镜像,是不是很方便?
自从有了Dockerfile,开发者就可以取代一部分原来由运维(Ops)做的部署工作(deployment),也就加强了运维和开发的联系,加快的了工作的效率,其实Dockerfile还不算最高效率,最高的效率是直接移植现在做好的docker镜像,把Dockerfile build中各种网络下载安装,还有编译的时间都省去了,真的做到开箱即用

镜像
镜像是docker的静态,由Dockerfile生成的是镜像而不是容器,你可以通过sudo docker images查看你现在有多少的镜像,docker的镜像是docker移植的关键,当然容器也可以export出来再import回去,但是一般都是save和load docker镜像为主

容器
容器是docker的动态,由镜像run出来的(sudo docker run),容器是docker的精华,你可以理解为容器技术就是应用了集装箱的思维,把所需要的所有东西都放进一个集装箱(container)里面,哪里需要服务,我直接把整个集装箱运过去,然后你进去集装箱享受服务就好了
容器是不会自动保存改动到原来的镜像的,除非你commit容器形成一个快照,但是这个操作其实就是将现在改动过的动态的容器新存为一个静态的镜像,而不是保存为原来的镜像。

[Docker的安装和启动具体教程请参照官网的文档页面的docker engine下的install就足够了,https://docs.docker.com/ ,然后如果你发现sudo service docker start去启动docker服务,输入docker的指令后却没有反应,然后sudo service docker stop + sudo service docker start/sudo service docker restart重启docker 服务却没有反应,请ps -ef|grep docker察看所有docker进程,并且kill掉它们,再sudo service docker start就没有问题了,我试过两次,亲测可行,考虑应该是之前docker的服务没有正确关闭的原因,如果还出问题,那就请自行谷歌.]
同样也是梳理了下命令

#从当前目录下的Dockerfile(命名dockerfile好像也能识别,其他就不行了)建立镜像
sudo docker build -t reponame:tag .
#别忘了最后那个.!sudo docker images #查看镜像
sudo docker ps  #查看当前运行的容器
sudo docker ps -a #查看全部容器(包括运行中的和停止的)sudo docker run -it --name blabla  -p <物理机>:<容器>(e.g. 127.0.0.1:3306:3306)  -v /your/local/path/:/map/path/in/docker/ -v /etc/localtime:/etc/localtime --net =host -d reponame:tag
# 启动容器 
#[-it 是启动交互和伪终端]
#[-p  <IP>:<宿主机端口>:<容器端口>  将宿主机(物理机)映射或者可以理解为绑定,<IP>可以指定,也可以不指定,不指定默认是0.0.0.0,建议还是指定]
#[-v  是挂载本机目录到到docker目录,最好每次都把-v /etc/localtime:/etc/localtime也带上,确保docker 容器内时间和服务器时间一致]
#[-d  是daemonize的意思,就是使容器成为守护进程,后台运作]  
#[--net是设置docker的网络模式,默认不设置的话就是bridge模式,现在设置为和物理机网络绑定的host模式,更多可以看 Docker的4种网络模式(http://www.cnblogs.com/gispathfinder/p/5871043.html)
#[--link 是容器链接]#复习几个特别的IP:
#①127.0.0.1是本地回环地址,代指本机; [对于绑定在127.0.0.1的端口而言,外部无法访问,不对外打开,仅仅对内打开]
#②0.0.0.0 代表所有不清楚的IP,安全性差,也是指本机?;[对于绑定在0.0.0.0的端口而言,外部可以访问]
#③255.255.255.255 用人类的话说:“嘿,这屋子的所有人听着了!”
#④localhost  这个是域名,一般都是127.0.0.1,这种对应关系写在你的/etc/hosts里面sudo docker start/stop/restart/rm  blabla #启动/停止/重启/删除 容器
sudo docker cp blabla:/app/file.txt .  # 把docker里面/app目录下的file.txt文件复制出来到现在所在的目录sudo docker exec -it blabla /bin/bash #在启动的容器blabla中运行/bin/bash
sudo docker exec -it blabla /the/path/of/your/commandsudo docker commit blabla  repo:tag  #提交保存容器到一个新的镜像repo:tagsudo docker rmi  repo:tag #删除镜像#容器的导出和导入
sudo docker export 
sudo docker import #镜像的导出和导入
[文件]
sudo docker save repo:tag > backup.tar
sudo docker load < backup.tar
[dockerhub]
sudo docker login
sudo docker push repo:tag
sudo docker pull repo:tag #常用组合命令
#停止所有docker容器
sudo docker kill $(sudo docker ps -q)
#删除所有docker容器
sudo docker rm $(sudo docker ps -aq)

再来张好图,帮助理解命令:
这里写图片描述

更多关于docker的命令这里有个中文的docker命令大全,如果觉得不够全面,那就官网doc,或者谷歌百度.

最后放一个docker的WebApp应用简易模型
(强烈推荐ProcessOn在线作图)

下图说明:
①首先是两个容器App代表应用容器(以Tomcat为例),而db代表数据库容器(以Mysql为例),并且两个容器通过–link name相连,准确来说是App容器去–link 连接db容器;
②两个容器分别通过-v向下挂载数据卷,App容器挂载物理机的项目代码目录/project(/project和容器分离,使得代码和环境互相更加干净而不会相互影响),而db容器则挂载物理机的数据存放目录/data;
③两个容器都通过-p 和物理机器端口做了映射,App容器的8080端口和物理机的8080端口对应了起来,而同样的db容器的3306端口和物理机的3306端口对应了起来
(容器和物理机端口对应起来,那么你就可以通过物理机上执行mysql -h localhost -P 3306 -u root -p ,然后键入密码登陆你容器内的数据库了,这一点很重要,因为很方便测试和观察结果,让流程更加清晰)
④无论是开发者测试还是最后环境的部署都可以用下面的模型
⑤平时做开发的时候,我都是在docker容器外(即物理机上)编辑代码,当然还有git管理代码,然后在容器内跑代码.

(详细的可以参考这篇博客,特别是注意mysql容器run 的时候要加-e 指定mysql数据库的登陆密码,这个上面说docker命令的时候没有说到)

这里写图片描述

Windows机上的实践[16.11.3更新 ]:
因为Docker是Linux的亲儿子,所以在windows中使用docker并不会有丝滑般的体验- -

这两天就是在公司一台WindowsServer 2008 R2部署,我是用docker toolbox装docker的,一开始不知道这个Windows Server 2008 R2系统是用Vsphere虚拟出来的,然后安装就出错了![Error in driver during machine creation : read tcp 127.0.0.1:65369 ==> 127.0.0.1:65368 wsarecv:An existing connection was forcily closed by the remote host] ,直到现在这个错误不好意思还没有解决,但是是可解决的,因为根据公司运维小哥所言,虚拟机里面弄docker容器所说应当可行,具体的这个错误怎么fix得细致去分析,于是我就切换到另外一台Windows Server 2008 R2部署了: ),到时候回头有空再回来fix (虚拟中的虚拟的问题[KVM中ToolBox]?)

这次的Windows Server 2008 R2系统是物理机器,不是虚拟出来的,但是还是遇到了问题,就是BIOS的VT-x这个intel虚拟化技术没有启动,这个好解决,下班后,重启服务器,在BIOS打开就好了,再装docker,没问题~ git clone 代码?没问题~ docker load我的镜像?没问题~ docker run -it –name blabla -v /your/local/path/:/map/path/in/docker/ reponame:tag 创建容器?这里就有问题了

首先/your/local/path/是我的代码在windows物理机的路径,我想映射到docker内的/map/path/in/docker/ 目录,结果拿到blabla容器的终端后cd到/map/path/in/docker/ 目录下一看啥都没有!
分析问题:问题好像出在了在windows里面docker生成原理上,docker toolbox它是先用oracle的Virtual Box虚拟出一个linux环境,然后再在这个虚拟的linux环境中跑docker daemon,那么docker和windows物理机中间就隔了一层VirtualBox虚拟环境,所以我应该在VirtualBox里面先映射windows物理机的代码路径 /your/local/path/进去虚拟机形成一个/virtualboxpath/,然后再docker run -v挂载数据卷的时候去挂载VitualBox虚拟机中的/vitualboxpath/? ……..有点复杂

解决办法:
简单来说就是:
0.先假设你在windows中docker toolbox已经安装成功了
1. VirtualBox中设置共享文件夹,把你在windows服务器中的代码路径写进去,这里假设是 /your/local/path/,然后共享文件夹起名为localpath
2. 进入Linux虚拟机
mkdir -p /virtualboxpath/
mount -t vboxsf -o uid=1000,git=50 localpath /virtualboxpath/
3. docker run -it –name blabla -v /virtualboxpath/: /map/path/in/docker/ reponame:tag
来源是这篇博客的5.2

更新感悟:还是linux里面才能享受docker丝滑般的体验啊啊啊!

17.2.23更新:
docker中文支持问题
原生的ubuntu镜像,用locale发现都是POSIX,要在Dockerfile写上ENV LANG C.UTF-8才可以,不推荐暂时修改的办法(比如在容器内用export LANG=C.UTF-8),这种办法在你exit出容器就失效了

17.9.23更新:
最近调优的时候学到的:原来并不是什么都适合用docker打包! 数据库(mysql,postgresql,redis,mongodb等)最好不要也放到docker容器里面,因为第一,会让查询隔多了一层docker的容器,查询速度变慢(从docker容器里面拿出数据库,查询至少可以快一倍);第二,数据也不是经常需要重新启动的存在,不像web应用那样有点新功能就要重新部署
Ref:WHY DATABASES ARE NOT FOR CONTAINERS


后记

最近也是在看持续集成(CI)和持续交付还有持续部署的东西(以下简称’三持续’),还有DevOps,其实上面无论是docker还是git这些效率工作的工具,都是’三持续’的概念范围.

时代变化很快,人们越来越避免重复机械工作,或者说重复机械的工作全部交回给机械去做,’三持续’ 就是个中典型的代表之一,本来代码写好了,需要部署(代码依赖解决),测试,测试通过后就是发布,出现bug就通知开发去修复,这些都是重重复复的工作,可是持续集成就可以让这个过程自动化,现在最经典的组合就是jenkins+docker+git+maven+shell完成持续交付和集成,jenkins算是大脑,负责调度任务,docker负责把解决运行环境问题,git负责从代码仓库拉取代码,maven解决java的jar包依赖,shell负责测试和系统巡查等,当然你还可以在这个基础上自己按需求叠加/删减和打包,比如我现在就是只是用到docker+git+pip(因为是python程序,所以用pip),由于项目性质,还用不到jenkins,所以没有部署,后期需要部署也是很快的.

至于DevOps,有人说是一种文化,也有人说是一个职位,需要有相应的技能,我觉得DevOps是开发和运维从分家以后重新紧密联合的象征,其实讲真,所谓程序员不过是用计算机,用1/0去解决问题的一群人,不要把自己分的太清楚,说自己是开发,自己是前端或者后端,自己是搞数据开发什么的,能解决问题才是我们这个职业的终极目的,也是工程的意义,去应用计算机科学去解决现实的问题,如果没有后端,前端也得去写后端逻辑,如果没有运维,开发得学会自己去部署,分工只是为了工作高效,可是分工的前提是大家都清楚并且高效地交付,如果没有这一点,又何必对身份对语言太较真,解决问题才是王道,而狭义上来讨论DevOps,一个就是Dev向Ops靠拢做了一些部署的工作,不仅仅提交了代码,把环境也提交了(docker),解决了“我本地可以,提交部署就不行,或者其他地方就不行”的问题;另外一个就是Ops向Dev靠拢,因为我本来不是Ops,所以我也不太清楚怎么个靠拢法,这里就不举例了,如果朋友有相关经验的,欢迎下方留言

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

相关文章

  1. vnc远程连接ubuntu,不能错过的vnc远程连接ubuntu教程

    Ubuntu Linux是由南非人马克沙特尔沃思(Mark Shuttleworth)创办的基于Debian Linux的操作系统,Ubuntu几乎包含了所有常用的应用软件:文字处理、电子邮件、软件开发工具和Web服务等。用户下载、使用、分享Ubuntu系统,以及获得技术支持与服务,无需支付任何许可费用。那如何实现…...

    2024/4/3 6:42:49
  2. 自动化测试该学 Python 2 还是 Python 3???

    该学 Python 2 还是 Python 3题图:from Instagram在 Python 3 出现之前,Python 在我眼里一直是一位稳重扎实的大叔,资历深厚,语法简单,功能强大,兼顾面向对象和函数式编程,库包丰富程度让其他语言转过来的程序员瞠目结舌并喟叹:人生苦短,要用 Python 啊……这种情况一…...

    2024/4/3 4:21:52
  3. 关于VMware使用过程中的各种坑解决(一)

    莫名其妙出现的问题: 1.进入VMware,选择某个虚拟机单击打开,然而在一直停留在转圈的界面 解决方案—可能是什么地方文件出错(应该是上次强制关机导致的),直接卸载整个 VMware 软件 2.在卸载完成后,删除 installation 中的之前配置的虚拟机信息的文件夹,发现提示“操作无…...

    2024/4/3 4:00:33
  4. 2021年校招,最值得加入的互联网公司有哪些?

    本文将从以下几个维度对值得加入的互联网公司进行划分:市值/估值 领域 城市市值/估值可以大致显示出一个公司的整体实力。领域可以让你直接筛选出自己感兴趣领域的公司。而城市则是方便你就近选择公司。 如果你对某个模块感兴趣,可以直接跳到相应的模块寻找你想要的信息。 1.…...

    2024/4/3 5:54:41
  5. ASP.NET Core开发时部署到IIS上出现HTTP Error 502.5 - Process Failure的解决方案

    ASP.NET Core开发时部署到IIS上出现HTTP Error 502.5 - Process Failure的解决方案 在IIS上发现其它项目可以部署上,就只有最近的这个打包的项目不行。说明问题是在项目打包上,后来在外网上查找到一个修改方法可行。 将部署模式改为 独立 ,目标运行时改为 win-64...

    2024/4/16 7:21:36
  6. 10 | 小程序之常用组件

    本章重点讲解小程序中常用的布局组件view,text,rich-text,button,image,navigator,icon,swiper,radio,checkbox 参考 view 代替原来的 div 标签 <view>123</view>text⽂本标签 只能嵌套text ⻓按⽂字可以复制(只有该标签有这个功能) 可以对空格回⻋进⾏…...

    2024/4/26 0:04:28
  7. Android APP内存优化

    本页面介绍了如何主动减少应用程序中的内存使用量。 有关Android操作系统如何管理内存的信息,请参阅Android内存管理概述 本篇文章主要介绍 Android 开发中的部分知识点,通过阅读本篇文章,您将收获以下内容: 监视可用内存和内存使用情况 为响应事件释放内存 分析检查你的app…...

    2024/4/7 9:38:52
  8. 《30天自制操作系统》第3天

    第3天 导入32位模式并导入C语言1.制作真正的IPL本次修改的内容为:; 程序主体 entry:MOV AX, 0 ; 初始化寄存器MOV SS, AXMOV SP, 0x7c00MOV DS, AX ; 读取磁盘MOV AX, 0x0820MOV ES, AXMOV CH, 0 ; 柱面0MOV DH, 0 ; 磁头0MOV CL, 2 …...

    2024/4/3 6:18:25
  9. 解决ios13版本echarts的tooltip在页面滚动时出现白色线条问题

    在做开发过程中,发现在ios手机上滑动时,echarts的tooltip会放置在柱子的下层并出现白条,刚开始以为是层级问题,通过给tooltip添加层级进行解决,发现设置层级并不能解决该问题,最后查看api发现可通过设置属性进行实现,解决方案如下:设置tooltip的position,即重置toolti…...

    2024/4/3 3:22:09
  10. 模拟+贪心

    零件加工任务的安排一 Description 有个国有中型企业,接到一批需要加工零件的订单,员工们非常高兴,可是高兴之后却发现问题了,原来这家企业能够加工这批零件的机床有限,如果仅仅为了这批加工任务而新添机床的话,那么既不合算也不必要,因为加工完这批零件后很可能这些机床…...

    2024/4/17 22:27:14
  11. 《alios things开发实战系列》第二篇:文件系统(二):FatFS文件系统

    不想去成为一个伟大的程序员,只想成为一个具有良好习惯的优秀程序员。一、什么是FATFSFatFs是一个通用的文件系统(FAT/exFAT)模块,用于在小型嵌入式系统中实现FAT文件系统。其特点如下:(1)DOS/Windows兼容的FAT/exFAT文件系统(2)平台独立性,容易使用(3)程序代码量少,…...

    2024/4/3 1:54:52
  12. python爬虫解析数据时:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

    最近在爬取每个网站的数据,出现:json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)错误,具体报错如下:我知道原因是json编码错误,我要编码的变量是html变量,代码如下(打印的部分代码已加粗): #coding=utf8 import requests import time from qu…...

    2024/4/3 5:39:38
  13. Git极简入门

    从远程仓库克隆文件进自己的硬盘:windows:(使用git bash) 1. cd ~./.ssh 第一次会提示无这个文件夹 2. ssh-keygen -t rsa -C "youremail@example.com" 会让你输入key文件名字,随便输入, 第二次,第三次输入password 的时候直接回车可免密。你需要把邮件地址…...

    2024/4/3 4:06:25
  14. Nginx 流控搞不好,背锅跑路少不了

    前几天,以前一个老同事在微信上和我吐槽,一次周未休息,突然收到公司服务器告警,有一台服务器挂掉了,导致影响一部分公司业务的运行,事后查看发现原来是前端Nginx流控配置的不够科学,不得不背上一锅,影响了这个月的KPI考核和当年中的加薪指标。可见这Nginx流控的配置还是…...

    2024/4/16 3:05:38
  15. 顶尖的复音合成器 – Reveal Sound Spire v1.1.17 WiN

    Reveal Sound Spire v1.1.17-win | 165M Reveal Sound的Spire是一款软件复音合成器,结合了软件和硬件合成器的最佳机会。强大的声音调音模块,漂亮的音乐界面和灵活的架构相结合,为这款多功能合成器提供了无与伦比的可用性。 聆听audoi演示和perusinq的礼物,您可能会倾向于将…...

    2024/4/3 7:52:26
  16. 众多顶级交易所纷纷看好Filecoin,这样的项目你还犹豫什么?

    Filecoin主网虽未上线,但Filecoin的期货却早在2017就已上线。近期,随着二阶段测试网的稳步推进及主网上线时间临近,激发了Filecoin期货价的一波小行情。除了期货客观的涨势外,临近上线交易所也在暗自布局。今天至联云就带大家盘点下主网上线后有哪些交易所将支持FIL交易,又…...

    2024/4/3 3:00:17
  17. 至联云给你分享已经上线Filecoin期货的交易所

    1.gate.io gate.io 大门国际站创立于2013年,国内比较靠谱的交易所之一。创办至今,已为来自全球超过130个国家的数百万用户,提供了近百种优质区块链资产品类的交易和投资服务。 它拥有超级防卫SSL链接,离线比特币钱包技术,即时区块链资产存取功能,多币种地址共享技术,多重…...

    2024/4/3 2:35:23
  18. 如何选择自动化测试和软件开发

    软件测试和软件开发是产品研发中同样重要的两个板块,无论在哪个领域发展都可以给你实现价值的空间。而且从目前的行业发展情况来看,测试人员必须要懂一些开发知识,而开发人员也必须要会一些基本的测试,并且在软件测试领域中的“测试开发“岗已经变得越来越重要,所以它们之…...

    2024/4/3 7:00:06
  19. 合约交易所使用手册

    简介交易所后台管理系统,主要包括三大功能。后台系统的管理模块,交易所系统的管理模块和交易所业务的管理模块。主要的功能划分见下图后台系统管理模块主要包括后台管理系统,主要有团队部门管理,团队的角色岗位管理,团队人员权限管理。已经系统字典管理和相关得到参数,还…...

    2024/4/3 5:32:45
  20. selenium配置chrome浏览器的选项

    在使用selenium浏览器渲染技术,爬取网站信息时,默认情况下就是一个普通的纯净的chrome浏览器,而我们平时在使用浏览器时,经常就添加一些插件,扩展,代理之类的应用。相对应的,当我们用chrome浏览器爬取网站时,可能需要对这个chrome做一些特殊的配置,以满足爬虫的行为。…...

    2024/4/3 15:59:03

最新文章

  1. 以生命健康为中心的物联网旅居养老运营平台

    随着科技的飞速发展和人口老龄化的日益加剧&#xff0c;养老问题逐渐成为社会关注的焦点。传统的养老模式已经难以满足现代老年人的多元化需求&#xff0c;因此&#xff0c;构建一个以生命健康为中心的物联网旅居养老运营平台显得尤为重要。 以生命健康为中心的物联网旅居养老运…...

    2024/4/27 22:27:24
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. JSON格式转换

    文章目录 1. JSON 格式2. 细节 1. JSON 格式 实体类格式&#xff1a; public class Student {public string name {get; set;}public int age {get; set;} } public class Classs {public string teacher {get; set;}public List<Student> students {get; set;} }JSON格…...

    2024/4/18 22:12:03
  4. 2024年04月IDE流行度最新排名

    点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年04月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…...

    2024/4/26 19:30:12
  5. ElasticSearch的DSL查询

    ElasticSearch的DSL查询 准备工作 创建测试方法&#xff0c;初始化测试结构。 import org.apache.http.HttpHost; import org.apache.lucene.search.TotalHits; import org.elasticsearch.action.search.SearchRequest; import org.elasticsearch.action.search.SearchRespo…...

    2024/4/25 9:12:29
  6. 416. 分割等和子集问题(动态规划)

    题目 题解 class Solution:def canPartition(self, nums: List[int]) -> bool:# badcaseif not nums:return True# 不能被2整除if sum(nums) % 2 ! 0:return False# 状态定义&#xff1a;dp[i][j]表示当背包容量为j&#xff0c;用前i个物品是否正好可以将背包填满&#xff…...

    2024/4/27 1:53:53
  7. 【Java】ExcelWriter自适应宽度工具类(支持中文)

    工具类 import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet;/*** Excel工具类** author xiaoming* date 2023/11/17 10:40*/ public class ExcelUti…...

    2024/4/27 3:39:11
  8. Spring cloud负载均衡@LoadBalanced LoadBalancerClient

    LoadBalance vs Ribbon 由于Spring cloud2020之后移除了Ribbon&#xff0c;直接使用Spring Cloud LoadBalancer作为客户端负载均衡组件&#xff0c;我们讨论Spring负载均衡以Spring Cloud2020之后版本为主&#xff0c;学习Spring Cloud LoadBalance&#xff0c;暂不讨论Ribbon…...

    2024/4/27 12:24:35
  9. TSINGSEE青犀AI智能分析+视频监控工业园区周界安全防范方案

    一、背景需求分析 在工业产业园、化工园或生产制造园区中&#xff0c;周界防范意义重大&#xff0c;对园区的安全起到重要的作用。常规的安防方式是采用人员巡查&#xff0c;人力投入成本大而且效率低。周界一旦被破坏或入侵&#xff0c;会影响园区人员和资产安全&#xff0c;…...

    2024/4/27 12:24:46
  10. VB.net WebBrowser网页元素抓取分析方法

    在用WebBrowser编程实现网页操作自动化时&#xff0c;常要分析网页Html&#xff0c;例如网页在加载数据时&#xff0c;常会显示“系统处理中&#xff0c;请稍候..”&#xff0c;我们需要在数据加载完成后才能继续下一步操作&#xff0c;如何抓取这个信息的网页html元素变化&…...

    2024/4/27 3:39:08
  11. 【Objective-C】Objective-C汇总

    方法定义 参考&#xff1a;https://www.yiibai.com/objective_c/objective_c_functions.html Objective-C编程语言中方法定义的一般形式如下 - (return_type) method_name:( argumentType1 )argumentName1 joiningArgument2:( argumentType2 )argumentName2 ... joiningArgu…...

    2024/4/27 3:39:07
  12. 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】

    &#x1f468;‍&#x1f4bb;博客主页&#xff1a;花无缺 欢迎 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! 本文由 花无缺 原创 收录于专栏 【洛谷算法题】 文章目录 【洛谷算法题】P5713-洛谷团队系统【入门2分支结构】&#x1f30f;题目描述&#x1f30f;输入格…...

    2024/4/27 3:39:07
  13. 【ES6.0】- 扩展运算符(...)

    【ES6.0】- 扩展运算符... 文章目录 【ES6.0】- 扩展运算符...一、概述二、拷贝数组对象三、合并操作四、参数传递五、数组去重六、字符串转字符数组七、NodeList转数组八、解构变量九、打印日志十、总结 一、概述 **扩展运算符(...)**允许一个表达式在期望多个参数&#xff0…...

    2024/4/27 12:44:49
  14. 摩根看好的前智能硬件头部品牌双11交易数据极度异常!——是模式创新还是饮鸩止渴?

    文 | 螳螂观察 作者 | 李燃 双11狂欢已落下帷幕&#xff0c;各大品牌纷纷晒出优异的成绩单&#xff0c;摩根士丹利投资的智能硬件头部品牌凯迪仕也不例外。然而有爆料称&#xff0c;在自媒体平台发布霸榜各大榜单喜讯的凯迪仕智能锁&#xff0c;多个平台数据都表现出极度异常…...

    2024/4/27 21:08:20
  15. Go语言常用命令详解(二)

    文章目录 前言常用命令go bug示例参数说明 go doc示例参数说明 go env示例 go fix示例 go fmt示例 go generate示例 总结写在最后 前言 接着上一篇继续介绍Go语言的常用命令 常用命令 以下是一些常用的Go命令&#xff0c;这些命令可以帮助您在Go开发中进行编译、测试、运行和…...

    2024/4/26 22:35:59
  16. 用欧拉路径判断图同构推出reverse合法性:1116T4

    http://cplusoj.com/d/senior/p/SS231116D 假设我们要把 a a a 变成 b b b&#xff0c;我们在 a i a_i ai​ 和 a i 1 a_{i1} ai1​ 之间连边&#xff0c; b b b 同理&#xff0c;则 a a a 能变成 b b b 的充要条件是两图 A , B A,B A,B 同构。 必要性显然&#xff0…...

    2024/4/27 18:40:35
  17. 【NGINX--1】基础知识

    1、在 Debian/Ubuntu 上安装 NGINX 在 Debian 或 Ubuntu 机器上安装 NGINX 开源版。 更新已配置源的软件包信息&#xff0c;并安装一些有助于配置官方 NGINX 软件包仓库的软件包&#xff1a; apt-get update apt install -y curl gnupg2 ca-certificates lsb-release debian-…...

    2024/4/27 3:39:03
  18. Hive默认分割符、存储格式与数据压缩

    目录 1、Hive默认分割符2、Hive存储格式3、Hive数据压缩 1、Hive默认分割符 Hive创建表时指定的行受限&#xff08;ROW FORMAT&#xff09;配置标准HQL为&#xff1a; ... ROW FORMAT DELIMITED FIELDS TERMINATED BY \u0001 COLLECTION ITEMS TERMINATED BY , MAP KEYS TERMI…...

    2024/4/27 13:52:15
  19. 【论文阅读】MAG:一种用于航天器遥测数据中有效异常检测的新方法

    文章目录 摘要1 引言2 问题描述3 拟议框架4 所提出方法的细节A.数据预处理B.变量相关分析C.MAG模型D.异常分数 5 实验A.数据集和性能指标B.实验设置与平台C.结果和比较 6 结论 摘要 异常检测是保证航天器稳定性的关键。在航天器运行过程中&#xff0c;传感器和控制器产生大量周…...

    2024/4/27 13:38:13
  20. --max-old-space-size=8192报错

    vue项目运行时&#xff0c;如果经常运行慢&#xff0c;崩溃停止服务&#xff0c;报如下错误 FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory 因为在 Node 中&#xff0c;通过JavaScript使用内存时只能使用部分内存&#xff08;64位系统&…...

    2024/4/27 1:03:20
  21. 基于深度学习的恶意软件检测

    恶意软件是指恶意软件犯罪者用来感染个人计算机或整个组织的网络的软件。 它利用目标系统漏洞&#xff0c;例如可以被劫持的合法软件&#xff08;例如浏览器或 Web 应用程序插件&#xff09;中的错误。 恶意软件渗透可能会造成灾难性的后果&#xff0c;包括数据被盗、勒索或网…...

    2024/4/27 3:22:12
  22. JS原型对象prototype

    让我简单的为大家介绍一下原型对象prototype吧&#xff01; 使用原型实现方法共享 1.构造函数通过原型分配的函数是所有对象所 共享的。 2.JavaScript 规定&#xff0c;每一个构造函数都有一个 prototype 属性&#xff0c;指向另一个对象&#xff0c;所以我们也称为原型对象…...

    2024/4/26 21:29:56
  23. C++中只能有一个实例的单例类

    C中只能有一个实例的单例类 前面讨论的 President 类很不错&#xff0c;但存在一个缺陷&#xff1a;无法禁止通过实例化多个对象来创建多名总统&#xff1a; President One, Two, Three; 由于复制构造函数是私有的&#xff0c;其中每个对象都是不可复制的&#xff0c;但您的目…...

    2024/4/27 3:39:00
  24. python django 小程序图书借阅源码

    开发工具&#xff1a; PyCharm&#xff0c;mysql5.7&#xff0c;微信开发者工具 技术说明&#xff1a; python django html 小程序 功能介绍&#xff1a; 用户端&#xff1a; 登录注册&#xff08;含授权登录&#xff09; 首页显示搜索图书&#xff0c;轮播图&#xff0…...

    2024/4/26 23:53:24
  25. 电子学会C/C++编程等级考试2022年03月(一级)真题解析

    C/C++等级考试(1~8级)全部真题・点这里 第1题:双精度浮点数的输入输出 输入一个双精度浮点数,保留8位小数,输出这个浮点数。 时间限制:1000 内存限制:65536输入 只有一行,一个双精度浮点数。输出 一行,保留8位小数的浮点数。样例输入 3.1415926535798932样例输出 3.1…...

    2024/4/27 20:28:35
  26. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  27. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  28. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  29. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  30. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  31. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  32. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  33. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  34. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  35. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  36. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  37. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  38. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  39. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  40. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  41. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  42. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  43. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  44. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  45. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57