十分钟入门Docker,带你成为Docker王者之篇二

1,098 阅读4分钟

上一篇文章『十分钟入门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的展示而已。

这里要再次回顾一下上篇文章的一段话:

  1. Docker就像是你电脑里面安装了一个冰箱,这个冰柜提供制作形状各异的雪糕模具(这个就是镜像Image),然后你可以用这些模具来制作各种各样的雪糕(雪糕也就是container)。做出来的雪糕,支持访问,可以查看雪糕内部的各种结构。
  2. 通过Docker,你可以将自己的雪糕模具给了其他的小伙伴或者上传到网上,然后其他的小伙伴可以用你的模具,在他的电脑里面的冰柜(Docker)中,就可以制作出来和你的一模一样的雪糕。

所以,Docker 玩的最核心的其实就是两个东西: Container(容器)Image(镜像)

那么接下来,皮爷就给大家来说一下 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 的镜像:

可以看到上面搜索出来好多镜像,而且后面还有 StartOfficial 认证。

再比如搜索上节课皮爷的给大家留的作业的镜像:

就一条数据,哈哈哈哈。只要搜索到镜像(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 中常用的命令,来管理 ImageContainer,同时还说了一下 Run 命令。Docker 还有其他命令,感兴趣的可以通过我们最开始教的内容口诀 $ docker --help 来看那些命令怎么玩。

喜欢的可以关注公号『皮爷撸码』,回复『代码』,其中DC001就是 Docker 系列的代码,大家可以学习一下。

大家帮忙点个右下角的好看呗,你这么帅,不点好看怎么过去啊。