初识Docker学习-Docker的基本命令和概念

docker的基本命令-拉取、运行、停止、删除镜像,查看日志等操作,以及对应的概念说明

  • docker的基本操作
    • 获取镜像
    • 运行
      • 启动一个容器
      • 容器内的一些操作
    • 停止运行中的容器
    • 查看运行的日志
    • 查看已经下载的镜像
    • 删除本地镜像

docker的基本操作

注:本文基于《Docker-从入门到实践》的学习

获取镜像

Docker Hub (https://hub.docker.com/search/?q=&type=image ) 有许多高质量的镜像,先说说如何获取这些镜像。

从 Docker 镜像仓库获取镜像的命令是 docker pull 。其命令格式为:

docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]

具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。

  • Docker 镜像仓库地址:地址的格式一般是 <域名/IP>[:端口号] 。默认地址是 DockerHub
  • 仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>
    对于 DockerHub,如果不给出用户名,则默认为 library ,也就是官方镜像

现在我们获取个 ununtu的官方镜像试一下:
初识Docker学习-Docker的基本命令和概念_第1张图片
没有制定镜像仓库地址,所以会默认去官方拿,而镜像名称是 ubuntu:16.04
因此将会获取官方镜像 library/ubuntu 仓库中标签为 16.04 的镜像

下载过程中可以看出,之前写的初始Docker学习中提及的分层储存的概念,镜像是多层储存所构成。
所以下载也是一层一层去下载,不是单个文件。每一层的ID也输出了(12位),也打印出了完整的sha256摘要

运行

启动一个容器

有了镜像后,就能够以这个镜像为基础启动并运行一个容器

docker run --name webserver -d -p 80:80 nginx

这条命令会用 nginx 镜像启动一个容器,命名为 webserver ,并且映射了 80 端口。
这样我们可以用浏览器去访问这个 nginx 服务器。
这里就简单的启动个nginx镜像,由于我没有下载,它自动下载并启动了。
初识Docker学习-Docker的基本命令和概念_第2张图片
初识Docker学习-Docker的基本命令和概念_第3张图片

容器内的一些操作

以交互式终端方式进入 webserver 容器,并执行了 bash 命令,也就是获得一个可操作的 Shell。

然后,我们用

Hello Docker!

覆盖了 /usr/share/nginx/html/index.html 的内容。再刷新浏览器的话,会发现内容被改变了。

初识Docker学习-Docker的基本命令和概念_第4张图片
我们修改了容器的文件,也就是改动了容器的存储层。我们可以通过 docker diff 命令看到具体的改动。

这里简要的说明一下上面用到的参数。

  • -it :这是两个参数,一个是 -i :交互式操作,一个是 -t 终端。我们这里打算进入bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
  • –rm :这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm 。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。。
  • bash :放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash 。
  • exit 退出了这个容器。

如果仔细观察之前的 docker diff webserver 的结果,你会发现除了真正想要修改的/usr/share/nginx/html/index.html 文件外,由于命令的执行,还有很多文件被改动或添加了。这还仅仅是最简单的操作,如果是安装软件包、编译构建,那会有大量的无关内容被添加进来,如果不小心清理,将会导致镜像极为臃肿。所以一般不建议修改镜像后再commit保存镜像,建议使用Dockerfile定制镜像。

停止运行中的容器

通过 ps -n 条数 可以查看运行的容器(包括运行中和已停止的容器)
在这里插入图片描述
这里可以看到 之前我们运行了两次就停止的hello-world,还有一个还在运行的 nginx

通过 docker stop 容器ID 即可停止
在这里插入图片描述
当然想再次启动也可以通过 docker start 容器ID 进行启动

查看运行的日志

通过 docker logs 容器ID 可查看容器运行的相关日志(查看下之前运行的万恶之源)
初识Docker学习-Docker的基本命令和概念_第5张图片
也可以通过 docker attach 容器ID 进行实时连接查看(这里我页面刷新,日志实时更新)
在这里插入图片描述

查看已经下载的镜像

docker image ls

查看镜像

删除本地镜像

如果要删除本地的镜像,可以使用 docker image rm 命令

docker image rm [选项]<镜像1>[<镜像2> ....]

其中, <镜像> 可以是 镜像短 ID 、 镜像长 ID 、 镜像名 或者 镜像摘要初识Docker学习-Docker的基本命令和概念_第6张图片
如果观察上面这几个命令的运行输出信息的话,你会注意到删除行为分为两类,一类是Untagged ,另一类是 Deleted 。我们之前介绍过,镜像的唯一标识是其 ID 和摘要,而一个镜像可以有多个标签。

因此当我们使用上面命令删除镜像的时候,实际上是在要求删除某个标签的镜像。所以首先需要做的是将满足我们要求的所有镜像标签都取消,这就是我们看到的 Untagged 的信息。因为一个镜像可以对应多个标签,因此当我们删除了所指定的标签后,可能还有别的标签指向了这个镜像,如果是这种情况,那么 Delete 行为就不会发生。所以并非所有的 dockerimage rm 都会产生删除镜像的行为,有可能仅仅是取消了某个标签而已当该镜像所有的标签都被取消了,该镜像很可能会失去了存在的意义,因此会触发删除行为

镜像是多层存储结构,因此在删除的时候也是从上层向基础层方向依次进行判断删除。镜像的多层结构让镜像复用变动非常容易,因此很有可能某个其它镜像正依赖于当前镜像的某一层。这种情况,依旧不会触发删除该层的行为。直到没有任何层依赖当前层时,才会真实的删除当前层。

除了镜像依赖以外,还需要注意的是容器对镜像的依赖。如果有用这个镜像启动的容器存在(即使容器没有运行),那么同样不可以删除这个镜像。之前讲过,容器是以镜像为基础,再加一层容器存储层,组成这样的多层存储结构去运行的。因此该镜像如果被这个容器所依赖的,那么删除必然会导致故障。如果这些容器是不需要的,应该先将它们删除,然后再来删除镜像。

一些基本的操作和指令到此结束,后面将讲解Dockerfile和进一步学习其他指令。
注:可以通过 命令 --help 的方式查看其他参数的使用方法

你可能感兴趣的:(Docker)