成都网站建设公司有哪些,网站续费后为何还不能用,百度论坛发帖,网站建设的重要性 学校图片来源#xff1a;Unsplash作者介绍ElNinoT文章来源Java架构沉思录原文链接www.cnblogs.com/elnino/p/3899136.html如需转载#xff0c;请联系原作者授权1获取最近运行容器的id 这是我们经常会用到的一个操作#xff0c;按照官方示例#xff0c;你可以这样做#xff08;… 图片来源Unsplash作者介绍ElNinoT文章来源 Java架构沉思录原文链接 www.cnblogs.com/elnino/p/3899136.html如需转载请联系原作者授权1获取最近运行容器的id 这是我们经常会用到的一个操作按照官方示例你可以这样做环境ubuntu$ ID$(docker run ubuntu echo hello world) hello world $ docker commit $ID helloworld fd08a884dc79这种方式在编写脚本的时候很有用比如你想在脚本中批量获取id然后进一步操作。但是这种方式要求你必须给ID赋值如果是直接敲命令这样做就不太方便了。 这时你可以换一种方式$ alias dl’docker ps -l -q’
$ docker run ubuntu echo hello world
hello world
$ dl
1904cf045887
$ docker commit dl helloworld
fd08a884dc79docker ps -l -q命令将返回最近运行的容器的id通过设置别名aliasdl命令就是获取最近容器的id。这样就无需再输入冗长的docker ps -l -q命令了。通过两个斜引号“可以获取dl命令的值也就是最近运行的容器的id。2尽量在Dockerfile中指定要安装的软件而不用Docker容器的shell直接安装软件。 说实话我有时候也喜欢在shell中安装软件也许你也一样喜欢在shell中把所有软件安装都搞定。但是搞来搞去最后还是发现你还是需要在Doockerfile中指定安装文件。在shell中安装软件你要这样做$ docker run -i -t ubuntu bash #登陆到docker容器
rootdb0c3967abf8:/#然后输入下面的命令来安装文件apt-get install postgresql然后再调用exitrootdb0c3978abf8:/# exit退出docker容器再给docker commit命令传递一个复杂的JSON字符串来提交新的镜像$ docker commit -run”{“Cmd”:[“postgres”,”-too -many -opts”] }” dl postgres太麻烦了不是吗还是在Dockerfile中指定安装文件吧只要两个步骤1.在一个小巧的Dockerfile中指定当前操作的镜像为FROM命令的参数
2.然后在Dockerfile中指定一些docker的命令如CMD, ENTERPOINT, VOLUME等等来指定安装的软件3超-超-超级用户你可能需要一直用超级用户来操作docker就像早期示例里一直提示的# 添加docker用户组
$ sudo groupadd docker
# 把自己加到docker用户组中
$ sudo gpasswd -a myusername docker
# 重启docker后台服务
$ sudo service docker restart
# 注销然后再登陆
$ exitWow连续三个sudo三次化身“超级用户”真可谓是“超-超-超级用户”啊别担心设置完毕以后你就再也不用打那么多sudo了4清理垃圾如果你想删除所有停止运行的容器用这个命令$ docker rm $(docker ps -a -q)顺便说一句docker ps命令很慢不知道为啥这么慢按理说Go语言是很快的啊。docker ps -a -q命令列出所有容器的id然后根据id删除容器。docker rm命令遇到正在运行的容器就会失效所以这个命令完美的删除了所有没在运行的容器。5docker inspect输出结果的解析利器jq 要对docker inspect的输出结果进行过滤一般情况下用grep命令你需要这样操作$docker inspect dl | grep IPAddress | cut -d -f 4 哦看上去很复杂用jq吧专业解析docker inspect输出结果具有更强的可读性方便易用$docker inspect dl | jq -r .[0].NetworkSettings.IPAddress其中第一个’.’代表所有的结果。’[0]’代表数组的第一个元素。就像JavaScript访问一个JSON对象一样简单方便。6镜像有哪些环境变量 有时候你需要知道自己创建的镜像有哪些环境变量。简单只要这样$ docker run ubuntu env输出结果如下HOME/
PATH/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
containerlxc
HOSTNAME5e1560b7f757调用env查看环境变量对于后面要讲到的“链接”(-link)很有用在连接两个容器时候需要用到这些环境变量具体请看最后一个要点“链接”。7RUN命令 vs CMD命令Docker的新手用户比较容易混淆RUN和CMD这两个命令。 RUN命令在构建BuildDocker时执行这时CMD命令不执行。CMD命令在RUN命令执行时才执行。我们来理清关系假设Dockerfile内容如下FROM thelanddownunder
MAINTAINER crocdundee我们要向系统中安装一些软件那么# docker build将会执行下面的命令
RUN apt-get update
RUN apt-get install softwares
# dokcer run默认执行下面的命令
CMD [“softwares”]Build时执行RUNRUN时执行CMD也就是说CMD才是镜像最终执行的命令。8CMD命令 vs ENTRYPOINT命令又是两条容易混淆的命令具体细节我们就不说了举个例子假设一个容器的Dockerfile指定CMD命令如下FROM ubuntu
CMD [“echo”]另一个容器的Dockerfile指定ENTRYPOINT命令如下FROM ubuntu
ENTRYPOINT [“echo”]运行第一个容器docker run image1 echo hello得到的结果hello运行第二个容器docker run image2 echo hello得到的结果echo hello看到不同了吧实际上CMD命令是可覆盖的docker run后面输入的命令与CMD指定的命令匹配时会把CMD指定的命令替换成docker run中带的命令。而ENTRYPOINT指定的命令只是一个“入口”docker run后面的内容会全部传给这个“入口”而不是进行命令的替换所以得到的结果就是“echo hello”。9Docker容器有自己的IP地址吗 刚接触Docker的人或许会有这样的疑问Docker容器有自己的IP地址吗Docker容器是一个进程还是一个虚拟机嗯…也许两者兼具哈哈其实Docker容器确实有自己的IP就像一个具有IP的进程。只要分别在主机和Docker容器中执行查看ip的命令就知道了。查看主机的ip$ ip -4 -o addr show eth0得到结果2: eth0 inet 162.243.139.222/24查看Docker容器的ip$ docker run ubuntu ip -r -o addr show eth0得到结果149: eth0 inet 172.17.0.43/16两者并不相同说明Docker容器有自己的ip。10基于命令行的瘦客户端使用UNIX Socket和Docker后台服务的REST接口进行通信。Docker默认是用UNIX socket通信的一直到大概0.5、0.6的版本还是用端口来通信但现在则改成UNIX socket所以从外部无法控制Docker容器的内部细节。下面我们来搞点有趣的事情从主机链接到docker的UNIX socket# 像HTTP客户端一样连接到UNIX socket
$ nc -U / /var/run/docker.sock连接成功后输入GET /images/json HTTP/1.1输入后连敲两个回车第二个回车表示输入结束。然后得到的结果应该是HTTP/1.1 200 OK
Content-Type: application/json
Date: Tue, 05 Nov 2013 23:18:09 GMT
Transfer-Encoding: chunked
16aa
[{“Repository”:”postgres”,”Tag”:”......有一天我不小心把提交的名称打错了名字开头打成”-xxx”我把命令和选项的顺序搞混了所以当我删除的时候出了问题docker rm -xxx会把-xxx当成参数而不是镜像的名称。所以我只得通过socket直接连到容器来调用REST Server把错误的东西删掉。11把镜像的依赖关系绘制成图docker images命令有一个很拉风的选项-viz可以把镜像的依赖关系绘制成图并通过管道符号保存到图片文件# 生成一个依赖关系的图表
$ docker images -viz | dot -T png -o docker.png这样主机的当前路径下就生成了一张png图然后用python开启一个微型的HTTP服务器python -m SimpleHTTPServer然后在别的机器上用浏览器打开http://machinename:8000/docker.pngOK依赖关系一目了然译者注要使用dot命令主机要安装graphviz包。另外如果主机ip没有绑定域名machinename换成主机的ip即可。12Docker把东西都存到哪里去了 Docker实际上把所有东西都放到/var/lib/docker路径下了。切换成super用户到/var/lib/docker下看看你能学到很多有趣的东西。执行下面的命令$ sudo su
# cd /var/lib/docker
# ls -F
containers/ graph/ repositories volumes/可以看到不少目录containers目录当然就是存放容器container了graph目录存放镜像文件层file system layer存放在graph/imageid/layer路径下这样你就可以看看文件层里到底有哪些东西利用这种层级结构可以清楚的看到文件层是如 何一层一层叠加起来的。13Docker源代码Go, Go, Go, Golang! Docker的源代码全部是用Go语言写的。Go是一门非常酷的语言。其实不只是Docker很多优秀的软件都是用Go写的。对我来说Docker源文件中有4个是我非常喜欢阅读的commands.go docker的命令行接口是对REST API的一个轻量级封装。Docker团队不希望在命令中出现逻辑因此commands.go只是向REST API发送指令确保其较小的颗粒性。api.go REST API的路由接受commands.go中的请求转发到server.goserver.go 大部分REST API的实现buildfile.go Dockerfile的解析器有的伙计惊叹”Wow!Docker是怎么实现的我无法理解”没关系Docker是开源软件去看它的源代码就可以了。如果你不太清楚Dockerfile中的命令是怎么回事直接去看buildfile.go就明白了。14运行几个Docker后台程序再退出容器会发生什么 OK倒数第二个要点。如果在Docker中运行几个后台程序再退出Docker容器会发生什么答案是不要这么做因为这样做后台程序就全丢了。Dockerfile中用RUN命令去开启一个后台程序如RUN pg_ctl start这样的话RUN命令开启的后台程序就会丢失。调用容器的bash连到容器的shell$ docker run -i -t postgresimage bash然后调用 ps aux查看进程你会发现postgres的进程并没有跑起来。 RUN命令会影响文件系统。因此不要再Dockerfile中用启动后台程序要把后台程序启动成前台进程。或者像一些高手提议的那样写一个启动脚 本在脚本中启动这些后台程序或进程。15容器之间进行友好沟通链接 这是最拉风的功能我把它留到最后压轴这是0.6.5中最重要的新功能我们前面已经提过两次了。运行一个容器给它一个名称在下面的例子中我们通过-name参数给容器指定名称”loldb”$ docker run -d -name loldb loldbimage再运行另一个容器加上-link参数来连接到第一个容器别名为loldb并给第二个容器也指定一个别名这里用的是cheez$ docker run -link /loldb:cheez otherimage env顺便得到cheez的环境变量CHEEZ_PORTtcp://172.17.0.8:6379
CHEEZ_PORT_1337_TCPtcp://172.17.0.8.6379
CHEEZ_PORT_1337_TCP_ADDRtcp://172.17.0.12
CHEEZ_PORT_1337_TCP_PORT6379
CHEEZ_PORT_1337_TCP_PROTOtcp这样我们就在两个容器间建立起一个网络通道bridge基于此我们可以建立一个类似rails的程序一个容器可以访问数据库容器而不对外暴露其他接口。非常酷数据库容器只需要知道第一个容器的别名在本例中为cheez和要打开的端口号。所以数据库容器也可以env命令来查看这个端口是否打开。完投稿啦精彩继续CSDN作为国内专业的云计算服务平台目前提供云计算、大数据、虚拟化、数据中心、OpenStack、CloudStack、机器学习、智能算法等相关云计算观点、技术、平台、实践、云产业咨询等服务。CSDN 公众号也一直坚持「与千万技术人共成长」的理念深度解读行业内热门技术与场景应用致力于让所有开发者保持敏锐的技术嗅觉、对行业趋势与技术获得更广阔的认知。文章题材首先你需要关注我们的公众号“CSDN云计算”这样你会更准确了解我们需要的文章风格侧重于云计算领域相关的文章可以是技术、运维、趋势等方面的务实内容原创要求文章有鲜明观点和看法。投稿须知 稿费根据原创性、实用性和时效性等方面进行审核通过的文章会发布在本微信平台。一经采用我们将支付作者酬劳。酬劳可能不多这代表的是一个心意更多是因为爱好是有识之士抒发胸怀的一种方式字数要求稿件字数以2K-8K为宜少于2K或多于8K都会一定程度降低阅读愉悦感投稿邮箱lijycsdn.net。或者添加微信表明来意微信号tangguoyemeng。请备注投稿姓名公司职位。如果咱们的合作稳定又愉快还可以签订合同长期合作哦