[容器化技术之三] Docker常用命令

一、镜像操作

  Docker运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker会从镜像仓库下载该镜像。

1、获取镜像

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

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

  具体的选项可以通过docker pull --help命令看到,这里说以下镜像名称的格式。
Docker镜像仓库地址:地址的格式一般是<域名/IP>[:端口号],默认地址是Docker Hub。
仓库名:如之前所说,这里的仓库名是两段式名称,即<用户名>/<软件名>。对于Docker Hub,如果不给出用户名,则默认为library,也就是官方镜像。

docker pull ubuntu:16.04

  上面的命令没有给出Docker镜像仓库地址,因此将会从Docker Hub获取镜像。而镜像名称是ubuntu:16.04,因此将会获取官方镜像library/ubuntu仓库中标签为16.04的镜像。

2、运行镜像

  有了镜像后,就能够以这个镜像为基础启动并运行一个容器。以上面的ubuntu:16.04为例,如果我们打算启动里面的bash并且进行交互式操作的话,可以执行下面的命令:

docker run -it --rm  ubuntu:16.04 bash

-it:这是两个参数,一个是-i:交互式操作,一个是-t终端。
--rm:这个参数是说容器退出后随之将其删除。
ubuntu:16.04:这是指用ubuntu:16.04镜像为基础来启动容器。
bash:放在镜像名后的命令,这里我们希望有个交互式的Shell,因此用的是bash。

  最后通过exit退出了这个容器。



3、列出镜像

(1)列出已经下载下来的镜像

  列出已经下载下来的镜像,可以使用docker image ls命令。列表包含了仓库名、标签、镜像ID、创建时间以及所占用的空间。

docker image ls
docker images       # 效果等同于docker image ls




(2)查看镜像、容器、数据卷所占用的空间

docker system df




(3)仓库名、标签均为的镜像成为虚悬镜像(dangling image),显示这类镜像

docker image ls -f dangling=true

  当然,本地仓库里肯定不带虚悬镜像,这时为了演示虚悬镜像,新建一个Dockerfile文件来构建虚悬镜像,如下图所示:



  Dockerfile的内容很简单,以ubuntu:16.04作为基础镜像,输出一个字符串,如下图所示:



  编辑完成之后退出,在Dockerfile所在目录下执行命令
docker build .

  不指定镜像名字和标签,就会产生一个虚悬镜像,这时候再使用上面的命令查询就可以查看虚悬镜像列表了。



  一般来说虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。

docker image prune



4、删除本地镜像

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

其格式为:

docker image rm [选项] <镜像1>[<镜像2>...]
docker rmi <镜像1>[<镜像2>...]      # 删除镜像效果相同

  其中,<镜像>可以是镜像短ID、镜像长ID、镜像名或者镜像摘要。
  下面演示删除hello-world镜像,删除之后再看镜像列表hello-world已不存在。





(2)批量删除希望删除的镜像

  使用docker image ls -q来配合docker image rm,这样可以批量删除希望删除的镜像,在日常应用版本镜像维护中,由于每天都会产生新的镜像,所以经过一段时间镜像会占满服务器的磁盘,这时就需要批量去删除镜像。

docker image rm $(docker image ls -q ubuntu) # 删除所有仓库名为ubuntu的镜像

PS.如果没有列出镜像仓库名,则默认会删除所有的镜像。

  下面演示了批量删除mynginx仓库镜像的操作:




(3)删除特定版本的镜像

  有时候,我们只想删除某些版本的镜像,比如ubuntu:16.04之前的版本,命令如下:

docker image rm $(docker image ls -q -f before=ubuntu:16.04)



(4)删除镜像前需删除使用了该镜像的容器
  如果当前要删除的镜像有正在运行的容器,则删除镜像会报错,如下图所示:


  这时,需要使用以下命令查询正在运行的容器,然后查到容器ID并删除容器后,才能删除镜像。

docker ps -a




二、容器操作

  容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。

1、启动

  启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。因为Docker的容器是轻量级的,用户可以随时删除和新创建容器。

(1)新建并启动

docker run

示例:启动一个ubuntu:16.04的容器,输出一个"Hello World",之后终止容器。




(2)启动已终止容器

docker container start / docker start

  启动一个bash终端,允许用户进行交互。

docker run -it ubuntu:16.04 /bin/bash

-t让Docker分配一个伪终端并绑定到容器的标准输入上,-i则让容器的标准输入保持打开。
当利用docker run来创建容器时,Docker在后台运行的标准操作包括:

  • 检查本地是否存在指定的镜像,不存在就从公有仓库下载
  • 利用镜像创建并启动一个容器
  • 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层
  • 在宿主机配置的网桥接口中桥接一个虚拟接口到容器中去
  • 从地址池配置一个ip地址给容器
  • 执行用户指定的应用程序
  • 执行完毕后容器被终止


    (3)后台运行
      很多时候,需要让Docker在后台运行而不是直接把执行命令的结果输出在当前宿主机下,此时,可以通过添加-d参数实现。

    PS.容器是否会长久运行,是和docker run指定的命令有关,和-d参数无关。


2、停止

(1)终止运行中的容器

docker container stop [容器ID]




(2)先停止后启动运行中的容器

docker container restart [容器ID]



3、进入容器

  在使用-d参数时,容器启动后会进入后台,某些时候需要进入容器进行操作,使用docker exec命令可以进入到运行中。

  exec命令参数
-i:使用-i参数,只会返回命令执行结果,但是界面不会出现我们熟悉的Linux命令提示符。
-t:进入容器内部的终端。

docker exec -it 容器ID /bin/bash

示例演示:



4、导出导入容器

(1)导出容器

  如果要导出本地某个容器,可以使用docker export命令

docker export 容器ID > 导出文件名.tar

实例演示:




(2)导入容器

  可以使用docker import从容器快照文件中再导入为镜像

cat 导出文件名.tar | docker import - 镜像用户/镜像名:镜像版本

实例演示:



  此外,也可以通过指定URL或者某个目录来导入

docker import http://study.163.com/image.tgz example/imagerepo


5、删除容器

(1)删除容器

  可以使用docker container rm来删除一个处于终止状态的容器。

docker container rm ubuntu:16.04

  如果要删除一个运行中的容器,可以添加-f参数,Docker会发送SIGKILL信号给容器。


(2)删除所有处于终止状态的容器
  用docker container ls -a命令可以查看所有已经创建的包括终止状态的容器,如果数量太多要一个个删除可能会很麻烦,用下面的命令可以清理掉所有处于终止状态的容器。

docker container prune

你可能感兴趣的:([容器化技术之三] Docker常用命令)