本文记录笔者在日常操作docker中常用的一些命令,仅作参考:
1.docker info
这个命令在可以查看大体的docker服务运行信息,比如有多少docker服务,处于某个状态(runing,stop or paused)的服务有多少个,docker的存储位置,你在dockerhub上的用户名……等等信息
这个相对docker version更全
2.docker image镜像操作
在docker hub上拉去image
docker images #查看当前(本地)所有镜像
docker search image_name #在线查找image
docker pull image_name #下拉image到本地
docekr rmi image_name/container_id #删除镜像,注意还有一个是docker rm (这是删除某个服务,后面接的是服务的id,这个是每次启动某个container会生成的一串id值)
3.启动docker 服务
我们从dockerhub上pull了一些container之后,使用docker images可以看到它们在本地的名字以及其他一些信息版本号之类的,一般通过image name来启动服务:
1.启动splash服务,可以用docker run –help查看run命令的相关选项,-it表示申请一个控制台同容器进行数据交互,-p指定占用端口
docker run -it -p 8050:8050 scrapinghub/spalsh
2.-d参数,后台启动
docker run -it -d -p 8050:8050 –name tingyun scrapinghub/splash
这个在写脚本的时候特别需要,因为你不需要利用控制台来和你交互,只要启动服务。个人觉得在服务器上运行的大部分程序,都应该优先使用后台模式,将log文件重定向到专门的日志文件中,出现错误就从log文件中查找记录。
4.日常操作docker服务
我在使用splash的时候由于渲染页面是一件比价耗费资源的事情,spalsh所做的事情相当于调用浏览器内盒去打开一个网页,虽然比正常浏览网页的代价花费小,但是由于docker的资源限制等问题,会有一个上限,这时候我找到的方法是重启docker服务,这只是暂时的对策,日后会考虑其他解决方法,比如搭建docker集群,还有待深入学习。
docekr ps #查看全部运行中runing的服务
docker ps -a #查看所有的服务,无论什么状态
docker ps -aq #只查看container_id这一项信息,所有服务
------------------------------
#注意每次关闭重启服务都会生成一个唯一的container_id,如果你要经常重新关机开机再起开某些服务的话,可能会出现大量废弃的id(stop了的容器),可以定期批量删除
docker rm $(docker ps -aq) #正在运行的container并不会被删除,会提示你先stop这个服务
docker rm container_id #删除某个container
docker kill/stop container_id #两者都是停掉服务,stop和kill的区别是:stop首先发送一个SIGTERM信号给程序等待程序做一些退出前"善后"的工作,保存状态等...
#kill是直接发送SIGKILL,应用程序直接退出,线上的服务的话最好使用前者,for safe
现在笔者对docker的了解程序还仅仅限于简单使用,有什么问题欢迎留言一起讨论。
这里写了一个自动查找splash 镜像并启动的脚本,很简单的代码:
//autorun_splash.py
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys,os
import re
#os.system("docker run -d -it -p 8050:8050 scrapinghub/splash --max-timeout 3600")
splash_image_id = ""
os.system("docker ps -a| grep tingyun > temp.txt")
with open('temp.txt','r') as f:
temp = f.read()
try:
splash_image_id = re.search('.{12}',temp).group().replace("/","")
except Exception,e:
print Exception,":",e
#print "当前的splash id是 : ",splash_image_id,"\n"
if not splash_image_id:
status_code = os.system("docker run -it -d -p 8050:8050 --name tingyun scrapinghub/splash")
if status_code == 0:
print "Splash not exists , start success , and named tingyun....."
else:
print "Error1 , fail!!!"
else:
status_code = os.system("docker restart %s"%splash_image_id)
if status_code == 0:
print "Splash exists , restart tingyun success ....."
else:
print "Error2 , fail!!!"
temp_file = './temp.txt'
if os.path.exists(temp_file):
os.remove(temp_file)
print "Delete temp_file success ....."