docker commit
docker如何将运行中的容器保存为docker镜像
1 | $ docker commit <container id> <repo-name>:<tag> |
1 | $ docker create -it ubuntu:lastest |
is equal to
1 | $ docker run -it ubuntu:lastest |
1 | $ docker stop ubuntu:lastest |
1 | $ docker rm contaier_id |
1 | $ docker export --output=test.tar contaier_id |
1 | $ docker import test.tar - username/ubuntu:v1.0 |
Docker 快速删除所有容器
1 | docker ps |
查看所有容器
1 | $ docker ps -a |
进入容器
其中字符串为容器ID:
1 | $ docker exec -it d27bd3008ad9 /bin/bash |
停用全部运行中的容器:
1 | $ docker stop $(docker ps -q) |
删除全部容器:
1 | $ docker rm $(docker ps -aq) |
一条命令实现停用并删除容器:
1 | $ docker stop $(docker ps -q) & docker rm $(docker ps -aq) |
杀死所有正在运行的容器
1 | docker kill $(docker ps -a -q) |
删除所有已经停止的容器
1 | docker rm $(docker ps -a -q) |
删除所有未打 dangling 标签的镜像
1 | docker rmi $(docker images -q -f dangling=true) |
通过镜像的id来删除指定镜像
1 | docker rmi <image id> |
删除所有镜像
1 | docker rmi $(docker images -q) |
1 | docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop |
1 | $ docker rmi shaoguangleo/test:tag |
解释如何计算和编程的内容并不属于本书范围,读者可以自行查阅读有关书籍。然而能写出好的程序并非一日之功,这是一门需要循序渐进的艺术,只有通过实践锻炼才能写出既短又好的程序。
超出0~360°范围的角度经常出现在天文计算中,在例24.a中我们可以看到1992年10月13日太阳的平经度角是-2318.19281°。快速运动的天体,比如月球、木星的伽利略卫星或者行星的自转中甚至还会出现更大的角度(可以看例41.a中第9步中的角w的计算实例)。
把角度转化到0~360°范围之内有时是很必要的,因为一些计算器或者程序设计语言对于大的角度的三角函数计算结果是不准确的。例如,你可以试试计算3600030°的正弦。正确结果应该为0.5。
译者注:事实上,对于现代计算机而言,上一行所述的问题基本不存在。不过,很多情况下,我们仍需把一个角度转换到0到360度。
计算机不能直接计算出以度分秒方式表示的角度的三角函数。在使用三角函数之前,应该把角度转换成以度为单位的十进制小数形式。因此,在计算23°26′49″的余弦时要先把角度转化成为23.44694444°,然后再用余弦函数计算。
遗憾的是,几乎所有的电脑都是用弧度而不是度来计算,所以还应把度转为弧度单位,通常是一件麻烦的事情。
赤经通常用时、分、秒方式来表示。如果需要计算赤经的三角函数,需要把赤经转换成用度为单位来表示(然后再转换成以弧度为单位),请注意1h对应于15°。
例1.a ——计算 $\alpha$ = 9h 14m 55 s8的tan$\alpha$。我们首先把$\alpha$转化成以时为单位的十进制小数:9h 14m 55 s8=9+14/60+55.8/3600=9.248833333时然后再乘以15。$\alpha$=138.73250°然后在除以180/$\pi$得到以弧度为单位的57.295779513…。然后得出 tan$\alpha$=-0.877517
当已知一个角的正弦、余弦或正切值时,可以通过三角函数对应的反函数——如正弦对应的反正弦(arcsin),余弦对应的反余弦(arccos),正切对应的反正切(arctan)来得出角的大小。但是请注意在一些计算机上和一些程序设计语言中,尤其是大部分早期的微型计算机中都没有提供反正弦和反余弦函数。
反三角函数并不是单值函数,例如,如果sinα=0.5,那么$\alpha$可以是30°、150°、390°等等。基于这个原因,计算机中的反三角函数的取值范围只有0~360°的一半:反正弦和反正切的取值范围是在-90~+90°,而反余弦的取值范围则是0~180°。
例如,计算cos147°,结果是-0.8387,用反余弦函数计算-0.8387的结果正是147°,但是,cos213°的结果也是-0.8387,而我们用反余弦函数计算的结果则是147°。
因此当使用反正弦、反余弦和反正切的时候,必要时需要通过一个或多个值来弄清楚它代表的角度,消除结果的不确定性。另外,每个问题都要单独检查。
例如,公式(12.4)和(24.7)给出了天体赤纬的正弦。因为赤纬的取值范围在-90~+90°,所以反正弦函数可以在正确的象限算出赤纬,因此这里就不必进行检验。
公式(16.1)给出了角度差的余弦也是同样情况,实际上角度差的取值范围在0~180°,这正与反余弦函数的取值范围一致。
但是请看从赤经($\alpha$)赤纬($\beta$)转换到黄经($\beta$)黄纬($\lambda$)的公式:
$$
cosβsinλ=sinδsinε+cosδcosεsin$\alpha$
$$
$$
cosβcosλ=cosδcos$\alpha$
$$
令第一个方程为A,第二个方程为B,用A式除以B式,我们可以得到tanλ=A/B,则对A/B使用反正切函数可以求出角λ,该角的取值在-90~+90°范围内,角度结果可能会相差±180°(由于正切函数的周期为180°)。确定角所在的正确象限可以通过如下测试:如果B<0,求得的结果加上180°。不过一些程序设计语言(如C语言、javascript、VB)还提供了重要的第二个反正切函数ATAN2,这个函数有两个参数A和B,这个函数会求出正确的结果并转化到正确的象限。例如,设A=-0.45,B=-0.72,使用ATAN(A/B)=32°,而使用ATAN2(A,B)可以求得正确结果是-148°,或+212°。
以度分秒方式表示的角度可以用三个独立的参数(D,M,S)输入。例如,21°44′07″可以用三个数字21,44,07输入,然后程序中使用H=D+M/60+S/3600转化成为以度为单位。
我们还应该仔细考虑负的角度的情况,比如角度是-13°47′22″,代表的是-13°,-47′和-22″,这样的话D=-13,M=-47,S=-22。所以的参数都应该有同样的正负号。
对-13°47′22″可能的错误理解是输入-13°,+47′和+22″,这样输入的结果实际上是-12°12′38″。
一些数值需要通过含有时间的幂(如T,T2,T3,……)的公式来计算,应当注意的是这样的多项式只是在T的值不是太大的情况下才是合理的,比如公式:
e=0.04629590-0.000027337T+0.0000000790T2 (1.1)
给出了天王星的轨道偏心率;T是以自2000年起算的儒略世纪数(每世纪36525天),显然该式只有在公元2000年前后,比如T在+30~-30范围内有效。如果|T|>30,这个公式就不再有效,比如T= -3305.8,公式的结果将是e=1。一个认为“计算机从不犯错的”人可能会认为T= -3305.8时,天王星轨道是抛物线,进而认为天王星起源于太阳系之外—这显然是伪科学。
实际上尽管行星轨道的偏心率e在超过了定义的时间上限后变化并不是有规律的,但是时间在很少的几个千年纪之内,偏心率是可以用像(1.1)那样的多项式精确表示的。
进一步的观察我们可以发现公式中有周期项(公式中的正弦和余弦项,在几个世纪内变化很小)和长期项的不同(如公式中含有T,T2,T3,……的项,它随着时间的增加快速增大)。当T很小的时候,T2项会变得很小,但是当|T|值很大的时候这一项会变得非常重要。因此当|T|值比较大的时候考虑含有T2等项的周期项是没有意义的,在计算中也不用考虑。
假设我们计算这样一个多项式:Y=A+BX+CX2+DX3+EX4
其中A,B,C,D,E是常数,X是变量。现在可以在计算机中一项项直接相加来求出每一个给定X的多项式的值。然而可以采用一些聪明的方法来避免计算X的幂,比如:
Y=A+X(B+X(C+X(D+EX)))
在这个式子中幂计算都消失了,采用了乘积来替代幂的计算。这种多项式的表示方法被称为Horner方法,这种方法因为避免了幂计算,所以特别适合自动计算。
不用幂计算,而采用计算A*A的方法来计算A的平方也是一个聪明的办法,我们使用这样一段程序在HP-85计算机上计算前200个正整数的平方:
FOR I=1 TO 200
K=I^2
NEXT I
完成计算需要费时10.75秒。但是,当我们把第二行换成K=I*I的话,完成整个计算只需费时0.96秒!
把程序写尽可能短小通常不仅是代表着艺术,而且在计算机内存受限情况下也是必须的。即使对于简单的计算,也存在一些把程序缩短的技巧。假设我们要计算下面多项相加的和S:
1 | S=0.0003233sin(2.6782+15.54204T)+0.0000984sin(2.6351+79.62980T)+0.0000721sin(1.5905+77.55226T)+0.0000198sin(3.2588+21.32993T)+…… |
首先因为正弦的系数都是很小的数,可以通过采用以一个常数作为计数单位(在这个例子中是10-7)来避免输入那么多的数字,比如我们用3233来代替0.0003233。因此在计算了所有项之后,我们再把和除以10-7。
其次,在程序中声明全部数值项也是不明智的。相反,我们应该采用所谓的循环来完成计算。上面A*sin(B+CT)的每一项的A,B,C值应作为程序的数据部分。假如有50项,程序可以这样写:
1 | Double s=0 |
译者注:如果数据量较大,应考虑将数据与程序合理的分离;数据可以放在程序中的“数组”之中,如果数据量多达几万行或更多,多数情况下我们会考虑放在外部文件之中。
在可能出现“不可能”出现的情况下,需要进行安全性测试。例如,在迭代到特定数量之后计算停止却没有达到要求的精度。
或者考虑月掩星的情况,在程序中根据当地的环境来计算被掩恒星消失和再次出现的时间。然而,可能在给定的地点根本看不到这颗恒星被掩。在这种情况下,初切时间和终切时间根本就不存在,试着计算这两个时间会碰到计算一个负数的平方根的情况。为了避免出现这个问题,程序应该首先计算这颗恒星到月面中心的最短距离(从给定的地点观看),而且当且仅当这个距离小于月面半径的情况下才计算初切和终切时间。
在程序写完之后必须要检查被称为Bug的错误。定位和修改程序中Bug的过程被称为调试。在无论使用什么程序设计语言编程,可能会有如下几种类型的Bug:
当然,一个程序不仅要在“语法”正确,还要给出正确的结果。要用已知的方法检查你的程序,比如,如果你写了一个程序计算行星位置或者月相的时间,应该把计算结果和天文年历上给出的数值进行比较。
要在一些“特殊”情况下检查你的程序。比如,你的程序在赤纬为负值的情况下计算结果是否仍然正确?或者,在赤纬在0°和-1°之间是否正确?或者,观测者的纬度正好为0时是否正确?或者,时间为负值时是否正确?
参考徐剑伟翻译的天文算法,
1 | $ docker pull NAME[:TAG] |
We should specificate the tag when deploy in real task
1 | $ docker images |
1 | $ docker search imagename |
This will list official image by default.
1 | $ docker rmi imagename |
提交更改并保存在contaier为一个镜像,假定为mynewimage
When you modify something in a container, you will get a new container id, remember it to create a new image.
1 | $ docker commit -m message -a author CONTAINER_ID mynewimage:TAG |
you can using a template to import an image.
保存该镜像到一个tar文件
1 | $ docker save mynewimage > /tmp/mynewimage.tar |
然后拷贝到另外一台主机,使用下述命令进行载入:
1 | $ docker load < /tmp/mynewimage |
1 | $ docker tag test:lastest username/test:lastest |
1 | $ docker pull NAME[:TAG] |
We should specificate the tag when deploy in real task
1 | $ docker images |
1 | $ docker search imagename |
This will list official image by default.
1 | $ docker rmi imagename |
提交更改并保存在contaier为一个镜像,假定为mynewimage
When you modify something in a container, you will get a new container id, remember it to create a new image.
1 | $ docker commit -m message -a author CONTAINER_ID mynewimage:TAG |
you can using a template to import an image.
保存该镜像到一个tar文件
1 | $ docker save mynewimage > /tmp/mynewimage.tar |
然后拷贝到另外一台主机,使用下述命令进行载入:
1 | $ docker load < /tmp/mynewimage |
1 | $ docker tag test:lastest username/test:lastest |
由于docker daemon需要绑定到主机的Unix socket而不是普通的TCP端口,而Unix socket的属主为root用户,所以其他用户只有在命令前添加sudo选项才能执行相关操作。
如果不想每次使用docker命令的时候还要额外的敲一下sudo,可以按照下面的方法配置一下。
创建一个docker组
1 | $ sudo groupadd docker |
添加当前用户到docker组
1 | $ sudo usermod -aG docker $USER |
登出,重新登录shell
验证docker命令是否可以运行
1 | $ docker run hello-world |
Homebrew号称macOS缺失的软件包管理器。
安装方法为:
1 | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
详情见 Brew。
MacPorts是开源社区发起的一项方便开发者在Shell下进行软件的编译、安装和升级等操作的开源项目,旨在方便Mac环境下的开发者。更多的关于MacPorts的信息,你可以登陆官网查看MacPorts。
通过drag,drop来卸载软件,与安装一样简单,参考软件 Zapper。
AppZapper. Simply drag one or more apps onto AppZapper. Then, watch as it finds the extra files and lets you delete them with on click.
终端除了系统自带的terminal比较好用,还有一个iTerm基本属于神器,推荐。
用过Linux基本知道邮件就可以打开终端,这个在MacOSX中可以通过go2shell来弥补。
下载网址 https://zipzapmac.com/Go2Shell,下载后安装即可,可以通过下面的命令来打开配置窗口。
1 | $ open -a Go2Shell --args config |
首选MacTex,当然TexShop也特别好,关于详细的讨论参考 https://discussions.apple.com/message/18653515#18653515
极其强悍的效率工具,建议使用。
支持文件搜索、网页收拾、收藏夹搜索、计算器、联系人搜索、剪贴板搜索等。
Alfred is an award-winning app for Mac OS X which boosts your efficiency with hotkeys, keywords, text expansion and more. Search your Mac and the web, and be more productive with custom actions to control your Mac.
不得不说,sublime是一个神器,并且支持N多扩展和插件。
其中Package Control包管理插件就特别赞。
支持添加/删除/禁用/查找插件的功能。
安装方法参考 https://packagecontrol.io/installation
如果是在默认shell下,
1 | sudo ln -s "/Applications/Sublime\ Text.app/Contents/SharedSupport/bin/subl" /usr/bin/subl |
使用zsh的可以使用以下命令
1 | alias subl="'/Applications/Sublime Text.app/Contents/SharedSupport/bin/subl'" |
Linux的CPU设备查看器。lscpu
命令用来显示cpu的相关信息。lscpu
从sysfs和/proc/cpuinfo收集cpu体系结构信息,命令的输出比较易读 。
命令输出的信息包含cpu数量,线程,核数,socket和Nom-Uniform Memeor Access(NUMA),缓存等等。
官方定义为:
lscpu
- display information about the CPU architecture
参数基本用处不大,默认即可,部分参数可以查看offline和online的设备信息。
1 | $ lscpu |
其中几个概念需要理解清楚,基本比较重要的都有了备注。
其中第一个为CPU(s),这个值为Socket * Core * Thread得出,也就是逻辑的CPU个数。
1 | CPU(s): 64 #逻辑CPU数 |
而其他几个概念为: