上一篇文章『十分钟入门Docker,带你成为Docker王者之篇一』给大家讲了一下 Docker 怎么安装和运行,那么这一篇文章,我们着重讲解一下怎样能够快速的掌握Docker常用命令。
作业讲解
上一期在文末留了一个作业,不知道大家是否跑起来了?
题目:
如果你已经成功安装好了 Docker,不妨试一试皮爷的 Docker Image 跑起来的效果:$ docker run swyftg/3dmspider
如果大家正常运行起来了,那么这个 Docker Image 的作用,就是爬取 https://www.3dmgame.com/
网站的游戏资讯,具体的爬虫代码可以关注公号『皮爷撸码』,回复『代码』,其中 DC001 就是 Docker 的爬虫代码地址,有兴趣的同学可以去学习一下源码。
那么这个 Image 运行起来的样子就是这样:
神奇不?哈哈哈,你看,你不需要配置Python,Scrapy的运行环境,也不需要安装Python的依赖,只需要安装Docker,就可以玩转Scrapy爬虫。注意,Docker不仅仅只限于爬虫,任何都适用,皮爷这里只是给做一个Docker Image的展示而已。
这里要再次回顾一下上篇文章的一段话:
- Docker就像是你电脑里面安装了一个冰箱,这个冰柜提供制作形状各异的雪糕模具(这个就是镜像Image),然后你可以用这些模具来制作各种各样的雪糕(雪糕也就是container)。做出来的雪糕,支持访问,可以查看雪糕内部的各种结构。
- 通过Docker,你可以将自己的雪糕模具给了其他的小伙伴或者上传到网上,然后其他的小伙伴可以用你的模具,在他的电脑里面的冰柜(Docker)中,就可以制作出来和你的一模一样的雪糕。
那么接下来,皮爷就给大家来说一下 Docker 里面,最最最最最工作化和常用的几条命令。
0x00_内功心法:$ docker [xxx] --help
学习所有招式之前,先学一个内功心法。最关键的一个:--help
关键字。这个关键字可以用在任何命令之后,如果对 docker 的命令不清楚怎么用,就可以加 --help
命令来查看帮助文档。比如:
- docker不知道怎么用?? 通过 docker --help 查看啊。
- docker ps不知道怎么用?? 通过 docker ps --help 查看啊。
- docker image不知道怎么用?? 通过 docker image --help 查看啊。
- docker run不知道怎么用?? 通过 docker run --help 查看啊。
- …
学完心法,我们来看学习招式。
0x01_左手容器:$ docker ps 系列
在这个命令基础下,主要玩的是这么几条命令:
- $ docker ps
- $ docker ps -a
- $ docker rm
- $ docker stop
- $ docker start
- $ docker restart
- $ docker logs
>$ docker ps
这个命令是最基本的命令,在 Docker 运行起来的时候,这个命令可以罗列出所有正在运行的容器(Containers)
>$ docker ps -a
这个命令只是在上一个命令的基础之上,加了一个 -a
参数,它可以罗列出来所有的容器,包括正在运行的和已经停止的。停止的容器一般有两种情况:一种是运行出错,另一种是运行完毕。
>$ docker rm [OPTIONS] CONTAINER [CONTAINER…]
rm命令,一般都是删除
命令。这条命令在 rm 后面,跟选择参数或者直接跟一个或者多个容器的ID。作用就是将容器删除。
这条命令很有用,比如你需要删除一个镜像(Image),但是系统提示你删除失败:因为有容器正在使用镜像。那么你需要先删除使用镜像的容器(容器可能是运行状态,也可能是stop的状态,通过$ docker ps -a
命令来查看容器状态),这里就需要用到这个$ docker rm xxxx
命令了。
我这里在上面的例子中执行一下,给大家看一下效果:
上面这个图,我们从上往下看:
- 第一个红框,列出了三条容器信息;
- 第二个红框,我们选择删除第二个容器;
- 第三个红框,可以看到刚才的容器被删除了。
>$ docker stop [OPTIONS] CONTAINER [CONTAINER…]
stop命令则是将运行中的容器停止掉。
要问啥是运行中的容器? ----- 通过$ docker ps
命令列出来的就是运行中的容器。
那么我们只需要把要停止的容器的ID号填写到 stop 后面就可以了。一次可以停止一个ID或者停止多个ID。
上面这个图,我们从上往下看:
- 第一个红框,看到
$ docker ps
命令列出来了正在运行的容器。 - 第二个红框,我们通过
$ docker stop
命令,来停止容器。这里我们只去了ID的前几位来表示容器的ID,Docker是支持这样简化操作的,前提是缩写ID没有歧义 - 第三个红框,我们发现通过
$ docker ps
命令看不到刚才那个容器了,因为这个命令罗列出来都是运行中的容器。 - 第四个红框,看到通过
$ docker ps -a
命令罗列出来所有的容器,发现刚才的那个容器已经被关闭了。
>$ docker start [OPTIONS] CONTAINER [CONTAINER…]
>$ docker restart [OPTIONS] CONTAINER [CONTAINER…]
这俩命令,使用形式和上面的 $ docker stop
命令一模一样,只不过一个是 start
表示 让容器运行
;另一个是 restart
表示 让容器重启
。具体做法不介绍了,很简单。
>$ docker logs [OPTIONS] CONTAINER
哈哈,这个是查看容器 log 的命令,也算是一个很关键件的指令。logs
后面只需要加容器的ID就可以。注意,这里和上面的指令不一样,这里一次只能查看一个容器的Log,后面不能跟多个容器的ID。
上面这个图,我们从上往下看:
- 第一个红框,看到
$ docker ps -a
命令列出来所有的容器。 - 第二个红框,我们通过
$ docker logs ID
来看到那个 3dmspider 容器的log,其实就是我们 Scrapy 爬虫的log。
0x02_右手镜像:$ docker images 系列
在这个命令基础下,主要玩的是这么几条命令:
- $ docker search
- $ docker images
- $ docker image rm
- $ docker image history
- $ docker image build
- $ docker image pull
- $ docker image push
>$ docker search [OPTIONS] TERM
这个命令的主要功能是搜索dockerhub里面现成的镜像(Image)。后面的Term就是搜索的关键字。
比如搜索 Ubuntu 的镜像:
可以看到上面搜索出来好多镜像,而且后面还有 Start
和 Official
认证。
再比如搜索上节课皮爷的给大家留的作业的镜像:
就一条数据,哈哈哈哈。只要搜索到镜像(Image),你就可以使用这个镜像了。
>$ docker images
这个命令要注意一下,Images是复数,后面加着s
呢。这个命令主要就是罗列出来你本地已经下载好的或者是创建的 docker iamge。
从上面的图我们看到,我本地只有四个镜像。为啥要说这个命令呢?因为这个命令和后面的 rm
命令关联,我们能够在这个命令里面找到镜像的ID。
>$ docker image rm [OPTIONS] IMAGE [IMAGE…]
这个命令主要就是来删除本地Image使用的。一次可以删除一个或者多个Image。后面的Image ID就是从上面的那个命令里面看到的。
这是个非常好的例子,上面这个图,我们从上往下看:
- 第一个红框,看到
$ docker images
命令列出来所有的镜像。 - 第二个红框,我们要通过
$ docker image rm xxx
命令来删除一个 Image,发现删除失败,报错了。因为有容器正在使用这个Image。 - 第三个红框,我们需要通过上面的提到的
$ docker ps -a
命令来查看是哪个容器在使用。 - 第四个红框,把那个已经停止的容器通过
rm
命令删掉。 - 第五个红框,再次通过
$ docker image rm xxx
命令来删除刚才要删除的那个镜像。 - 第六个红框,再次通过
$ docker images
命令罗列本地镜像,发现那个镜像已经被成功删除。
$ docker image rm
命令掌握到这个程度就可以了。
>$ docker image history [OPTIONS] IMAGE
这个history
命令,顾名思义,就是把Image的历史记录罗列出来。
这里可以看得很清楚,我们的这个 image到底发生过怎样的便签。其实这个功能有点像 Git 中的 git log
。 其实还是和 image push/pull
功能相关的,这俩功能都和修改 Image 有关, histroy 就是来查看修改记录了。
>$ docker image pull [OPTIONS] NAME[:TAG|@DIGEST]
这个简单提一下,就是拉取镜像的。
>$ docker image push [OPTIONS] NAME[:TAG]
上一个是拉镜像,这个就是push镜像。
>$ docker image build
这个命令很关键,但是我们这一期先不讲,build
命令主要是要结合:1. 本地的代码;2. 你所写的 Dockerfile。 这两个东西来创建你的Image。怎样写Dockerfile,怎样Build, 我们下一篇说。
0x03_中间雄起:$ docker run
Run
方法可是不得了。这个可以说是 Docker 的核心中的核心。如果要学要用起来,其实也不难,掌握好以下几个方法就好:
- $ docker run swyftg/3dmspider
- $ docker run 43b6fb877481
- $ docker run -t -i python:3.6
- $ docker run -t -i ububtu /bin/bash
恩恩,就这么几个基本完全够用了。我们一个一个的说。
>$ docker run swyftg/3dmspider
>$ docker run 43b6fb877481
这两个其实很相近,run
后面可以跟 Image 的仓库名字或者 Image 的ID。如果是仓库名字,还可以在名字后面添加版本号。
我们看到,直接跟着 Image ID,就可以运行起来。而且打印出来的Log也确实是Scray的log。
>$ docker run -t -i python:3.6
这个命令主要是 -t
和 -i
这两个参数:
-t
:在新容器内指定一个伪终端或终端。-i
:允许你对容器内的标准输入 (STDIN) 进行交互。
其实这俩一般是一起使用。就比如下面这个:
看到没?只需要通过一个 Docker 的 Python 3.6 的 Image ,就可以在你的电脑上面将 Python3 跑起来。
>$ docker run -t -i ububtu /bin/bash
这个是在上一个命令的基础上,更加进一步的操作,就是在 仓库名字或者Image ID 后面,添加了 /bin/bash
运行程序的路径名字。
一般如果是Linux的Image,或者你的程序根Image是用的Linux,尝尝会运行 /bin/bash
,通过这种方式,你可以查看 Image 里面的文件到底是怎么回事儿了。
0x04_作业小练习
作业很简单,字数很少:朗读并背诵全文。 哈哈哈,字数越少事儿越大,这几个字是不是非常恐怖?
我们这一篇文章主要讲了 Docker 中常用的命令,来管理 Image
和 Container
,同时还说了一下 Run
命令。Docker 还有其他命令,感兴趣的可以通过我们最开始教的内容口诀 $ docker --help
来看那些命令怎么玩。
喜欢的可以关注公号『皮爷撸码』,回复『代码』,其中DC001就是 Docker 系列的代码,大家可以学习一下。
大家帮忙点个右下角的好看呗,你这么帅,不点好看怎么过去啊。