docker常用操作

来源:互联网 发布:妖尾之数据换装番茄 编辑:程序博客网 时间:2024/05/16 08:32

本文记录笔者在日常操作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    #在线查找imagedocker 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      #删除某个containerdocker 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,osimport 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 ....."
0 0