4

Docker小白到实战之常用命令演示,通俗易懂

 2 years ago
source link: https://www.cnblogs.com/zoe-zyq/p/15164857.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

Docker小白到实战之常用命令演示,通俗易懂

上一篇大概认识了Docker,主要是从概念、架构、优点及流程方面进行阐述,并进行安装和体验; 接下来就开始进行实操学习,在演示过程中会针对关键的知识点进行归纳和总结,这里先从常用命令说起,来吧,小伙伴们。

Docker和我们熟悉的Git很类似,都是通过命令执行相关操作,当然也有一些界面管理工具(点按钮的那种),但大家似乎更喜欢直接敲命令,毕竟这种方式更加灵活、更加容易理解操作本质;有大神将常用命令用一张图很好的展现出来,这里借用一下(图片来源于网络,侵删):

cmd_logic

不熟悉Docker的小伙伴可能看见这图直接懵圈了,别急,接着往下看, 看完再回过头来瞅这张图,绝对感觉很给力。

2. 常用命令实操

2.1 全局命令
  • docker version:查看docker版本信息。

  • docker info:查看docker详情信息,比如仓储信息、加速器配置信息、有多少个镜像、有多少个容器、CPU、内存等。

  • docker events:从docker 服务获取实时事件,通俗一点理解就是操作日志,比如对镜像、容器、网络、挂载卷等操作,就会记录对应的事件信息;最多能返回最近的1000条日志信息

    先在一个终端执行命令,终端会阻塞:

    开启另一个终端,执行根据镜像运行容器的命令:

    此时开启的第一个终端就实时输出事件消息,如镜像拉取、容器启动、容器结束等信息,如下:

    既然可以把这个命令当做操作日志理解,那肯定可以根据条件查看对应的数据,如下:

    如图所示,会先显示符合条件的事件信息,然后会继续阻塞,如果对服务端有操作,信息还会实时显示。常用的参数指定如下:

    -f :根据条件过滤事件,如上图指定的是镜像为hello-world相关的事件信息;

    --since :从指定的时间戳后显示所有事件,可以理解为开始时间,支持多种时间格式,默认使用本地主机的时区;

    --until :显示到指定的时间为止,可以理解为结束时间;

2.2 镜像常用命令

镜像(image)可以理解为一种轻量级、可独立运行的软件包,包含了应用程序及其他运行需要的基础设施,如运行时、配置文件、依赖的库等,所以没有镜像就没法启动容器;就好比开发中没有类(class),又怎么去根据类创建实例呢。

镜像是只读的,所以操作命令不多,一般就是增、删、查。

  • docker images:列出Docker主机上的镜像

    可以指定参数,比较常用的如下:

    -a :列出本地所有的镜像(含中间镜像层,默认过滤掉中间镜像层)。

    -q :只显示镜像ID。

    上图中的-aq就是显示所有镜像的ID,一般用于批量删除

  • docker search:从远程仓储中搜索镜像,后面直接根镜像名称即可

    可以指定条件进行搜索,如下:

    --filter:指定条件搜索,is-official表示是否为官方的,stars表示要找多少星星以上的

    对于搜索,我还是比较喜欢用界面,直观好看:

  • docker pull:从远程仓储中拉取镜像,后面跟镜像名和tag即可,即指定版本拉取,如果不指定tag,默认就latest,最新的

    镜像的分层原理就是采用UnionFS(联合文件系统),是一种分层、轻量级的高性能文件系统;镜像可以通过分层来进行继承,可以基于基础镜像制作出各种具体的应用镜像,比如我们刚拉取下来的nginx镜像,这里先了解,后续我们自己制作镜像的时候就明白了。

    docker pull 镜像名:tag:指定版本拉取;

  • docker rmi:删除指定镜像,后面可以跟名称或镜像ID

    删除指定版本,如下:

    根据镜像ID删除,可以一下删除多个,中间用空格隔开:

    删除全部镜像,就是找出所有镜像ID,然后删除就行了,当然肯定不是一个一个的拷贝镜像ID;docker images -aq可以显示所有镜像ID ,所以两个命令结合用即可,如下:

     docker rmi -f $(docker images -aq)
    

    -f:代表强制删除,比如一些镜像和容器有依赖,会提示不能直接删除,加上这个选项就可以强制删除。

  • docker save:导出镜像,可以离线拷贝到其他主机上使用,避免没有网络不能下载镜像的场景。

    生成的tar文件就可以根据需要拷贝到对应设备上加载使用,不用在线拉取,因为很多场景是不允许连外网的。

  • docker load:加载镜像,根据拷贝过来的tar文件可以直接加载镜像到主机上。

    这里演示就将原来拉取的镜像删除,然后通过load命令重新加载,如下:

    加载镜像,如下:

    换一种写法,如下:

    选项说明:

    --input , -i : 指定导入的文件。

    --quiet , -q : 简化输出信息,不显示具体加载过程。

    注:这里因为是在TestDockerImage目录下执行命令,所以指定tar的文件时,就在当前目录下。

2.3 容器常用命令

容器是用镜像创建的运行实例, 它可以被启动、开始、停止、删除,每个容器都是相互隔离;可以把容器看做是一个极简版的Linux环境和在其中运行程序的组合;

容器和镜像几乎一样,唯一的区别就是镜像层上面加载了一个可写层,这层称为容器层

以下对容器的操作,可以指定容器名称,也可以指定容器ID,演示统一用容器ID,不再重复截图。

  • docker run:根据镜像启动容器;语法如下:docker run [OPTIONS] IMAGE [COMMAND] [ARG...];

    常用选项参数说明,如下:

    --name="容器名" : 为容器指定一个名称;

    -d: 后台运行容器,并返回容器ID;

    -i: 以交互模式运行容器,一般和 -t 同时使用;

    -t: 为容器重新分配一个伪输入终端,一般和 -i 同时使用;

    -P: 随机端口映射,容器内部端口随机映射到主机的端口

    -p: 指定端口映射,格式为:主机端口:容器端口

    演示如下:

    上图可以看到终端阻塞了,这种模式称为attached默认,即前台运行,与之对应的是detached模式,及后台运行,接下来会演示。 由于终端阻塞,这里另开一个终端执行docker ps命令看运行的容器,如下:

    前台运行模式终端很容易被关闭,启动的nginx容器也会停掉,这种情况对于很多场景是不允许的,所以可以指定为后台模式运行,即detached模式,如下:

    现在只是在容器内启动了一个nginx,并监听80端口,如果需要通过主机能访问到容器里面的nginx,还需进行端口映射,如下:

    这里启动了两个nginx容器,都是监听80端口,但并没有报端口被占用的错,所以容器之间是互不影响的。通过-p选项进行端口映射,这下就可以通过主机的9999端口访问到容器内部的80端口,如下:

    既然刚开始说可以将容器理解为简易版的Linux,那就应该可以进入容器内部操作一把,如下:

    在容器里面只能执行一些核心的命令,因为是极简版,所以内部只包含重要的功能,如果需要其他功能可以自己安装扩展。

    退出容器的两种方式:

    a、容器中执行exit命令,容器停止并退出,回到主机;

    b、利用组合键ctrl+p+q,容器不停止退出,回到主机;

  • docker ps [OPTIONS] :显示主机中的容器,不加选项默认只列出运行中的容器

    -a : 显示所有的容器,包括未运行的;

    -n : 列出最近创建的n个容器;

    演示如下:

  • 启动和停止容器的命令;

     docker start 容器id  # 启动被停止的容器
     docker stop 容器id  # 停止运行中的容器
     docker restart 容器id # 重启容器
     docker kill 容器id  # 强制停止容器
    

    docker stop停止容器,后面可以跟一个或多个容器ID:

    docker start:启动被停止的容器,后面可以跟一个或多个容器ID:

    docker restart重启命令和docker kill强制停止命令就不截图啦

  • docker execdocker attach两种方式进入正在运行的容器。

    很多场景容器都是后台运行,但有时需要进入容器内部进行相关配置的更改。

    docker exec:进入容器后开启一个新的终端,正常执行Linux相关命令。

    docker attach:进入容器正在执行的终端,不会启动新的进程。

    退出容器模式:

    容器中执行exit命令,容器停止并退出;

    利用组合键ctrl+p+q,容器不停止退出;

  • docker logs [OPTIONS] 容器ID:查看指定容器的日志;

    常用OPTIONS如下:

    -f :跟踪日志输出

    --since :显示指定开始时间之后所有日志

    -t : 显示时间戳

    --tail :列出最新N条容器日志

    可以指定选项,查看需要的日志,如下:

  • docker top 容器ID:列出指定容器内部的进程,可以看到容器内的应用进程是否正常运行,如下:

  • docker inspect 容器ID:查看指定容器的详细信息,比如运行状态、网络配置、挂载的卷等信息都有,如下:

  • docker commit:根据容器生成一个新的镜像;容器是可编辑的,有些时候需要将已更改的容器生成一个新的镜像给其他人用。

    命令说明:

    -a :提交的镜像作者;

    -m :提交时的说明文字;

    命令中testcommitimage:v1是自定义的镜像名和tag;

    根据新生成的镜像启动容器,则内部就会有创建的对应文件(容器内部可以根据需要任意改,这里只是演示创建文件而已)。

  • docker exportdocker import将容器方便离线导出和导入;

    命令说明:

     #将容器导出为tar文件
     docker export -o testexport.tar 030aa6fcd7f3
     # -o 指定输出位置和文件名
     # 030aa6fcd7f3 这个是容器ID
     
     #根据生成的tar文件导入为镜像
     docker import testexport.tar testexportimagename:v2
     # 指定对应的tar文件
     # testexportimagename:v2 镜像名和版本, 可以自己定义
    

    这对命令是不是和镜像的docker savedocker load这对命令用法很相似,但两种方式不能混用,因为export导出的仅仅是容器快照,save保存的是完整的镜像文件。

  • docker rm 容器ID:删除指定容器,运行中的容器默认不让删除,可以增加-f选项强制删除,如下:

以上只是总结了平时比较常用的命令,并没有全部列出,更多细节可以进入官网:https://docs.docker.com/engine/reference/commandline/rm/

上面内容主要针对镜像和容器的常用命令进行演示和说明,关于数据卷、dockerfile、网络相关的命令后面单独分享;

看到这里,相信文章开头的那张图小伙伴们已经差不多看懂了,而且图片中的模块划分、箭头指向都很有意义;还有好多干货在后面,关注“Code综艺圈”,和我一起学习吧;

图片


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK