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

前言

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

正文

1. 预览

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综艺圈”,和我一起学习吧;

图片

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lumen 配置数据库结果自动转数组_lumen 数据库操作 Cannot use object of type stdClass as array...

你可能记得,操作数据库时$dataList 什么什么 ->get();能查询到数据 数据结果为数组加stdClass类型你使用 $dataList $dataList->toArray();进行数据转化结果你发现,没有正确转化,你再到里面去转化,但结果证明也是徒劳foreach ($allDa…

今天这个日子,大多数人都不知道…

全世界只有3.14 % 的人关注了爆炸吧知识我是蝙蝠,身体虽小五毒俱全你确定要尝吗?我是果子狸,人们一度“谈我色变”但如今又被端上餐桌!我是野兔,人们说我很可爱我的肉却变成“野味”毛发变成皮草……今天,世…

PostgreSQL表的行数统计

PostgreSQL表的行数统计 在很多情况下我们需要知道一个表的记录数有多少。如果你发现你有这样的需求,你还应该问问这样的统计的精确度到底又多高。如果你在做会计报表,你需要非常的精确。如果你做一个网页的记数器,可能有一些误差也是允许的…

SharePoint at .NET技术大会

在这个月上海举行的.NET技术大会上,我将奉献一节名为《基于SharePoint的Web应用开发模型》的课程。由于大会的定位是“面向企业级.NET开发深度应用”,我相信大家想听的一定不是单纯的介绍SharePoint Server,或是怎么做一个Web Part。思来想去…

对DDD的常见误区

这里是Z哥的个人公众号每周五11:45 按时送达当然了,也会时不时加个餐~我的第「205」篇原创敬上大家好,我是Z哥。我从 2014 年开始接触 DDD 到现在也有 7 年多时间了,在这个期间踩过很多坑,也是自己慢慢从充…

Python办公自动化Day2-openpyxl

目录 文章声明⭐⭐⭐让我们开始今天的学习吧!常规操作添加数据遍历所有单元格数据合并/取消合并单元格添加/删除行与列移动指定范围单元格 文章声明⭐⭐⭐ 该文章为我(有编程语言基础,非编程小白)的 Python办公自动化自学笔记知识…

vsftpd服务

实验1VSFTPD实验环境在虚拟机Linux 6.5系统下需要2台Linux系统一台A作为服务端一条B作为测试客户端开启2台Linux系统。实验目标A作为服务端配置VSFTPD服务器实现FTP服务。B作为测试客户端验证服务器A的共享是否有效。配置真实主机确保真实主机能ping通2台虚拟机。实验步骤1. 首…

传递函数_使用python计算麦克风阵列信号的传递函数

使用python写了一个测试麦克风阵列传递函数的demo,有需要的自取。该代码使用了第三方库ThinkDSP。1. 传递函数首先解释下什么是传递函数:把具有线性特性的对象的输入与输出间的关系,用一个函数(输出波形的拉普拉斯变换与输入波形的拉普拉斯变…

LNK2005 连接错误解决办法

nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" (??2YAPAXIZ) 已经在 LIBCMTD.lib(new.obj) 中定义nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??3YAXPAXZ) 已经在 …

中国数学竞赛史上最玩命的“赌徒”,为了国家荣誉,他不惜用生命换来了五次世界第一...

全世界只有3.14 % 的人关注了爆炸吧知识知识君今天,要跟大家介绍的是,北大历史上首位被授予博士学位的人,深受癌症折磨的同时还带领着中国学子连续5次站上世界顶端的人,他的故事,他的品格,值得被所有人记住…

33条C#、.Net经典面试题目及答案[zt]

本文集中了多条常见的C#、.Net经典面试题目例如“.NET中类和结构的区别”、“ASP.NET页面之间传递值的几种方式?”,并简明扼要的给出了答案,希望能对学习C#、.Net的读者有所帮助。 1, 请你说说.NET中类和结构的区别? 答:结构和类…

控制用户的访问之权限、角色【weber出品必属精品】

权限的作用 限制用户对数据的访问 权限的分类 1. 系统权限:能够存取数据库的权限 2. 对象权限:操作数据库对象的内容 系统权限 1.1 如何创建用户: SQL> create user test default tablespace users identified by test;用户已创建。 1…

javq接口_Java为什么要使用接口_java接口怎么使用

Java接口是什么Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。接口(英语:Interface)&am…

[(转)hystar整理]Entity Framework 教程

预备知识 2 LINQ技术 2 LINQ技术的基础 - C#3.0 2 自动属性 2 隐式类型 2 对象初始化器与集合初始化器 3 匿名类 3 扩展方法 4 Lambda表达式 4 .NET中的数据访问 4 DataSet方案 5 改进的的DataSet方案 5 手写代码通过ADO.NET2…

Exchange中的数据库文件

Exchange中的数据库文件Exchange中的数据库文件是edb文件、stm文件和众多的log文件组成.其中以edb结尾的文件是数据库文件.以stm结尾的是流数据文件,以log结尾的是事物日志文件.<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />E…

13岁上中科大,17岁攻读哈佛博士,“天才”尹希的开挂人生

全世界只有3.14 % 的人关注了爆炸吧知识2013年美国斯隆基金会(Alfred P. Sloan Foundation)颁发的美国斯隆研究奖获得者尹希&#xff0c;31岁哈佛最年轻的华人教授&#xff0c;获2017年“豪华版诺贝尔奖”之称的科学突破奖-物理学新视野奖&#xff0c;这年唯一的获奖华裔。知识…

强制升级?!.NET Core 2.1容器镜像将从Docker Hub中删除

前言.NET Core 2.1将于2021年8月21日结束支持&#xff0c;本来应该没什么影响&#xff0c;该怎么用继续用得了。但是&#xff0c;如果你在生产环境使用了.NET Core 2.1容器镜像&#xff0c;那就要注意了&#xff0c;从8月21日开始&#xff0c;.NET Core 2.1容器镜像将不再在Doc…

浅谈云计算核心技术

云计算一个高大上的名字&#xff0c;现在我也准备开始学习了&#xff0c;今天看了一本云计算的普及性书籍&#xff0c;将云计算的一些核心技术做一个简要的概括吧。虚拟化技术云计算跟虚拟化不能等同&#xff0c;有位专家说过&#xff0c;虚拟化提供了很好的底层技术平台&#…

“史上“最疯狂”的顶级数学家,看完后忍不住感慨太神了”

▲ 点击查看说起世界上最顶级的数学家&#xff0c;你的脑海中会浮现的&#xff0c;大概是欧拉、高斯、香农等数学巨匠。但是要说起成就和神秘性兼备的&#xff0c;一定就是——称为印度之子的——拉马努金。1887年12月22日&#xff0c;拉马努金出生在印度一个穷困潦倒的家庭&am…

JavaScript 游动层onmouseover

<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetGB2312"> <title>学生信息系统</title> <script language"javascript"> var showInfo new function () { this.showLayer func…